ニュース

「Ruby 3.1.0」がリリース ~プロセス内JITコンパイラー「YJIT」をマージ【2022年1月5日追記】

言語機能の強化やデバッグ機能の改善なども

「Ruby 3.1.0」が正式リリース

 スクリプト言語「Ruby」の最新版「Ruby 3.1.0」が、例年通り12月25日に公開された。昨年リリースされた「Ruby 3.0」と高い互換性を保ちつつも、多くの機能が追加されている。

 なかでも注目は、Shopifyが開発した新しいプロセス内JITコンパイラー「YJIT」をマージ(機能を取り込むこと)したことだ。「Ruby」は2018年に「MJIT」をマージ(Ruby 2.6)して以降、パフォーマンスの改善を継続しており、昨年には「Ruby3はRuby2の3倍速くする」という目標「Ruby3x3」を達成した。しかし、比較的大規模な「Optcarrot」ベンチマークでは目覚ましい高速化を達成する一方で、現実の業務アプリケーションの性能はそこまで改善できていなかったという。これはMJITがメソッドベースのJITコンパイラであり、外部のCコンパイラーを利用しているのが原因のようだ。

 今回導入されたYJITは「Basic Block Versioning」という技術を用い、独自のJITコンパイラーを「Ruby」内部に持つ。まずメソッドの冒頭のみをコンパイルし、実行時に実際に値が渡されて引数や変数の値が明らかになってから残りをコンパイルするという手法を用いることで、動的プログラミング言語においても効率のよいJITを実現しているという。これは実際のアプリケーションの動作を改善するのに有用で、「railsbench」では最大22%、「liquied-render」では39%の高速化を達成しているとのこと。

 YJITはまだ実験的機能なため、初期状態では無効化されている。試してみたい場合には、起動オプションに「--yjit」を加えることで有効化可能。ただし、今のところx86-64環境のUnix系プラットフォームでのみ実行できる。

 そのほかにも、ハッシュリテラルやキーワード引数の値が省略可能にになるなど、言語機能が拡張された。また、完全に0から書き直された新しいデバッガー「debug.gem」が同梱されたほか、「error_highlight」という組み込みgemが導入され、バックトレース中に詳細なエラー位置を表示できるようになり、デバッグの効率が大きく向上。「IRB」(Interactive Ruby)では[Tab]キーなどを利用したオートコンプリートがサポートされた。

 「Ruby」は、まつもとゆきひろ(Matz)氏によって1993年に開発が始められたスクリプト言語。オープンソースで開発が続けられており、Webアプリケーションをはじめ、さまざまな用途・プラットフォームで採用されている。バイナリとソースコードは現在、公式のWebサイトから無償でダウンロード可能。Windows環境では「RubyInstaller for Windows」の利用が推奨されている。「Ruby 3.1.0」に対応した「RubyInstaller for Windows」はまだリリースされていないが、間もなく公開されるだろう。

[2022年1月5日編集部追記] 2021年12月31日付けで「Ruby」v3.1.0に対応する「RubyInstaller for Windows」v3.1.0-1が公開された。現在、公式サイトからダウンロードできる。