////////////////////
//一般性问题//
////////////////////
#什么是Parrot?
Parrot是为支持Perl6语言而新设计的解释器。它被设计成一种独立的虚拟机,可以用来执行从Perl5,Perl6等动态语(dynamic languages)编译成的字节码。理想中,Parrot能够支持其他的动态,被编译成字节码(bytecode-compiled)的语言,如Python, Ruby和Tcl。
#为什么叫Parrot?
Parrot来源于Simon Cozens的愚人节玩笑,说的是Larry Wall和Guido van Rossum宣布Perl和Python将合并。
#Parrot就是Perl6吗?
否!Parrot是用来执行Perl6程序的。Perl6语言的定义正在被Larry Wall加工。Perl6的真正状态仍然是一个迷,她会和今天我们看到的Perl充分的相似,以及需要一个运行时系统。
#今天我能够使用Parrot吗?
当然!Parrot正处于她执行的早期阶段。使用Parrot最主要的方式是去写Parrot的汇编代码。你可以在Apache中使用Ask Bjorn Hansen的mod_parrot模块来建立动态内容(dynamic content)。不过千万不要用于产品的代码中,那只是一个玩具。
#为什么我要用Parrot汇编代码编程?
很多的原因:
*所有的人都在这么做
*It's a neat hack.
*你能够享受是用汇编编程的乐趣而不必担心系统的崩溃
严肃的说,使用Parrot汇编语言是一种充满乐趣的挑战,同时也是用来测试Parrot的最好的方式。
#什么时候才能通过一种“真正”的编程语言来使用Parrot?
这要看你是怎么看“真正”这个词了。
*Leon Brocard发布了一个Java字节码到Parrot字节码的编器。
*Gregor Purdy正在进行一种能够直接面对Parrot字节码的小语言Jako的方面的工作。
*Dan Sugalski和Jeff Goff已经开始了将Scheme编译成Perl 字节码方面的工作。
#Parrot是用什么语言写的?
C.
#Why not write it in insert favorite language here?(不晓得如何翻译insert favorite language)
Becuase of one of :
*Not available everywhere.
*Limited talent pool for core programmers.
*Not fast enough
#你为什么不使用外部工具或者X库(library X)?
*许可证兼容性(License compatibility)
Parrot有着一个古怪的许可证--她目前正在使用和Perl5同样的许可证,这种许可证是GNU GPL和Artistic 许可证的分离,可以简写成Artistic | GPL。因此,Parrot的许可证和GNU GPL兼容,这意味着你可以把Parrot同GPL代码相结合。
能够进入核心解释器的代码必须归入与Parrot一致的条款。我们连接进入解释器的库代码(比如,用于Unicode的ICU库)能够被其他的许可证代替,只要他们自己的条款不禁止这样做。
*平台兼容性
Parrot必须工作在所有的Perl5的平台上,以及少数特别的平台。Perl5可以在80个平台上运行;Parrot必须在Unix, Windows, Mac OS(X and Classic), VMS, Crays, Windows CE, and Palm OS等等。而她的处理器的构架将会是x86, SPARC, Alpha, IA-64, ARM, 和68x00(Palms and old Macs).如果某些东西不能在其中的一个平台/操作系统中工作,我们就无法在Parrot中使用它。
*速度,大小和适应性
Parrot不仅应该能够,而且应该是高效的在这些平台上工作。根据不同编译器,Parrot的核心大小是在250K到700K之间。这样她就能够在掌上系统上运行了。任何Parrot使用的库必须足够快,几乎不存在性能的冲突;必须足够小,几乎不存在核心大小上的冲突;足够强的适应性,能够处理如Perl, Python, Tcl, Ruby, Scheme等的各种要求。
#为什么用你们自己的虚拟机,而不是编译成JVM/.NET?
那些虚拟机针对静态类型语言的(statically typed languages)。比如Java, C# 和许多其他的语言都是静态类型语言,而Perl不是。由于各种各样的原因,意味着Perl若要是在那些虚拟机上运行会慢的多,所以针对Perl这样的动态语言(dynamic language)我们设计了专门的解释器。
#那么,你们不能在JVM/.NET上运行了?
当然不是。他们不是我们的第一目标。我们首先建立自己的解释器/虚拟机,然后才会开展基于JVM,.NET的工作。
///////////////////////////////////
//PARROT AND PERL//
//////////////////////////////////
#为什么重新实现Perl?(Why re-implement Perl)
好问题!
在2000年夏天,Larry wall宣布是到了从新开始建立Perl的时候了,这包括Perl语言,语言的执行,那些志愿去实现和维护语言的源码社区的开发者,以及更大的使用Perl的程序员社区。
很多的原因促使我们开展的这个计划:
*Perl5是一个稳定的,可靠的,健壮的开发平台;她还很年轻,到Perl6正式发布的以后。(证据:Perl4依然坚强的活着,而其实我们都想让她消失)
*若有需要,我们有将Perl5转化成Perl6的能力。这保留了向后的兼容性。
*语言有修改的必要(The lauguage can stand some revision):格式并不属于核心语言, typeglobs have outlived their unsefulness。通过修改语言,我们能使Perl更好。
*一些瑕疵应该被除去:一旦成功,系统应该返回TRUE来代替FALSE,localtime应该返回year 而不是 year-1900。
*用Perl代替C来写Perl编译器是一件非常好的事情.
#你想用Perl来写Perl编译器?
当然!C, Java, Lisp, Scheme……实际上所有的其他的语言都是self-hoisting 的!
#Parrot如何一起处理Perl5和Perl6?
我们还不清楚,这将依赖于Perl6语言的定义。但是,我们或许会根据编译的是Perl5还是Perl6来选择使用两个不同的Perl编译器。Larry曾经说过或许会使用一个package statement来声明该文件是Perl5,但具体怎么做,我们也不清楚。