Ruby 1.9の未来

@ITまつもとさんとささださんの記事 が載ってる。Ruby 1.9についてだそうだ。

まつもと いえいえ、逆にこれをちゃんと伝えていただきたいんです。1.9は安定版じゃなくて開発版です。“ブリーディング・エッジ”(Bleeding Edge)といって血がどばどば出ている状態のものです。そのために1.8系を用意しているということです。1.9の荒削りな部分が丸くなるには年単位で時間がかかると思うんです。そのときまでは1.8が運用されていると思います。もし何かの事情で1.9をエンタープライズで使いたいということであれば、自己責任でやっていただくしかない。

——でも、あまりエッジなことをやっていると、1.8系と互換性のあるJRubyがマスマーケットを獲って、Ruby 1.9とかい離していく可能性もあるんじゃないですか。

まつもと ええ、Ruby 2.0が1.x系をサポートするJRubyと別物になる可能性はありますよね。

ん、1.9は「2.0に向けての実験」ではある。でもさー、でもさー、ただtrunkで開発してるものを1.9と称するのではなくて、今回みたいにリリースを重ねていくというのは「2.0への踏み台」でもあるからなんじゃないの?

今回のRubyGems標準添付とか、ブロックパラメータの仕様変更とか、多値の扱いとか、M17Nとか、全般的に言語仕様としてとても良いものだったと思うんだよね。まさに、2.0に向けて進むべき道というか。まあ、まつもとさんを中心にみんなが何年も話し合ってきた成果なわけだから。

gemsの添付はJRubyはCRubyにさきがけて実践してるぐらいだし。パッケージングシステムが付いてるのは現代の言語としては当然でしょ? 文法非互換性も、1.8に対する非互換性ではあっても、結局は言語全体を一貫したルールで支配して、覚えることがより少なくてすむ、直感に沿った文法を実現する前向きな変更だ。

安定した1.9

今回のリリース祭りの顛末からして、確かに現段階で1.9をエンタープライズに使うのはリスキーだ。というか、選択肢としてあり得ない。でも、もう少し経って安定した頃には、みんなが1.9の優れた文法を享受する機会を得られたら嬉しいと思う。せめて今のv1_8ブランチぐらいには安心して使える安定した1.9feature実装が欲しい。

や、事情は分かってる。「Ruby 2.0」は「Perl 6」やかつての「Python 3000」と同じ、見果てぬ「洗練されたRuby」の象徴的な名前なんだよね。そして、バージョン番号はmajor, minor, teeny、各1桁(だから辞書式に比較できる)という前提でずっとやってきたので、Ruby 1.10というのも難しい。

かといって、それが「1.9」である限り安定することはできない。今の1.8のように「大きく互換性を損ねる変更は禁止」になったら実験性が失われて、Rubyは進化を止めてしまうから。そうしたら2.0は永遠に失われて、Rubyは死んでしまうから。

でもそこをなんとかならんだろうか。今回リリースされた新版リファレンスマニュアル、以前RUBY_VERSION定数の項にはこう書いてあった。

Ruby 1.8 までは、minor が奇数のバージョンは開発版、minor が偶数のバージョンは安定版です。 RUby 1.9.0 以降は、teeny が 0 のバージョンが開発版となる予定です。

じゃあ、teenyが0じゃないやつは? 準安定版とか、次期安定版お試し用とか、それぐらいにならんものか。

これから1.9系統に盛り込まれるであろう実験的機能は分からない。でも、今回1.9.0リリースに盛り込まれた機能はRubyist全員がいつかは使うべき良いものだ。Javaならここで5までバージョンを上げる。まさにTigerに匹敵する大きな一歩だ。これを「リスクを取りたくないなら2.0までおあずけ」はひどいだろう。JRubyにしても、私はこの機能を無視し続けるとは思わない。JVM上で実装し得ないYARV specificなものはともかく、それ以外はいつか手を出すだろう。この機能たちを無視するなら、JRubyはたとえビジネス的に一時盛り上がったとしてもただの負け犬だ。

実験の足を引っ張らず、1.9の「角がとれた」部分を順次取り込んでリリースを重ねる方法を考えて欲しい。というか、ruby-devにも投稿したけど、事務作業ぐらいならできるし、何でも手伝うので何とかして欲しい。