ディスカッション (11件)
Rubyのパフォーマンスを劇的に向上させる、AOT(Ahead-Of-Time)ネイティブコンパイラ「Spinel」がリリースされました。実行前にネイティブコードへコンパイルすることで、Rubyの実行速度を大きく底上げすることが期待されています。
もしこれがMatz本人によるものじゃなかったらかなり疑ってたと思う。でも定義は明確だし、彼ならRubyのセマンティクスの限界を完全に把握してるはず。
自分の卒論(EcmaScript 5が新しかった頃)でAOTのJSコンパイラを作ったことがあるんだけど、動くことは動いた。ただ、入力データに関して制限が多くてね。当時のJS開発者は適切に制限をかける意識が低くて(JSON.parseの存在すら知らないレベル)、結局断念した。今のTypeScript環境ならもっと現実的なんだろうけど。
限界も明確だよね。一般的なラムダ計算の制約は型推論システムの限界(Matt Mightの論文とかShed-skin Pythonの人たちが詳しい)を示唆してるし。
eval、send、method_missing、define_methodあたりって、非Rubyistから見ると実務コードでどれくらい使われてるものなの?あと、型指定なしの解析(JSONの取り込みとか)はどう処理してるんだろう?
これはかなりイケてるね。RubyのAOTコンパイラはずっと探してたんだ。
evalやメタプログラミングのフォールバックがないのは残念だけど、まあ小さなパフォーマンス重視のサブセットに絞ったってことだろう。
このAOTコンパイラでビルドされたGemがMRIといい感じで連携できたら最高なんだけどな。
標準的なRuby(Gemを含む)のパッケージングやバンドルには、結局tebakoやkompo、ocranが必要になるだろうね。ruby-packerやtraveling ruby、jruby warblerみたいに似たようなプロジェクトも昔からたくさんあるし。
選択肢が増えるのはいいことだけど、開発者UXがもっと改善された決定版みたいなツールが早く出てきてほしい。
補足すると、これRubyKaigi 2026でMatzが発表したやつだよ。まだ実験的なものだけど、Claudeの助けを借りて約1ヶ月で作り上げたらしい。デモも大成功だった。
名前の由来は新しい猫からで、その猫の名前は『カードキャプターさくら』のキャラから取られてる。ちなみにそのキャラのパートナーの名前がRubyなんだって。
うわ、たった1ヶ月強で書かれたのか。AIについて色々言う人はいるけど、才能あるプログラマーの手にかかれば劇的なスピードアップを実現できるんだな。
ものすごく印象的だけど、AIエージェントなしでは維持不可能なのは明らかだよね。spinel_codegen.rbなんて2万1000行もあって、メソッドによっては15段階ものネストがあるんだぜ。
コンパイラのコードなんて元々綺麗なもんじゃないけど、それを差し引いても人間が保守するのはかなりキツい代物だと思う。
制限事項:
- eval系なし:eval, instance_eval, class_eval
- メタプログラミングなし:send, method_missing, define_method(動的)
- スレッドなし:Thread, Mutex(Fiberはサポート)
- エンコーディングなし:UTF-8/ASCII固定
- 一般的なラムダ計算なし:深くネストされた -> x { } と [] の呼び出し
UTF-8/ASCII固定は個人的には大きな制限とは思わないけど、それ以外はかなり多くのプログラムにとってネックになるんじゃないかな。これを解消するだけでも相当な労力が必要だと思う。
「スレッドなし」がなぜなのか気になるな。Rubyのスケジューラーや基盤のpthread実装はCの領域で問題なく動くはずだし。単に「依存関係ゼロ」を目指したのかな?オプションで「拡張」ができるようになるならいいけど、もし今のままだと自分には奇妙なトレードオフに見える。
eval系なし:eval, instance_eval, class_eval
メタプログラミングなし:send, method_missing, define_method(動的)
スレッドなし:Thread, Mutex(Fiberはサポート)
長年Rubyを書いてきて、これらの機能を散々使い倒してきた身からすると、実はこういうRubyこそが自分がたどり着いた理想形かもしれない。シンプルで分かりやすくて、なおかつRuby特有の美しさが損なわれていないからね。
LLMという強力なコード生成ツールがある今、この制限付きのRubyはかなり実用的だと思う。メタプログラミングの多くはボイラープレートを減らして生産性を高めるために存在してたけど、開発者が直接コードを書かない時代になれば、もうそれも必要ないわけだし。
インフラ系のツールで役に立ちそうだな。RVMとかの代わりにRuby自体のインストールも兼ねるスタティックコンパイルされたバンドラーが、Rubyで書けるようになるなんて最高じゃないか。
定番のRuby buildpackはRubyで書かれてるけど、結局bashでブートストラップしなきゃいけないのが面倒だしエッジケースも多い。CNBはRustで書かれててその問題を回避してるけど、依存関係なしで単一バイナリを配れるのはすごく強力だと思う。
GuidoがPythonで同じことをClaudeとやったらどうなるのか、めちゃくちゃ見てみたい。