| 14 | | 计划概述</h1> |
| 15 | | <h2>何谓 |
| 16 | | Pugs 外典?</h2> |
| 17 | | <p><a |
| 18 | | href="http://svn.perl.org/perl6/pugs/trunk/docs/">Pugs 外典</a>(Pugs Apocrypha) |
| 19 | | 是一系列采问答体例,用以解释 Pugs 设计及实作的文件。本外典(PA01)乃此一计划之总要。</p> |
| 20 | | <h2>何谓 |
| 21 | | Pugs?</h2> |
| 22 | | <p>Pugs 始自 2005 年 2 月,是针对 Perl 6 语言进行的实作,由负责人 |
| 23 | | Autrijus Tang(唐宗汉)在开发团队 (committers)与贡献 |
| 24 | | 者(contributors)的襄助下,进行设计及开发。</p> |
| 25 | | <h2>何谓 |
| 26 | | Perl 6?</h2> |
| 27 | | <p><a |
| 28 | | href="http://dev.perl.org/perl6/">Perl |
| 29 | | 6</a> 是 Perl 语言的下一个主要版本,由 |
| 30 | | Larry Wall 领导的团队负责设计。Perl 是一种语境相关、 |
| 31 | | 多重典范之实用程序语言。 Perl 6 团队已表示<a |
| | 13 | 外典之一<br> |
| | 14 | <span style="font-weight: normal;">Pugs 计划概述</span></h1> |
| | 15 | <h2>何谓 Pugs 外典?</h2> |
| | 16 | <p><a href="http://svn.perl.org/perl6/pugs/trunk/docs/">Pugs |
| | 17 | 外典</a>(Pugs Apocrypha)是一系列采问答体例,用以解释 Pugs 设计及实作的文件。本外典(PA01)乃此一计划之总要。</p> |
| | 18 | <h2>何谓 Pugs?</h2> |
| | 19 | <p>Pugs 始自 2005 年 2 月,是针对 Perl 6 语言进行的实作,由负责人 Autrijus Tang(唐宗汉)在开发团队 |
| | 20 | (committers)与贡献者(contributors)的襄助下,进行设计及开发。</p> |
| | 21 | <h2>何谓 Perl 6?</h2> |
| | 22 | <p> |
| | 23 | <a href="http://dev.perl.org/perl6/">Perl |
| | 24 | 6</a> 是 Perl 语言的下一个主要版本,由 Larry Wall 领导的团队负责设计。Perl |
| | 25 | 是一种语境相关、多重典范之实用程式语言。 Perl 6 团队已表示<a |
| 35 | | <p>截至 2004 年 12 月,Perl 6 大部份规格都 |
| 36 | | 已载明于一系列的<a |
| 37 | | href="http://dev.perl.org/perl6/synopsis/">纲 |
| 38 | | 要</a>(Synopses)中。虽然纲要日后可能还会 |
| 39 | | 有所更动,但目前已稳定到可以实作的地步。Larry |
| 40 | | 的<a |
| 41 | | href="http://dev.perl.org/perl6/apocalypse/">启示录</a>(Apocalypse)是许多 |
| 42 | | 纲要的基 |
| 43 | | 础。设计团队偶尔也会发表<a |
| 44 | | href="http://dev.perl.org/perl6/exegesis/">注 |
| 45 | | 疏</a>(Exegesis), 解说启示录的内容。Pugs 遵循纲要之内容, |
| 46 | | 当有疑义时则参考启示录与注疏。</p> |
| 47 | | <h2>何谓「Apocrypha」?</h2> |
| 48 | | <p><a |
| 49 | | href="http://en.wikipedia.org/wiki/Apocrypha">Apocrypha</a>(外典)一词源 自希腊文 |
| | 29 | <p>截至 2004 年 12 月,Perl 6 大部份规格都已载明于一系列的<a |
| | 30 | href="http://dev.perl.org/perl6/synopsis/">纲要</a>(Synopses)中。虽然纲要日后可能还会 |
| | 31 | 有所更动,但目前已稳定到可以实作的地步。Larry 的<a |
| | 32 | href="http://dev.perl.org/perl6/apocalypse/">启示录</a>(Apocalypse)是许多纲要的基 |
| | 33 | 础。设计团队偶尔也会发表<a href="http://dev.perl.org/perl6/exegesis/">注疏</a>(Exegesis), |
| | 34 | 解说启示录的内容。Pugs 遵循纲要之内容,当有疑义时则参考启示录与注疏。</p> |
| | 35 | <h2>何谓“Apocrypha”?</h2> |
| | 36 | <p><a href="http://en.wikipedia.org/wiki/Apocrypha">Apocrypha</a>(外典)一词源 |
| | 37 | 自希腊文 |
| 51 | | 希腊文,单数型应为 <i>Apocryphon</i>。</p> |
| 52 | | <h2>外典与 |
| 53 | | Perl 6 设计文件之关系为何?</h2> |
| 54 | | <p>启示录与纲要描 |
| 55 | | 述抽象的 |
| 56 | | Perl 6 语言规范;外典则与 Pugs 实作息息相关。 |
| 57 | | 如同 <a |
| 58 | | href="http://www.parrotcode.org/docs/pdd/">Parrot 设计文件</a>, |
| 59 | | 外典也将依据 Pugs 的状态而不时更新。</p> |
| 60 | | <h2>Pugs 会 |
| 61 | | 实作完整的 Perl 6 规格吗?</h2> |
| 62 | | <p>会的。Pugs 将一直以最新的 Perl 6 纲要版本为 |
| 63 | | 实作目标。一旦有新的纲要或修订版本出现时,Pugs 和新版不一致之处,将视为 |
| 64 | | Pugs 的瑕疵。</p> |
| 65 | | <h2>Pugs 是 |
| 66 | | 自由软件吗?</h2> |
| 67 | | <p>是的。Pugs 采用 GPL 第二版及 Artistic License 第 2.0b5 版释出。Artistic |
| 68 | | 2.0 最终版本一旦底定,Pugs 即会采用。</p> |
| 69 | | <h2>Pugs 是 |
| 70 | | 否受到 Perl 基金会赞助?</h2> |
| 71 | | <p>没有。在接受 Perl 基金会的三份项 |
| 72 | | 目<a |
| 73 | | href="http://www.perlfoundation.org/gc/grants/2003_autrijus.html">补助</a>后, Autrijus 决定捐 |
| 74 | | 出自己的时间,透过 Pugs 来协助 Perl 6 项目,不向 TPF 请求赞助。</p> |
| 75 | | <h2>如何取得 |
| 76 | | Pugs?</h2> |
| 77 | | <p>从 <a href="http://svn.openfoundry.org/pugs/">Subversion</a> 或 <a href="http://wagner.elixus.org/%7Eautrijus/darcs/pugs">darcs</a> 档案库,可以取得最新版的 |
| 78 | | Pugs 源码。在 CPAN 上,也会以 <a href="http://search.cpan.org/dist/Perl6-Pugs/">Perl6-Pugs</a> 为名定期释出。(顺带一提,若有兴趣针对 Subversion 档案库进行离线开发,<a href="http://svk.elixus.org/">svk</a> |
| 79 | | 也许对你会有帮助。祗用 svn 当然亦无不可。)</p> |
| 80 | | <h2>如何编译 |
| 81 | | Pugs?</h2> |
| 82 | | <p>Pugs 采用标准 |
| 83 | | Makefile.PL 编译系统;请见 <a href="http://svn.openfoundry.org/pugs/README">README</a> 档案的详细说明。由于 Pugs 是用 Haskell 语言写 |
| 84 | | 成,请先安装 |
| 85 | | <a href="http://haskell.org/ghc/">Glasgow Haskell Compiler</a> (GHC) 6.2 或以上版本。请下载所属 |
| 86 | | 平台的<a href="http://haskell.org/ghc/">安装档</a>; |
| 87 | | 从源码编译 GHC 得花上不少时间。</p> |
| 88 | | <h2>何谓 |
| 89 | | Haskell?</h2> |
| 90 | | <p><a |
| 91 | | href="http://haskell.org/">Haskell</a> 乃标准化的纯粹函数式程序 |
| 92 | | 语言,具有惰性求值(lazy evaluation)特性。虽然它有许多不同的实作可用,但 Pugs 采用了 GHC 特有的若干功能, |
| 93 | | 因此必须用 GHC 来编译。 </p> |
| 94 | | <h2>GHC 又 |
| 95 | | 是什么?</h2> |
| 96 | | <p>GHC 是尖端的编译器与交互式环境,采用 |
| 97 | | <a href="http://haskell.org/ghc/license.html">BSD 式授权</a>释出。GHC 本身以 Haskell 写成,能把 Haskell |
| 98 | | 编译成字节码(bytecode)、C 语言程序,与某些平台的 |
| 99 | | 机器码。GHC 附有完整的链接库、为数众多的语言延伸,以及强大的最佳化系统(藉由某 <a |
| 100 | | href="http://www.cse.unsw.edu.au/%7Echak/haskell/ghc/comm/the-beast/mangler.html">Perl 5 程序</a>的协助)。因此,GHC 提供了解决 Perl 6 激活问题(bootstrapping |
| 101 | | problem)的绝佳平台。</p> |
| 102 | | <h2>何谓 |
| 103 | | Perl 6 激活问题?</h2> |
| 104 | | <p>Perl 6 |
| 105 | | 项目的目标是自足执行(self-hosting):Perl 6 编译器得用 Perl 6 本身撰写, |
| 106 | | 采用 Perl 6 Rules 来剖析 Perl 6 语法,而 Rules 又是 Perl 6 语言的一部份。此外,编译器产出之程序代码也得包含能动态执行 Perl 6 程序代码的 |
| 107 | | 求值器(evaluator)。要打破此种相依循环,唯有采用其它语言先实作某些部份,然后再用 Perl 6 加以重写。</p> |
| 108 | | <h2>最初的激活计划为何?</h2> |
| | 39 | 希腊文,单数型应为 <span style="font-style: italic;">Apocryphon</span>。</p> |
| | 40 | <h2>外典与 Perl 6 设计文件之关系为何?</h2> |
| | 41 | <p>启示录与纲要描述抽象的 Perl 6 语言规范;外典则与 Pugs 实作息息相关。如同 <a |
| | 42 | href="http://www.parrotcode.org/docs/pdd/">Parrot 设计文件</a>,外典也将依据 Pugs |
| | 43 | 的状态而不时更新。<br> |
| | 44 | </p> |
| | 45 | <h2>Pugs 会实作完整的 Perl 6 规格吗?</h2> |
| | 46 | <p>会的。Pugs 将一直以最新的 Perl 6 纲要版本为实作目标。一旦有新的纲要或修订版本出现时,Pugs 和新版不一致之处,将视为 |
| | 47 | Pugs 的瑕疵。<br> |
| | 48 | </p> |
| | 49 | <h2>Pugs 是自由软体吗?</h2> |
| | 50 | <p>是的。Pugs 采用 GPL 第二版及 Artistic License 第 2.0b5 版释出。Artistic 2.0 |
| | 51 | 最终版本一旦底定,Pugs 即会采用。</p> |
| | 52 | <h2>Pugs 是否受到 Perl 基金会赞助?</h2> |
| | 53 | <p>没有。在接受 Perl 基金会的三份专案<a |
| | 54 | href="http://www.perlfoundation.org/gc/grants/2003_autrijus.html">补助</a>后, |
| | 55 | Autrijus 决定捐出自己的时间,透过 Pugs 来协助 Perl 6 专案,不向 TPF 请求赞助。</p> |
| | 56 | <h2>如何取得 Pugs?</h2> |
| | 57 | <p>从 <a href="http://svn.openfoundry.org/pugs/">Subversion</a> 或 <a |
| | 58 | href="http://wagner.elixus.org/%7Eautrijus/darcs/pugs">darcs</a> |
| | 59 | 档案库,可以取得最新版的 Pugs 源码。在 CPAN 上,也会以 <a |
| | 60 | href="http://search.cpan.org/dist/Perl6-Pugs/">Perl6-Pugs</a> |
| | 61 | 为名定期释出。(顺带一提,若有兴趣针对 Subversion 档案库进行离线开发,<a |
| | 62 | href="http://svk.elixus.org/">svk</a> 也许对你会有帮助。祗用 svn 当然亦无不可。)<br> |
| | 63 | </p> |
| | 64 | <h2>如何编译 Pugs?</h2> |
| | 65 | <p>Pugs 采用标准 Makefile.PL 编译系统;请见 <a style="font-family: monospace;" |
| | 66 | href="http://svn.openfoundry.org/pugs/README">README</a> 档案的详细说明。由于 |
| | 67 | Pugs 是用 Haskell 语言写成,请先安装 <a href="http://haskell.org/ghc/">Glasgow |
| | 68 | Haskell |
| | 69 | Compiler</a> (GHC) 6.2 或以上版本。请下载所属平台的<a href="http://haskell.org/ghc/">安 |
| | 70 | 装档</a>;从源码编译 GHC 得花上不少时间。</p> |
| | 71 | <h2>何谓 Haskell?</h2> |
| | 72 | <p><a href="http://haskell.org/">Haskell</a> 乃标准化的纯粹函数式程式语言,具有惰性求值(lazy |
| | 73 | evaluation)特性。虽然它有许多不同的实作可用,但 Pugs 采用了 GHC 特有的若干功能,因此必须用 GHC 来编译。 </p> |
| | 74 | <h2>GHC 又是什么?</h2> |
| | 75 | <p>GHC 是尖端的编译器与互动式环境,采用 <a href="http://haskell.org/ghc/license.html">BSD |
| | 76 | 式授权</a>释出。GHC 本身以 Haskell 写成,能把 Haskell 编译成位元组码(bytecode)、C |
| | 77 | 语言程式,与某些平台的机器码。GHC 附有完整的程式库、为数众多的语言延伸,以及强大的最佳化系统(藉由某 <a |
| | 78 | href="http://www.cse.unsw.edu.au/%7Echak/haskell/ghc/comm/the-beast/mangler.html">Perl |
| | 79 | 5 程式</a>的协助)。因此,GHC 提供了解决 Perl 6 启动问题(bootstrapping problem)的绝佳平台。</p> |
| | 80 | <h2>何谓 Perl 6 启动问题?</h2> |
| | 81 | <p>Perl 6 专案的目标是自足执行(self-hosting):Perl 6 编译器得用 Perl 6 本身撰写,采用 Perl 6 |
| | 82 | Rules 来剖析 Perl 6 语法,而 Rules 又是 Perl 6 语言的一部份。此外,编译器产出之程式码也得包含能动态执行 Perl |
| | 83 | 6 程式码的求值器(evaluator)。要打破此种相依循环,唯有采用其它语言先实作某些部份,然后再用 Perl 6 加以重写。</p> |
| | 84 | <h2>最初的启动计划为何?</h2> |
| 110 | | href="http://search.cpan.org/dist/parrot/docs/faq.pod#Isn%27t_there_a_bootstrapping_problem?">Parrot 答客问</a>,最初的计划是利用 |
| 111 | | Perl 5 进行激活:先扩充 Perl 5,使其执行于 Parrot 虚拟机器上 |
| 112 | | (透过 B::Parrot 或 <a href="http://www.poniecode.org/">Ponie</a>),再以 Perl 5 实作 Perl 6 编译器,最后透过 |
| 113 | | p5-to-p6 转换器将编译器转译成 Perl 6。不过,虽然 |
| 114 | | <a |
| 115 | | href="http://search.cpan.org/dist/Perl6-Rules/">Perl6::Rules</a> 确实在 Perl 5 上实作了 Rules 的雏型,但对 |
| 116 | | 于建构编译器而言仍显得不够成熟。因此,激活计划转而以 C 语言代替。</p> |
| 117 | | <h2>修订后的激活计划为何?</h2> |
| | 86 | href="http://search.cpan.org/dist/parrot/docs/faq.pod#Isn%27t_there_a_bootstrapping_problem?">Parrot |
| | 87 | 答客问</a>,最初的计划是利用 Perl 5 进行启动:先扩充 Perl 5,使其执行于 Parrot 虚拟机器上(透过 <span |
| | 88 | style="font-family: monospace;">B::Parrot</span> 或 <a |
| | 89 | href="http://www.poniecode.org/">Ponie</a>),再以 Perl 5 实作 Perl 6 |
| | 90 | 编译器,最后透过 p5-to-p6 转换器将编译器转译成 Perl 6。不过,虽然 <a |
| | 91 | style="font-family: monospace;" |
| | 92 | href="http://search.cpan.org/dist/Perl6-Rules/">Perl6::Rules</a> 确实在 |
| | 93 | Perl 5 上实作了 Rules 的雏型,但对于建构编译器而言仍显得不够成熟。因此,启动计划转而以 C 语言代替。</p> |
| | 94 | <h2>修订后的启动计划为何?</h2> |
| 119 | | href="http://www.perlfoundation.org/gc/grants/2005-p6-proposal.html">建议书</a>, |
| 120 | | 首先应采用 C 语言实作 Rules 引擎(即为 <a |
| 121 | | href="http://cvs.perl.org/viewcvs/cvs-public/parrot/compilers/pge/">PGE</a>),用它将 Perl 6 剖析成 Parrot 的<a |
| 122 | | href="http://en.wikipedia.org/wiki/Abstract_syntax_tree">抽象语法树</a>(AST), 接着在 Parrot |
| 123 | | 里实作 |
| 124 | | AST 求值器。Ponie 和 p5-to-p6 仍在进 |
| 125 | | 行中,但已非激活程序中的关键成份。</p> |
| 126 | | <h2>Pugs 能 |
| 127 | | 如何协助 Perl 6 激活?</h2> |
| 128 | | <p>在激活程序中, |
| 129 | | 常存在许多瓶颈,使得许多依赖这些瓶颈的工作无法推展。好比说,没有可用的 |
| 130 | | Perl 6 实作,就难以为 Perl 6 撰写单元测试 |
| 131 | | 与标准链接库;在缺少 AST 接口的情况下,也没办法撰写 AST 求值器。Pugs 为此程序的各层面提供可用的替代组件,因此解决了上述的困境。</p> |
| 132 | | <h2>Pugs 有 |
| 133 | | 助于 Perl 6 语言设计吗?</h2> |
| 134 | | <p>在缺少可用的实 |
| 135 | | 作时,很难看出规格内的不一致与例外状况。然而,假如在实作许久之后,纔发现设计上的瑕疵,可能就得在重新架构上耗费许多心力。藉由提供可用的 Perl 6 实作,Pugs 可做为先期的确认 |
| 136 | | 平台;这样不但能趁早解决问题,也可以鼓励更多人运用 Perl 6 的特性。</p> |
| 137 | | <h2>为何选择 |
| 138 | | Haskell?</h2> |
| 139 | | <p>Haskell |
| 140 | | 具有许多与 Perl 6 特点相应的功能:Perl 6 Rules 与 |
| 141 | | <a |
| 142 | | href="http://www.cs.uu.nl/%7Edaan/download/parsec/parsec.html">Parsec</a> 十分相似;两种语言里都有惰性串行求值;延续函式(continuation)则可利用 |
| 143 | | <a |
| 144 | | href="http://www.nomaware.com/monads/html/contmonad.html">ContT</a> 单子转换器(monad |
| 145 | | transformer)来建构。这让雏型开发工作简化许多:首支可用的直译器 |
| 146 | | 只花了<a |
| 147 | | href="http://use.perl.org/%7Eautrijus/journal/23051">一星期</a>便释出了,在<a href="http://use.perl.org/%7Eautrijus/journal/23335">第三个星期</a>时,我们已经有了可供单元测试的全功能 <a |
| 148 | | href="http://svn.openfoundry.org/pugs/lib/Perl6/lib/Test.pm">Test.pm</a> 模块。</p> |
| 149 | | <h2>Pugs 是 |
| 150 | | 编译器还是直译器?</h2> |
| 151 | | <p>和 Perl 5 相似,Pugs 先把 Perl 6 程序编译成 AST,然后再用内建的求值 |
| 152 | | 器加以执行。不过,未来 Pugs 可能会提供支持多种编译器后端的编译器接口。</p> |
| | 96 | href="http://www.perlfoundation.org/gc/grants/2005-p6-proposal.html">建议 |
| | 97 | 书</a>,首先应采用 C 语言实作 Rules 引擎(即为 <a |
| | 98 | href="http://cvs.perl.org/viewcvs/cvs-public/parrot/compilers/pge/">PGE</a>), |
| | 99 | 用它将 Perl 6 剖析成 Parrot 的<a |
| | 100 | href="http://en.wikipedia.org/wiki/Abstract_syntax_tree">抽象语法树</a>(AST), |
| | 101 | 接着在 Parrot 里实作 AST 求值器。Ponie 和 p5-to-p6 仍在进行中,但已非启动程序中的关键成份。</p> |
| | 102 | <h2>Pugs 能如何协助 Perl 6 启动?</h2> |
| | 103 | <p>在启动程序中,常存在许多瓶颈,使得许多依赖这些瓶颈的工作无法推展。好比说,没有可用的 Perl 6 实作,就难以为 Perl 6 |
| | 104 | 撰写单元测试与标准程式库;在缺少 AST 介面的情况下,也没办法撰写 AST 求值器。Pugs |
| | 105 | 为此程序的各层面提供可用的替代元件,因此解决了上述的困境。</p> |
| | 106 | <h2>Pugs 有助于 Perl 6 语言设计吗?</h2> |
| | 107 | <p>在缺少可用的实作时,很难看出规格内的不一致与例外状况。然而,假如在实作许久之后,才发现设计上的瑕疵,可能就得在重新架构上耗费许多心力。藉由 |
| | 108 | 提供可用的 Perl 6 实作,Pugs 可做为先期的确认平台;这样不但能趁早解决问题,也可以鼓励更多人运用 Perl 6 的特性。</p> |
| | 109 | <h2>为何选择 Haskell?</h2> |
| | 110 | <p>Haskell 具有许多与 Perl 6 特点相应的功能:Perl 6 Rules 与 <a |
| | 111 | href="http://www.cs.uu.nl/%7Edaan/download/parsec/parsec.html">Parsec</a> |
| | 112 | 十分相似;两种语言里都有惰性串列求值;延续函式(continuation)则可利用 <a |
| | 113 | href="http://www.nomaware.com/monads/html/contmonad.html">ContT</a> |
| | 114 | 单子转换器(monad transformer)来建构。这让雏型开发工作简化许多:首支可用的直译器只花了<a |
| | 115 | href="http://use.perl.org/%7Eautrijus/journal/23051">一星期</a>便释出了,在<a |
| | 116 | href="http://use.perl.org/%7Eautrijus/journal/23335">第三个星期</a>时,我们已经有了可 |
| | 117 | 供单元测试的全功能 <a style="font-family: monospace;" |
| | 118 | href="http://svn.openfoundry.org/pugs/lib/Perl6/lib/Test.pm">Test.pm</a> |
| | 119 | 模组。</p> |
| | 120 | <h2>Pugs 是编译器还是直译器?</h2> |
| | 121 | <p>和 Perl 5 相似,Pugs 先把 Perl 6 程式编译成 AST,然后再用内建的求值器加以执行。不过,未来 Pugs |
| | 122 | 可能会提供支援多种编译器后端的编译器介面。<br> |
| | 123 | </p> |
| 154 | | <p>如果要实作编译 |
| 155 | | 器的话,首先很可能会是产出 Perl 6 程序代码,类似 |
| 156 | | <a |
| 157 | | href="http://search.cpan.org/dist/perl/ext/B/B/Deparse.pm">B::Deparse</a> 模块的编译器后端。接下来 |
| 158 | | 则可能产出 Haskell 程序代码,并交由 GHC 编译成 C 语言。届时,下一个目标很可能是 |
| 159 | | <a |
| 160 | | href="http://cvs.perl.org/viewcvs/cvs-public/parrot/ast/">Parrot AST</a> 接口。如果有人愿意协助的话,我们也可能再加入其它后端(譬如 Perl 5 bytecode)。</p> |
| 161 | | <h2>预定的 |
| 162 | | Pugs 开发计划为何?</h2> |
| 163 | | <p>Pugs 之主要/次要版本号将逼近 |
| 164 | | 2*π;次版本号中的各小数字皆代表一项里程碑。版本号的第三位数会在每 |
| 165 | | 次释出时递增。目前的里程碑 |
| | 125 | <p>如果要实作编译器的话,首先很可能会是产出 Perl 6 程式码,类似 <a |
| | 126 | style="font-family: monospace;" |
| | 127 | href="http://search.cpan.org/dist/perl/ext/B/B/Deparse.pm">B::Deparse</a> |
| | 128 | 模组的编译器后端。接下来则可能产出 Haskell 程式码,并交由 GHC 编译成 C 语言。届时,下一个目标很可能是 <a |
| | 129 | href="http://cvs.perl.org/viewcvs/cvs-public/parrot/ast/">Parrot |
| | 130 | AST</a> 介面。如果有人愿意协助的话,我们也可能再加入其它后端(譬如 Perl 5 bytecode)。</p> |
| | 131 | <h2>预定的 Pugs 开发计划为何?</h2> |
| | 132 | <p>Pugs 之主要/次要版本号将逼近 2*π;次版本号中的各小数位皆代表一项里程碑。版本号的第三位数会在每次释出时递增。目前的里程碑 |
| 167 | | <ul type="disc"> |
| 168 | | <li class="MsoNormal" style="">6.0: 首次释出</li> |
| 169 | | <li class="MsoNormal" style="">6.2: 基本输出入与流程控制组件、可覆写变量(mutable variables)与赋值(assignment)。</li> |
| 170 | | <li class="MsoNormal" style="">6.28: 类别(classes)与特质(traits)。</li> |
| 171 | | <li class="MsoNormal" style="">6.283: 规则(rules)与文法(grammars)。</li> |
| 172 | | <li class="MsoNormal" style="">6.2831: 角色组合(role composition)及其它执行时期功能。</li> |
| 173 | | <li class="MsoNormal" style="">6.28318: 宏(macros)。</li> |
| 174 | | <li class="MsoNormal" style="">6.283185: 如有必要,将 Pugs 移植至 Perl 6。</li> |
| | 134 | <ul> |
| | 135 | <li>6.0: 首次释出</li> |
| | 136 | <li>6.2: 基本输出入与流程控制元件、可覆写变数(mutable variables)与赋值(assignment)。</li> |
| | 137 | <li>6.28: 类别(classes)与特质(traits)。</li> |
| | 138 | <li>6.283: 规则(rules)与文法(grammars)。</li> |
| | 139 | <li>6.2831: 角色组合(role composition)及其它执行时期功能。</li> |
| | 140 | <li>6.28318: 巨集(macros)。</li> |
| | 141 | <li>6.283185: 如有必要,将 Pugs 移植至 Perl 6。</li> |
| 179 | | href="http://haskell.org/ghc/contributors.html">移植者名单</a>与<a href="http://haskell.org/ghc/download_ghc_622.html">下载网页</a>有 |
| 180 | | 详细的信息。从 6.2.0 开始,Pugs 团队也会提供若干平台的安装档。</p> |
| 181 | | <h2>Pugs 的 |
| 182 | | 速度是否够快?</h2> |
| 183 | | <p>在 Parsec 的强力支持 |
| 184 | | 下,Pugs 的解译器很快。不过 Pugs 的求值器目前尚未最佳化:在一般 |
| 185 | | PC 上每秒约处理 1000 个运算符,大约比 Perl 5 慢上 100 倍。这对实现雏型 |
| 186 | | 语言功能来说,已经够快了;假如还不能满足你的需要,请考虑帮忙开发编译器后端。</p> |
| 187 | | <h2>有 |
| 188 | | Perl 6 模块的 CPAN 吗?</h2> |
| 189 | | <p>目前 Pugs 会在 Perl 5 搜寻路径 |
| 190 | | 下,以 Perl6::lib 作为 Perl 6 链接库名称 |
| 191 | | 的前缀。好比说,Test 模块将安装于 Perl 5 链接库路径 |
| 192 | | 下的 Perl6/lib/Test.pm。 这祗是权宜之计;未来应该会有更稳定的解决方案。</p> |
| 193 | | <h2>Pugs 能 |
| 194 | | 与 Perl 5 链接库共享吗?</h2> |
| 195 | | <p>虽然目前还不 |
| 196 | | 行,但我们未来可能会照 Autrijus 之前实作 |
| 197 | | <a |
| 198 | | href="http://search.cpan.org/dist/Inline-MzScheme/">Inline::MzScheme</a> 的方式,撰写 Inline::GHC 模块,让 Perl 5 与 Haskell 模块能相 |
| 199 | | 互沟通。如果成功的话,架一个 |
| 200 | | Inline::Pugs 在上面也非难事。不然,我 |
| 201 | | 们也可能写个产出 Pugs AST 码的 Perl 5 程序代码解译器,让 |
| 202 | | Pugs 能执行纯以 Perl 写成的模块。再不然,也可以把 Pugs AST 编成 Perl 5 的 AST,不过这更是纯属臆 |
| 203 | | 测。</p> |
| 204 | | <h2>Pugs 能 |
| 205 | | 与 Haskell 链接库共享吗?</h2> |
| 206 | | <p>目前你可以把 |
| 207 | | Haskell 链接库静态链接至 Pugs 的内建函式,祗 |
| 208 | | 需修改 <a |
| 209 | | href="http://svn.openfoundry.org/pugs/src/Prim.hs">Prim.hs</a> 内的几列程序代码即 |
| 210 | | 可。我们正考虑撰写 |
| 211 | | <a |
| 212 | | href="http://www.cse.unsw.edu.au/%7Edons/hs-plugins/">hs-plugins</a> 的简易界面,让 Pugs 能动态加载 Hasekll 链接库, |
| 213 | | 甚至在 Perl 6 中内嵌 Haskell 程序代码。</p> |
| 214 | | <h2>Pugs 能 |
| 215 | | 与 C 链接库共享吗?</h2> |
| 216 | | <p>还不行。不过 |
| 217 | | <a href="http://www.haskell.org/hdirect/">HaskellDirect</a> 配上前述的 |
| 218 | | hs-plugins,似乎会是与 C、CORBA 及 COM 链接库沟通的简单 |
| 219 | | 方式。</p> |
| 220 | | <h2>我会 |
| 221 | | Perl 5,不懂 Haskell。我能帮 Pugs 的忙吗?</h2> |
| 222 | | <p>当然!Pugs 的标准链接库与单 |
| 223 | | 元测试都是以 Perl 6 写成的,而我们总是需要更多的测试和链接库。这方面的工作只需要懂 Perl 5,再花上几分钟熟悉少部份语法的不 |
| 224 | | 同之处即可。当然,过程中你也可能会学到一些 Haskell 相关的知识。</p> |
| 225 | | <h2>我会 |
| 226 | | Haskell,但不懂 Perl 5。我可以帮忙吗?</h2> |
| 227 | | <p>当然!Perl 6 和 Haskell 有很多相 |
| 228 | | 似之处,好比说依据型别分派的函式(type-based function |
| 229 | | dispatch)、以函式为值(first class functions), |
| 230 | | 以及局部套用函式(currying)等等;因此,要了解语法也会简单许多。总是有许多功能的待办测试等着实作,不用怕找不到事情 |
| | 145 | href="http://haskell.org/ghc/contributors.html">移植者名单</a>与<a |
| | 146 | href="http://haskell.org/ghc/download_ghc_622.html">下载网页</a>有详细的资讯。从 |
| | 147 | 6.2.0 开始,Pugs 团队也会提供若干平台的安装档。</p> |
| | 148 | <h2>Pugs 的速度是否够快?</h2> |
| | 149 | <p>在 Parsec 的强力支援下,Pugs 的解译器很快。不过 Pugs 的求值器目前尚未最佳化:在一般 PC 上每秒约处理 1000 |
| | 150 | 个运算符,大约比 Perl 5 慢上 100 倍。这对实现雏型语言功能来说,已经够快了;假如还不能满足你的需要,请考虑帮忙开发编译器后端。</p> |
| | 151 | <h2>有 Perl 6 模组的 CPAN 吗?</h2> |
| | 152 | <p>没有。当前发布 Perl 6/Pugs 模组较好的方式,是交由 openfoundry.org 的提交者,将你的模组放到 Pugs 原始码档案库下的 modules/ 目录。最好能同时提供该模组的测试案例,让我们对该模组多些了解。</p> |
| | 153 | |
| | 154 | <p>但情况也不是就那么糟。假如你够耐心,可以等候 <span style="font-family: monospace;">Pugs::MakeMaker</span> 和 <span style="font-family: monospace;">Module::Install::Pugs</span> 的出现。等到以上模组出现在 CPAN 上,表示我们已经解决了散布上的问题。你就可以开始把东西丢上 CPAN 了。当然,随时欢迎各方提供其它意见。 |
| | 155 | </p> |
| | 156 | <h2>Pugs 能与 Perl 5 程式库共用吗?</h2> |
| | 157 | <p>虽然目前还不行,但我们未来可能会照 Autrijus 之前实作 <a style="font-family: monospace;" |
| | 158 | href="http://search.cpan.org/dist/Inline-MzScheme/">Inline::MzScheme</a> |
| | 159 | 的方式,撰写 <span style="font-family: monospace;">Inline::GHC</span> 模组,让 |
| | 160 | Perl 5 与 Haskell 模组能相互沟通。如果成功的话,架一个 <span |
| | 161 | style="font-family: monospace;">Inline::Pugs</span> |
| | 162 | 在上面也非难事。不然,我们也可能写个产出 Pugs AST 码的 Perl 5 程式码解译器,让 Pugs 能执行纯以 Perl |
| | 163 | 写成的模组。再不然,也可以把 Pugs AST 编成 Perl 5 的 AST,不过这更是纯属臆测。</p> |
| | 164 | <h2>Pugs 能与 Haskell 程式库共用吗?</h2> |
| | 165 | <p>目前你可以把 Haskell 程式库静态链接至 Pugs 的内建函式,祗需修改 <a |
| | 166 | style="font-family: monospace;" |
| | 167 | href="http://svn.openfoundry.org/pugs/src/Prim.hs">Prim.hs</a> |
| | 168 | 内的几列程式码即 |
| | 169 | 可。我们正考虑撰写 <a href="http://www.cse.unsw.edu.au/%7Edons/hs-plugins/">hs-plugins</a> |
| | 170 | 的简易界面,让 Pugs 能动态载入 Hasekll 程式库,甚至在 Perl 6 中内嵌 Haskell 程式码。</p> |
| | 171 | <h2>Pugs 能与 C 程式库共用吗?</h2> |
| | 172 | <p>还不行。不过 <a href="http://www.haskell.org/hdirect/">HaskellDirect</a> |
| | 173 | 配上前述的 hs-plugins,似乎会是与 C、CORBA 及 COM 程式库沟通的简单方式。</p> |
| | 174 | <h2>我会 Perl 5,不懂 Haskell。我能帮 Pugs 的忙吗?</h2> |
| | 175 | <p>当然!Pugs 的标准程式库与单元测试都是以 Perl 6 写成的,而我们总是需要更多的测试和程式库。这方面的工作只需要懂 Perl |
| | 176 | 5,再花上几分钟熟悉少部份语法的不同之处即可。当然,过程中你也可能会学到一些 Haskell 相关的知识。</p> |
| | 177 | <h2>我会 Haskell,但不懂 Perl 5。我可以帮忙吗?</h2> |
| | 178 | <p>当然!Perl 6 和 Haskell 有很多相似之处,好比说依据型别分派的函式(type-based function |
| | 179 | dispatch)、以函式为值(first class |
| | 180 | functions),以及局部套用函式(currying)等等;因此,要了解语法也会简单许多。总是有许多功能的待办测试等着实作,不用怕找不到事情 |