「Ruby 3.2」におけるパフォーマンス改善

まつもとゆきひろ氏(以下、まつもと):さて、みなさんの貢献をご紹介しておきましょう。2022年の年末に公開される予定の「Ruby 3.2」では、パフォーマンス改善がたくさん行われています。YJITもありますし、最近も「YJIT使ってめっちゃ速い」みたいなブログ記事が出ていました。

それから昨日のキーノートにありましたね、WASMで動くRubyという感じで。、私自身は、「WASMで動くようになったのでマージしてもいいですか?」というリポートが来た時に、Rubyがサポートしているプラットフォームが1個増えただけという認識だったんですね、私はね。ですが、その直後に、ブログやいろいろな記事で取り上げられて、実は思ったよりだいぶインパクトが大きかったんだなと思いました。

また、例えば昨日のクックパッドのRubyクイズとか、実際にRuby on WASMで、ブラウザの中でRubyが動く。しかもCRubyが動いて、「これはすごいや」と思いましたが、これは3.2には入る予定です。

それからYJITが、Rustで書かれるようになりました。ずっとCでがんばるみたいに思っていたのですが、「Rustで書きたいんだけど」と来た時に、YJITは基本的にオプショナルなので、サポートしているプラットフォーム、していないプラットフォームもあるし、オプショナルなものならそれでいいかと思いました。

特に、YJITチームの生産性はRuby全体にとって非常に重要だと思ったので、「じゃあ、どうぞ」と言ったら、私にとって驚くべき速さでコミットされて、「できました」とか言われて。なんという開発力と思いました。

最近は、それをベースにしてARM64サポートも行われるようになりました。まだバグがちょっとあると聞いていますが、それでもAppleシリコンの上でYJITが動くというのは、非常に重要だと思います。ありがとうございます。

メモリーアロケーションの改善も順調に進行しています。Shapeはまだ入っておらず、3.2に間に合うかどうかもちょっとわからないんですけども、今後に期待しています。

昨日、笹田さんが発表してくださったMaNy、N:M threadingは、残念ながら3.2には間に合わないかもしれないということですが、がんばって開発してくださっています。100万スレッドを作れるかもしれないというのは、だいぶ希望ですよね。

「Data objects」。長らくRubyにはDataというクラスがあったんですね。ただ、ぜんぜん使われていなくて3.0でなくなったんですよ。

誰も使っていなかったし、そもそもなくなったので、これ幸いと再利用して、まぁ、地上げみたいな感じですね(笑)。地上げはだいたいうまくいかないんですけど、今回はだいぶうまくいったので、新しくDataオブジェクトにしました。

Structクラスのイミュータブル版だと思っていただければいいんですけれども、Dataオブジェクトが追加できるようになりました。もしかしたら、今後のRubyのプログラミングスタイルが、イミュータブルなDataオブジェクトを多用するスタイルに変わっていくかもしれません。

「syntax_suggest gem」が入りました。ネストして、ネストが間違っていた時に、「こことここの対応が間違っています」と教えてくれるgemですね。昔、「dead_end」っていう名前でしたけれども、マージするにあたって、もうちょっとジェネリックな名前に変わりました。

「error_highlight」も入るようになりました。エラーメッセージがよりきれいに美しく見えるようになりました。明日、遠藤さんが発表してくださいます。

3.2に入る機能は本当にたくさんあるのですが、とりあえずここまでにしておきます。

今までもこれからもRubyは前に進み続ける

あと、Rubyツールを開発している人たちに対して、非常に感謝の気持ちを表したいなと思います。

数年前から言っているんですが、Ruby 3.x、つまり3.0以降ですね。3.0より後は、言語の改善とか新しい文法追加とかは、あまり一生懸命やらないようにしようと思っているんですね。ちょっと、安定期というんですかね。

その代わりに、ツールの充実によってRubyの開発の生産性を上げようと考えています。Rubyの開発シーンにおけるツールはいろいろありますが、すべて重要だと思っています。

今でも「RubyMine」とか、これは有料ですが「Solargraph」「RuboCop」「Sorbet/Steep」ですね。そのほか、数えきれないほどのツールがあって、Rubyの開発を支援してくださっています。これらの開発を支援してくださっている方、本当にありがとうございます。

