原来就知道perl很有用处,最近学正则才慢慢发现perl比我想象中的要牛更多。文本处理、cgi等等应用,多线程、unicode都可以支持。runtime编译,后悔没有早早学习一下。
这门语言确实很厉害,目前正在进行的又一个项目又是一个伟大的设想,在一个平台上运行好几种语言。大概过程是这样的,创始人Larry计划新的perl6开发的同时,像python等其他语言也遇到了同样的问题:它们最初设计的时候想要解决的问题现在都已经基本解决了,可当现在要添加新功能上去的时候会发现,由于最初的设计并没有想象到现在的这种需求,所以再添加新功能也是件很困难的事情。既然大家都遇到相同的问题,所以这时两个开放源代码社区就提议合作共同设计一个新的底层平台,使用这个底层从根本上来解决这些大家都遇到的问题,这个底层平台就是perl6的parrot。
以下部分转自《Perl6与唐宗汉》
Perl6整个项目的设想:
Perl6的整个项目是建立在底层parrot之上的。过去用perl5写的程序或模块与其他语言例如python、ruby都不能共容,如果想要共容的话必须用一些很糟糕的方法,所以他们就先设计了一个底层平台叫做parrot(鹦鹉,就像.net的运行期或java的虚拟机)。
我们写perl6的代码,然后我们通过一个编译器将perl6的代码编译成字节码(byte code),这个字节码才可以直接在parrot上面运行,而parrot再负责把这些字节码具体的翻译成intel或sparc等平台上的机器码来执行。也就是说你可以用任意的语言来编写程序,然后通过一个编译器来翻译成统一规则的字节码,在统一的一个虚拟cpu平台parrot上运行。这样你就可以使用任意的语言来编写程序,最后大家都编译成统一规则的字节码,由于大家的字节码都遵循相同的规则,所以在字节码之间的相互调用就可以十分平滑的实现,这样不论你用何种语言编写的程序,就可以很容易的互相使用(这种技术就是JIT技术,Just In Time)。这样你用perl写的模块,就可以用python来调用,各种语言实现了共通。而且计划perl5写的程序也可以移植到parrot上面使用,这就意味着在cpan上的几千个perl模块就依然可以使用,而且其他语言也可以调用这些perl模块。
而其他过去遇到的问题,如很难扩展,没有线程支持等,在parrot上面就解决掉了。
在perl6架构下的整个程序的执行过程,如下图(执行自上而下):
Source Code
+————+
| The Parser |
+————+
Syntax Tree
+—————+
| The Compiler |
+—————+
Byte Code
+———————+
| Bytecode Optimizer |
+———————+
Better Byte Code
+———-+
| Runtime |
+———-+
Source Code源代码,可以是各种语言的源代码。The Parser是各种语言的解析器(例如python就有python的解析器,c就有c的解析器),负责将源代码转换成语法树。Syntax Tree语法树。The Compiler编译器,按照calling conviention规则,将各种语法树编译成字节码。Byte Code字节码,就像虚拟cpu上面的汇编语言,而这个虚拟cpu就是parrot。Bytecode Optimizer字节码优化器。Better Byte Code优化后的字节码。Runtime在这里就是parrot。
因此最终成型的整个perl6项目实际上就是由两个部分组成:一个是底层的parrot,一个是上层的perl6语言。而Perl6的语言又可以分为:语言的设计(perl6的语法,规则,也就是Source Code),语言的实现(通过一个解析器与编译器将perl6的语言转换成字节码)。Perl6整个项目的想法与.net基本是同时想到的,整个概念其实与java和.net十分相似。
正在开发的Perl6及其相关软件:
Parrot,perl6的执行引擎。已经开发到了0.1.2版,现在实际可以运行python、basic。
在Parrot方面现在已经有了很多的半成品:
比如ponie是一个能将perl5编译到parrot上面来的软件。
有人正在将Php、Ruby移植到parrot上面来。有人声称要将gcc(gnu的开源c/c++编译器)移植到parrot上面,这样以后所有的可以用gcc编译的程序可以直接编译到parrot上面的字节码来运行。甚至还有人决定要移植.net到parrot上来。这当然是一个疯狂的决定,然而成事是都要靠疯子,疯子与天才是靠最后的成败来决定的,他未必会成功,但是如果成功是很了不起的(唐的原话)。
Pugs,不管其他perl6的开发,只是先对perl6做一个真实的实现,以此检验perl6语言的特性,帮助perl6语言的进一步设计,最后计划转变为perl6的编译器到parrot。
Post comment