数年前、Ruby2.0(Rite)とPerl6、どちらが早くリリースされる?かは
未知数だった。
ところが、蓋を開けてみると、現状はこうだ。
Rubyは2.0(Rite)のリリース前に先鋭的な機能を見送りVM化に
重点を置いた1.9.0(開発版)が昨年末にリリースされ、今現在も
1.9.1(安定板)のリリースに向けたブラッシュアップが今年の
クリスマスに向けて行われている。
対して、Perl6はHaskellで実装されたPugs等の実装が登場した
ものの、その全機能を俯瞰できる実装は未だ出ていない。
リリース競争におけるRubyの勝因は先鋭的な機能を見送り
(機能を絞り)VM化に注力したこと、笹田氏がYARVを開発し、
VM化のキーパーソンとなったこと等が挙げられる。
RubyのVMであるYARVとPerl6のVMであるParrotのスタンスの違いも
開発速度に大きな差を生じさせている。
YARVがRuby専用のVMとしてポジショニングされているのに対し、
Parrotは最初から多言語用の汎用VMとしてポジショニングされている
点である。
長期的には汎用VMを指向するにしても、短期的には特定の言語に特化
したほうが実装コストを削減でき、早期リリースに繋がると思う。
汎用VMとして成功しているのは.NetのCLRくらい、これは大企業が
フルタイム開発者を動員して開発しているからできる芸当だろう。
M$はスクリプト言語用にDLRという汎用VMをリリース済み
(開発続行中)。
.NetのOSS実装Mono、SilverLightのOSS実装MoonLightは共にOSS
ではあるものの大企業(Novell)がフルタイム開発者を動員して開発
しているという点ではオリジナルと同じ。
大企業がかまないOSSで同規模のことをやるのは難しい。
DLRにしても、1.0ではJavaScriptのみに対応し、2.0でのRuby、
Python等対応予定となっている。
よもやま話を一つ。
汎用VMとして将来有望なのはLLVM(Low Level VM)、ネイティブ
言語に適用でき、動的最適化可能という変わり種。既に
Mac OS X TigerのCore Image等での採用実績がある。
RubyとPerlはそのリリース戦略に大きな違いがあった。
Rubyは先鋭的な機能を盛り込んだ2.0のリリースに注力するよりも、
Ruby1.8の機能をブラッシュアップしつつ、VM化した1.9をリリース
するという現実的な解を選んだ。
(Pythonも先鋭的な機能の投入を抑えた現実路線を選択している。)
Perlは先鋭的な機能を盛り込みつつ、OO言語として生まれ変わり
VMの入れ替えも行うという姿勢を崩していない。
Perlも先鋭的な機能の搭載を保留し、OO言語化に的を絞った
バージョンのリリースに専念した方がよいのではないかと思う。
Perlの現状のリリース戦略ではPerl6のリリース時期は不透明すぎる。
Perlの開発期間の長さも、Perl6のリリース時期を予測不能にしている。
現行安定板5.10の開発に5年以上が費やされている。
Perlの「1つのことをするのに複数の方法を用意する」という設計思想
が、実装を複雑にし、開発の進捗を遅らせている点も無視できない。
開発期間の長期化は現実のニーズとの乖離を引き起こす可能性がある。
スクリプト言語のトレンドやニーズの変化は見逃せない。
5年以上前に策定されたPerl6の仕様が現在のニーズにマッチしているか
甚だ疑問である。
...Perl6の仕様、昨年末にFixされる予定だった模様。Fixされたのだろう
か?Fixされていないとすれば、そのリリース時期は更に混沌としてくる。
Perl6のリリース時にその時点でのニーズにPerl6がマッチしている
とは考えにくい。
だからといって、新しいニーズをどんどん仕様に盛り込んでいると
何時までたってもPerl6はリリースされない。
Perl6の仕様を再考しないと何時までもリリースできないのではない
だろうか?
ここによると、今年のクリスマスまでにPerl6の最初のアルファ版が
リリースされるらしい、ホンマかいな。安定版が何時リリースされる
かは全くの未知数。
#Perl自体はPerl5.xで既にVM化されていたので、修正しました。