Ruby 3.3正式リリース。YJITコンパイラの大幅な性能向上、RubyのスレッドスケジューラとしてM:Nスレッドスケジューラ導入など新機能
今回は「Ruby 3.3正式リリース。YJITコンパイラの大幅な性能向上、RubyのスレッドスケジューラとしてM:Nスレッドスケジューラ導入など新機能」についてご紹介します。
関連ワード (予定通、使用量、大規模等) についても参考にしながら、ぜひ本記事について議論していってくださいね。
本記事は、Publickey様で掲載されている内容を参考にしておりますので、より詳しく内容を知りたい方は、ページ下の元記事リンクより参照ください。
Ruby開発チームは、2023年12月25日にRuby 3.3の正式リリースを発表しました。Rubyは毎年12月25日に新バージョンをリリースすることが恒例となっており、今回も予定通りに新バージョンが登場しています。
Ruby 3.3では、Shopifyが中心となって開発を進めてきたJITコンパイラのYJITコンパイラの大幅な性能向上、Rubyに同梱されているdefault gemとしてPrismパーサの導入、よりコストの小さなM:Nスレッドスケジューラの導入など新機能が加わっています。
YJITコンパイラの大幅な性能向上
Rubyはもともとインタプリタとして登場しましたが、現在では実行速度向上のためにJITコンパイラを取り入れるようになっています。
Ruby 3.1でメインラインにマージされたYJITコンパイラは、ECサイト構築サービスを提供するShopifyが、大規模なRailsアプリケーションにおいてより高い性能向上を目指して開発したJITコンパイラです。
2022年末に登場したRuby 3.2に搭載されたYJITコンパイラは本願環境にも耐える品質になったとされ、実際にShopifyが本番に投入したことを表明。その後も性能と品質の改善が進められてきました。
今回のRuby 3.3に搭載されたYJITコンパイラでは大幅なパフォーマンスの改善のほか、メモリ使用量の大幅な改善、パフォーマンスの急激な低下を起こす可能性があるコードGCのデフォルトでの無効化、プロファイリング機能の追加などが行われています。
また、今回実験的な実装として、新たにRubyで書かれたJITコンパイラであるRJITがMJITに置き換えられて導入されました。
M:Nスレッドスケジューラ
新たにRubyのスレッドスケジューラとしてM:Nスレッドスケジューラが導入されました。これはM個のRubyスレッドをN個のOSのネイティブスレッドで管理するため、スレッドの生成管理コストを抑えることができるようになります。
ただしC拡張ライブラリの互換性に問題が生じる可能性があるため、メインRactorでのM:Nスレッドスケジューラはデフォルトでは無効にされています。
また、Rubyに同梱されているdefault gemとしてPrismパーサが導入され、Ripperの代わりに使えるようになりました。
その他、Ruby 3.3の詳細は発表文をご覧ください。