_ [Ruby] RubyConf 2010 キーノート(3)
で、最後に「Diversity(多様性)」である。
初日のDave Thomasのキーノートでも3つの重要なこととして、
Diversifyをあげていた。多様性は重要なのである。
とはいえ、多様性はいいことばかりでもない。
Rubyにおける多様性といえば、昨今数々登場している別実装である。
- CRuby (1.9, 1.8)
- JRuby
- Rubinius
- IronRuby
- MacRuby
- MagLev
などなど、多くのRuby実装がある。これら以外にも「Rubyっぽい言語」まで含めると
本当にいくつあるのか見当もつかない。
昔はPythonの人たちに「Ruby(とPerl)は複雑すぎて、別実装は登場しそうにない。
Pythonを見てみろ、CPythonとJytonとIronPythonがある」などと言われたものだが、
今や別実装の数ではRubyの方がしのいでいる。Pythonの方もPyPyとか新しいものも登場してるが。
が、一方、このような多様性にはコストがかかる。
まあ、プラットフォームの違うJRubyはおいておくとしても、
CRubyとRubiniusとMacRubyで分散しているリソースを集約すれば、
もっと早く言語(実装)が進歩するような気もしないでもない。
しかし、オープンソースプロジェクトでは結局はそれぞれの参加者がやりたいように関わって
モチベーションを維持することの方がはるかに重要だ。
多様性は善で、コストは必要経費であるというのが私の認識である。
さて、多様性は善であるので、さらにそれを豊かにするために
私自ら新たな処理系を送り込もうと思う。
それは RiteVM であり、組み込みなど小規模なデバイス向けをターゲットとした処理系である。
現在のRubyは元々Unixをベースにして開発されたものであり、
UnixやPOSIX APIを提供しないような小さなデバイスや、
アプリケーションへの組み込みなどはあまり重視されてこなかった。
しかし、一方、組み込み分野などではデバイス性能の向上で
ソフトウェアの比重が高まりつつあり、
実行速度やリアルタイム性がそれほど要求されない分野で
Rubyのような「高級」な言語を使いたいという要求はそれなりにあるようだ。
そこで、以下のような処理系を新規に開発する
- 小規模なRuby言語処理系
- 機能はほぼRuby標準規格を満たす最小限。
さらにファイルI/Oなどは取り除く(後で追加可能)
- 実装はLuaを意識
- VM構造体を提供。グローバル変数を使わない
- 機能はコンポーネントとして提供。必要に応じて外せる。
たとえばコンパイラを外してevalもなし、などが実現できる
- ターゲットの要求に合わせてコンパイル時にさまざまに設定可能。
たとえば浮動小数点数をdoubleにするかfloatにするか、
Fixnumをintにするか、longにするか、long longにするか、など。
逆にいうと「どこでも同じように動く」は追求しない
- 浮動小数点数はimmediate(shootout対策w)。
- VMは32ビットワード命令、レジスタベース。命令セットもLuaに類似。
- GCはレイテンシを重視。インクリメンタルアルゴリズムを採用。
世代別についても検討したい
このVM開発のプロジェクトコードネームは Rite と称することにする。
RiteVMの開発は、経済産業省 平成22年度「地域イノベーション創出研究開発事業」の一環として行われる。
これにより、たとえば
- ゲームの組み込みスクリプト
- デジタル家電のソフトウェア開発
- 組み込み機器やロボットの非リアルタイム制御
などにRuby(のサブセット)が使えるようにする。
もちろん、今すぐにそうなるとは思っていないが、
今から準備すれば数年後には現実にできると考えている(ビジネス上の成功は別だけど)。
と、ぶちあげてしまったので、もう後に引けなくなったな。
FAQ
- いつ Rite が使えるようになるの?
-
わかりません。が、上述の通り、経済産業省の事業なので事業が終了する2011年度末には
なんらかの成果をあげないと、いろいろまずいことに...。
- RiteVMはオープンソースになるの?
-
はい。MITライセンスを考えています。ただし、今回(とその周辺)の開発で
ビジネスモデルを確立する必要があるので、あるいはGPL+商用ライセンスの
MySQLモデルになるかもしれません。
いずれにせよ、オープンソースになることは期待して良いでしょう。
- RiteVMが登場したらCRubyはお蔵入り?
-
そんなことはありません。Riteは分野限定の小規模実装ですから、
フル機能実装であるCRubyの代替にはならないでしょう。
- C APIはどうなるの?
-
今までのCRubyのAPIとは異なるものになります。CRubyのAPIは非常に使いやすいけれども
組み込みにはあまり向かないからです。技術的には不可能ではなさそうですが、
互換レイヤーを導入する予定は当面ありません。
- RiteVMはM17Nを提供しますか?
-
いいえ、コンパイル時にASCIIかUTF-8を選択してください。
エンコード変換機能も(標準では)提供しません。
- native threadをサポートしますか?
-
いいえ、RiteVMそのものはスレッドをサポートしません。
native threadを活用したい時には各スレッドにVMを割り当ててください。
fiberはVMで提供するかもしれませんが、予定は未定です。
- RiteVMはYARV/JRuby/Rubiniusより高い性能が出ますか?
-
たぶんそんなに性能は出ません。ただし、Floatの即値化とかのおかげで
いくつかのベンチマークでは良い性能がでるかもしれません。
- RiteVMの開発に貢献できますか?
-
オープンソース化されるまで待ってください。
githubで公開されると思います。gitの勉強しないとな
- Riteって聞いたことあるんだけど
-
2003年のRubyConfキーノートでRuby 2.0の実装コードネームとして提案した名称です。
結局、新しいVMはYARVが採用されたわけですが、まさかこんな形で復活するとは。
- まつもとさんはCRubyの開発から引退するんですか?
-
今でも十分貢献できてないんですが、引退するつもりはありません。
CRubyはRubyの第一実装であり続けますし、
私もRubyの設計者であり、コミュニティーのリーダーであり続けます。
RiteVM を (C)Ruby 2.0 のベースにしたほうが、色々幸せになれそうな気がします。性能とかも。
ゲームに組み込むならバインダー周りの整備も期待したいです。
バインダーってなんでしょう? swigとかtoluaのようなもの?
たぶんそうでしょうね。< バインダ<br>IDL をつかわずテンプレートでちょこっと細工すると C++ のネイティブメソッドをかけるたぐいのライブラリは lua まわりに多く、そういうのを想定してるとおもいます。boost-python も近いかも。
組込み、期待してます!スクリプトの再利用、機器間移動、クロス開発などが容易なようにプロファイルみたいな仕組みもできるといいですね。携帯電話プロファイルとかセンサデバイスプロファイルとか。