しかし、私たちはもっと改善できると思っているんですね。例えば、Language Server Protocolも、もっといろいろできるんじゃないかなと思いますし、そのために必要な開発や投資はしていこうと思っています。

もし、これらのツールを開発している人の中で、例えば助成金が必要であるとか、あるいは、技術的情報が必要であるとか、あるいは、Rubyのコアにこんなフックが必要であるとかありましたら、ぜひ私たちのところに相談しに来てほしいなと思います。

もちろん、なんでもはできないですが、できるだけ問題を解決して、ツールが充実するように支援していきたいなと思っています。

いずれにしても、Rubyは前に進みます。価値を生み出す方向に、そして、Rubyの生産性、Rubyでプログラミングしている時の快適性をより高くするために、前に進み続けます。今までもずっとそうやってきていましたが、これからもそうやっていきます。

それというのは、より良い世界を作るためですね。「Rubyを作らないほうがよかった」と言われるのではなく、「Rubyがあるこの世界はすばらしい」と思っていただけるようにしようと思っていますし、それはみなさんと一緒にやっていくことだと考えています。

キーノートはだいたいこれだけなんですけれども(笑)。このキーノートは、Salesforce.com、NaCl、GitHub Sponsors、そしてRubyコミュニティのみなさんの提供でお送りしました。ありがとうございます。

(会場拍手)

質疑応答

まつもと:さて、私は計算がよくできないんだけど、たぶんあと20分ぐらい時間があると思うので、残りの時間は質疑にしたいと思います。ここで、あそこらへんにMCが出てくる予定なんですが、あれ(笑)。

司会者:はいはい。

まつもと:あっ、来た(笑)。

司会者:基調講演ありがとうございます質疑応答、Q&Aなんですけど、2022年は、みなさんにマイクでしゃべっていただくのは感染対策上ちょっとやりたくないので、質問がある方は、こちらのチャットにお書きください。僕が拾って読み上げます。「takeout.rubykaigi.org」からログインして、こちらに質問を書き込んでいただけるとありがたいです。よろしくお願いします。

まつもと:この距離だと僕はちょっと字が見えないので、松田さんにお願いしました。

司会者:あと、中ホールは、ちょっと中継の品質が怪しかったというところで、すみません。運営で把握しています、ご迷惑をおかけしています。

まつもと:あら、そうなの? だいぶ流しちゃったのに。

司会者:映像が、「三重」なのに「見え」ていなかったみたいな。

まつもと:(笑)。ありがとうございます。すみません。

司会者:質問あるかな? ちょっと質問が上がってくる前に、僕から質問したいんですけど。まつもとさん、今回はお帰りいつでしたっけ?

まつもと:残念ながら3日目は参加できなくて、今晩遅く帰ります。

司会者:とのことです、みなさん。なので、まつもとさんと絡みたい方、まつもとさんと一緒に写真を撮りたい方、まつもとさんにサインをいただきたい方。あと先ほど本人からありましたが、「ありがとう」と言いたいだけとか、そういうのはかまわないですよね?

まつもと:もちろん、もちろん(笑)。

司会者:と思うので、みなさんどんどん、まつもとさんに話しかけて、絡んであげて……あげてってよくないな(笑)。

まつもと:いや、絡んであげてください(笑)。僕、今日はこのへんをフラフラしているので、ぜひつかまえていただければと思います。

司会者:もう、「ありがとう」「使っているよ」と言うだけでも。

まつもと:まぁ、ここには使わない人は来ないけどね(笑)。

司会者:あとついでに言うと、今日、Rubyコミッターの人たちに、なぜかおそろいの赤いTシャツを着ている方が非常に多いようなので。

まつもと:僕もこれから着ます(笑)。

司会者:これもまた「Rubyを使っているよ」とか「ありがとう」とか「Rubyのどこを作っているの?」とか、いろいろ話しかけるきっかけになるかと思いますので、赤いTシャツの人を見かけたら、そういう話もしてあげるといいのかなと思います。

(次回へつづく)