一點點閑話
Perl是一門非常經(jīng)典的編程語言,廣泛用于文本處理,系統(tǒng)維護,網(wǎng)關(guān)編程(CGI)等許多領(lǐng)域。但是近年來,Perl的風頭漸漸被一些新的語言所蓋過,如Python,Javascript,Node.js等等。尤其是Python,這個從一開始就被視為Perl的對手的語言,得到了廣泛的認可和青睞。在最新的TIOBE編程語言排行榜上,Python已經(jīng)上升到第四位,超過了PHP,Javascript,僅次于三巨頭Java, C/C++。
目前Perl的穩(wěn)定版本是2015年6月1日發(fā)布的5.22。要知道,Perl 5的第一個版本5.000是在1994年發(fā)布的,距今已經(jīng)超過20年。至此之后,Perl的主版本號就一直停留在5,后續(xù)的開發(fā)工作也是基于Perl 5編譯器的核心,這使得Perl 5編譯器的核心變得越來越龐大,越來越復雜。其實,Perl的開發(fā)社區(qū)很早以前就意識到了這個問題,在2000年的時候,Perl的核心領(lǐng)導者Larry就提出了開發(fā)Perl 6的計劃。由于種種原因,Perl 6的開發(fā)計劃進度非常緩慢,過程中遇到了很多困難,發(fā)布日期也是一推再推。
但是,好消息是,盡管困難重重,Perl 6還是要來了。在2015年2月的一次學術(shù)會議上,Larry宣布,Perl 6將在2015年的圣誕節(jié)
雖然現(xiàn)在Perl 6還沒有正式發(fā)布,但是我們已經(jīng)可以用上Perl 6了。早在2010年,Rakudo團隊就發(fā)布了第一個可用的Perl 6的編譯器。在這里要稍微說一下關(guān)于Perl 6和他的編譯器名稱的問題。在Perl 5時代以及更早的時候,Perl既可以指這Perl一門語言,也可以指Perl的編譯器??墒窃赑erl 6的時候,Larry提出我們要讓語言本身和他的實現(xiàn)相分離。所以Perl 6指的是這個語言的設(shè)計標準,而他的實現(xiàn)(編譯器)可以是不同的。類似的例子就如C++。C++是一門語言,但是他可以有不同的編譯器,比如VS C++,G++,CLANG等等。而Rakudo就是目前對Perl 6標準支持最完善的一個編譯器。當然,要指出的是,這里的編譯器和C/C++的編譯器還是很不一樣的。因為Rakudo并不是將Perl代碼編譯成機器碼,可以在CPU上直接執(zhí)行,而是轉(zhuǎn)換成一種類似Java Bytecode的中間代碼。這種中間代碼可以在虛擬機上運行。其中,JVM就是被支持的一種虛擬機。除了JVM,還有MoarVM,這是比JVM更好的選擇。除了這兩個以外,還有一個叫Parrot,曾經(jīng)是Perl 6主要支持的。后來因為一些變故和MoarVM的崛起,Perl 6轉(zhuǎn)向了主要支持MoarVM,這些就不展開啦??偠灾琍erl 6完全擺脫了Perl 5的編譯器,采用的是一個全新的,沒有歷史包袱的架構(gòu)。這同時也帶來了一些問題,主要有兩個。一是Perl 6并不完全向下兼容Perl 5的語法。對于以前的Perl 5的程序,不能保證他們可以正確地被編譯,可能出現(xiàn)編譯錯誤。對于這個問題,在Python 2向Python 3轉(zhuǎn)變的過程中也遇到過。二是Perl 6由于采用了先編譯到中間代碼,再通過虛擬機執(zhí)行的方式,他的運行速度相比Perl 5慢了不少。這兩個問題目前還沒有非常完美的解決辦法。
雖然Perl 6還有一些問題,但是這不能掩蓋Perl 6背后先進的設(shè)計思想和更豐富好用的語法所帶來的便利。在Perl 6還沒有發(fā)布前,我們可以通過安裝Rakudo和MoarVM(JVM/ParrotVM)來體驗和學習一下Perl 6。
如何安裝
Windows
對于windows用戶,可以去這個頁面下載適合的安裝程序(.msi)
http://rakudo.org/downloads/star/
Mac OS X
對于Mac用戶,最好的方法就是用Homebrew。如果你已經(jīng)裝了,那么就可以通過下面的命令
$ brew install rakudo-star
可以使用命令查看一下我們安裝的Perl 6的版本
$ perl6 --version
This is perl6 version 2015.09 built on MoarVM version 2015.09
根據(jù)我自己的經(jīng)驗,這個rakudo的版本已經(jīng)更新到了基于MoarVM的2015.9,已經(jīng)是非常新的版本了。如果你的版本比我的還要新,那么恭喜你。
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上的版本要低一些,但是功能上該有的也基本都有了,所以問題不大。
如果你特別在意版本的問題,想要用到最新的版本,也有辦法,可以自己編譯源碼。但是非常不建議沒有經(jīng)驗的新手嘗試。
從源碼編譯安裝(慎重)
首先,從源碼編譯安裝要求
- 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已經(jīng)裝好啦。
下面就可以用這條命令安裝Rakudo了。
$ rakudobrew build moar
經(jīng)過將近十分鐘的等待和屏幕上眼花繚亂的安裝信息之后,Rakudo和MoarVM已經(jīng)成功裝好了。這時候再查看版本信息
$ perl6 --version
This is raked version 2015.11-416-g328e95e built on MoarVM version 2015.11-34-gc3eea17 implementation Perl v6.b
不錯吧,已經(jīng)更新到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
>