一点点闲话
Perl是一门非常经典的编程语言,广泛用于文本处理,系统维护,网关编程(CGI)等许多领域。但是近年来,Perl的风头渐渐被一些新的语言所盖过,如Python,Javascript,Node.js等等。尤其是Python,这个从一开始就被视为Perl的对手的语言,得到了广泛的认可和青睐。在最新的TIOBE编程语言排行榜上,Python已经上升到第四位,超过了PHP,Javascript,仅次于三巨头Java, C/C++。
目前Perl的稳定版本是2015年6月1日发布的5.22。要知道,Perl 5的第一个版本5.000是在1994年发布的,距今已经超过20年。至此之后,Perl的主版本号就一直停留在5,后续的开发工作也是基于Perl 5编译器的核心,这使得Perl 5编译器的核心变得越来越庞大,越来越复杂。其实,Perl的开发社区很早以前就意识到了这个问题,在2000年的时候,Perl的核心领导者Larry就提出了开发Perl 6的计划。由于种种原因,Perl 6的开发计划进度非常缓慢,过程中遇到了很多困难,发布日期也是一推再推。
但是,好消息是,尽管困难重重,Perl 6还是要来了。在2015年2月的一次学术会议上,Larry宣布,Perl 6将在2015年的圣诞节
虽然现在Perl 6还没有正式发布,但是我们已经可以用上Perl 6了。早在2010年,Rakudo团队就发布了第一个可用的Perl 6的编译器。在这里要稍微说一下关于Perl 6和他的编译器名称的问题。在Perl 5时代以及更早的时候,Perl既可以指这Perl一门语言,也可以指Perl的编译器。可是在Perl 6的时候,Larry提出我们要让语言本身和他的实现相分离。所以Perl 6指的是这个语言的设计标准,而他的实现(编译器)可以是不同的。类似的例子就如C++。C++是一门语言,但是他可以有不同的编译器,比如VS C++,G++,CLANG等等。而Rakudo就是目前对Perl 6标准支持最完善的一个编译器。当然,要指出的是,这里的编译器和C/C++的编译器还是很不一样的。因为Rakudo并不是将Perl代码编译成机器码,可以在CPU上直接执行,而是转换成一种类似Java Bytecode的中间代码。这种中间代码可以在虚拟机上运行。其中,JVM就是被支持的一种虚拟机。除了JVM,还有MoarVM,这是比JVM更好的选择。除了这两个以外,还有一个叫Parrot,曾经是Perl 6主要支持的。后来因为一些变故和MoarVM的崛起,Perl 6转向了主要支持MoarVM,这些就不展开啦。总而言之,Perl 6完全摆脱了Perl 5的编译器,采用的是一个全新的,没有历史包袱的架构。这同时也带来了一些问题,主要有两个。一是Perl 6并不完全向下兼容Perl 5的语法。对于以前的Perl 5的程序,不能保证他们可以正确地被编译,可能出现编译错误。对于这个问题,在Python 2向Python 3转变的过程中也遇到过。二是Perl 6由于采用了先编译到中间代码,再通过虚拟机执行的方式,他的运行速度相比Perl 5慢了不少。这两个问题目前还没有非常完美的解决办法。
虽然Perl 6还有一些问题,但是这不能掩盖Perl 6背后先进的设计思想和更丰富好用的语法所带来的便利。在Perl 6还没有发布前,我们可以通过安装Rakudo和MoarVM(JVM/ParrotVM)来体验和学习一下Perl 6。
如何安装
Windows
对于windows用户,可以去这个页面下载适合的安装程序(.msi)
http://rakudo.org/downloads/star/
Mac OS X
对于Mac用户,最好的方法就是用Homebrew。如果你已经装了,那么就可以通过下面的命令
$ brew install rakudo-star
可以使用命令查看一下我们安装的Perl 6的版本
$ perl6 --version
This is perl6 version 2015.09 built on MoarVM version 2015.09
根据我自己的经验,这个rakudo的版本已经更新到了基于MoarVM的2015.9,已经是非常新的版本了。如果你的版本比我的还要新,那么恭喜你。
Linux
在Linux上主要有两种方法来安装Perl 6。
从库中自动安装(建议)
如果你是初学者,我强烈建议采用这一种安装方法。
- Debian/Ubuntu/LinuxMint
$ sudo apt-get install rakudo
- Fedora/Red Hat/Cent OS
$ yum install rakudo
一句话就解决了,省心。照例看一下版本
$ perl6 --version
This is perl6 version 2013.12 built on parrot 5.9.0 revision 0
我用的是LinuxMint 17.3。这里安装的版本是基于parrot的2013.12,比Mac上的版本要低一些,但是功能上该有的也基本都有了,所以问题不大。
如果你特别在意版本的问题,想要用到最新的版本,也有办法,可以自己编译源码。但是非常不建议没有经验的新手尝试。
从源码编译安装(慎重)
首先,从源码编译安装要求
- Perl 5.8 or newer (这个基本不会有问题)
- git
- make
- gcc
对于后三个,如果没有的话需要自己安装。建议采用sudo apt-get install
的方法。
其次,我们需要用到一个小工具叫rakudobrew。利用这个小工具,可以让我们很方便的下载并安装最新的rakudo。安装这个小工具需要下面三条命令
$ git clone https://github.com/tadzik/rakudobrew ~/.rakudobrew
$ echo 'export PATH=~/.rakudobrew/bin:$PATH' >> ~/bashrc
$ source ~/.bashrc
如果没有什么错误信息的话,就表示rakudobrew已经装好啦。
下面就可以用这条命令安装Rakudo了。
$ rakudobrew build moar
经过将近十分钟的等待和屏幕上眼花缭乱的安装信息之后,Rakudo和MoarVM已经成功装好了。这时候再查看版本信息
$ perl6 --version
This is raked version 2015.11-416-g328e95e built on MoarVM version 2015.11-34-gc3eea17 implementation Perl v6.b
不错吧,已经更新到2015年11月的某个基于MoarVM的版本了。版本控么应该可以开心了吧。过了一段时间后如果希望升级到最新的版本,就再运行一次这个命令就可以了。
如果想要更新rakudobrew本身,可以用下面这个命令
$ rakudobrew self-upgrade
除了Rakudo以外呢,还推荐大家装一个小工具叫Panda。名字取的挺好的,就是熊猫。这个是专门为Perl 6用来安装Perl模块的工具。用下面的命令就可以装上。
$ rakudobrew build-panda
装上以后,我们来尝试装一个模块,叫Task::Star
$ panda install Task::Star
这个命令可以一键帮你装好所有常用的Perl 6的模块,就不用等到需要的时候再一个个去找去安装了。
另外需要补充的是,rakudobrew的方法也同样可以用在Mac OS X上,步骤也是一样的。这样也可以为你的Mac装上最新的Perl 6版本。
这样,我们就装好了Perl 6。
第一个Perl 6程序
我们可以试着用Perl 6来写一个最简单的程序:Hello World
$ perl6
>say "Hello World"
Hello World
>