Ruby 2.0開発がスタート、2012年にPreview版リリースへ
2011年10月19日、Rubyの生みの親で現在もCで実装されたRuby処理系の開発をリードしているまつもとゆきひろさんが、Ruby 2.0の開発開始を宣言しました(GitHubの関連コミット)。今のところ、
- 2012年12月24日のクリスマスにプレビュー版1をリリース
- 2013年2月24日にRuby 2.0正式版をリリース
というプランが描かれています。Ruby 2.0の正式版が出る2013年2月24日は、ちょうどRubyが20歳になる日でもあります。Rubyは20歳にしてRuby 2.0に、ということですね。
ここ数カ月ほど、Rubyのコア開発者の間で、今後のバージョン付けと、その開発の射程、リリーススケジュールについて議論が続いていましたが、1つの決着を見た形です。2.0を出すことについての議論は平坦ではなく、2011年7月に行われたRubyKaigiでのまつもとさんの「(1.9.3の次の順当なバージョンである)1.9.4は出さない。なぜなら、それを2.0とするからだ」という発言に、内部のコア開発者の卜部昌平さんが驚いて、それってどういうことよ? というチケットを投げたりしていたほどです。
ここで、Rubyのバージョンについて少し整理してみます。
●1.8系
互換性のための旧バージョンの系列。1.8.6に対して1.9の機能をバックポートした1.8.7は、今でも広く使われています。ただ、2008年にリリースされた1.8.7が1.8系の最後のリリースとなる予定です。2012年6月までは通常のメンテナンスが続き、2013年6月まではセキュリティフィックスも行われます。が、Rubyのコア開発者は1.8系は率直に言ってオススメしないとしていて、実際、New Relicの調査を見ても、1.8→1.9の移行はRails3.1の登場とも相まって、ようやく進み始めているようです。
●1.9系
現行の安定バージョンは1.9.2です。1.9系は、1.8系に比べてVM方式に移行し、高速化し、文法もより洗練されています。現在は1.9.2が最新ですが、1.9.3が今にも出そうというところです。1.9.3ではガベージコレクタが新しくなり、リアルタイム性が求められるケースで性能改善が見込めるほか、Railsのスタートアップタイムが3割とか5割速くなるという報告が数多くあります。1.9系のリリースマネージャ、Yuguiさんによれば、1.9.3で1.9系は1つの完成バージョンとなるということです。ちょうど1.8.6に相当する感じで、1.9.3は使われ続けることになる、ということでしょうか。
●2.0系
開発版バージョン。新機能が盛り込まれる予定です。
もともと、Ruby 2.0は過去との互換性よりも、新機能を盛り込むバージョンとして、さまざまな新機能や実装、アイデアが語られてきました。ただ、今回始まったRuby 2.0の開発は、実はそうした「未来にある理想のRubyとしての2.0」ではなく、1.9.4となるはずだったバージョンがスライドしたような印象です。どうも、まつもとさんの意向としては、1.9.4を待ってから2.0の開発ブランチを切るというのだと、2.0の仕事に取り掛かるのが遅れるからということのようです。
で、Ruby 2.0の新機能って?
さて、肝心の2.0の新機能って何? というところですが……。世代別GCや、並列してVMを走らせるMVMといった言語の根幹に関わる大物の機能は入らない模様です。GILまたはGVLと呼ばれているロック機構を取り除くのも2.0ではやらないことが決まったようです。実装の継承(mixin)やメソッドのオーバーライド(モンキーパッチ)で、その影響範囲を限定するような仕組み(ClassboxとかRefinementsと呼ばれているもの)は……、どうなんでしょうか。まだこの辺りは揺れているようです。こうしたゴールをすべて入れて理想のRubyとなるはずだった、Ruby 2.0はRuby 3.0へと遠のき、1.9.3よりも新しい試みを入れるものがRuby 2.0となる、ということのようです。また、2.0で入れるべき機能や修正について、Ruby 1.9で採用されたVMを設計・実装した笹田耕一さんによるアンケートが始まっています。
Ruby 2.0で確実に入るもので興味深い機能としては、「キーワード引数」があります。キーワード引数については、いきなり遠藤侑介氏が「実装してみました」と言って仕様の議論が始まったりもしているようです。元々Rails以降のRubyでは、引数をハッシュで渡すコンベンションが一般化していましたが、それがシンプルに書けるようになる、ということのようです。いちいちハッシュを評価するより、かすかに速くなったりもするのでしょうか。もちろん、速度よりも可読性や書きやすさによる生産性向上が主眼なのでしょうけど。
もう1つ、利用者としてやや気になるところは、標準添付ライブラリのgem化でしょうか。Rubyのライブラリは標準添付のものは当然Ruby処理系のパッケージに含まれる形でインストールされますが、この場合、Rubygemsのようなアップデートの仕組みが使えません。このため、言語のバージョンアップに合わせてしか標準ライブラリのアップデートができず、セキュリティパッチの配布で困るケースがあるということです。これを解決するために、一部の標準ライブラリのgem化が進みそうです。ただ、すでに標準ライブラリの中でも、RakeやRDoc、Minitest、JSONなどはgem化されています(ruby/lib/rubygems/defaults.rbが、ruby/defs/default_gemsを参照するなどしてインストールしています)し、全部が全部gem化されるわけではないということですが。
ともあれ、Ruby 2.0へ向けた取り組みが始まったということで、開発者の皆さま、おめでとうございます!