Ruby 3.2.0がリリース―WebAssembly/WASIサポート、YJIT実用化、正規表現DoSへの対応など

2022年12月25日、Rubyの最新バージョンとなるRuby 3.2.0がリリースされた。Ruby 3.2では多くの機能が追加され、機能の改善も数多く実装されている。

WASIベースのWebAssemblyサポート

WebAssembly(Wasm)は、Webブラウザ上で高速、安全に動かすためのバイナリソフトウェア形式。これをブラウザを介さず各種OS上で動かすためのインターフェース仕様であるWASI(The WebAssembly System Interface)に対応した。これにより、CRubyのバイナリがWebAssembly/WASI環境をもつOS、ブラウザ、IoT環境などさまざまなプラットフォーム上で利用できるようになる。さらに、WASIの上にVFS(仮想ファイルシステム)を実装、Rubyアプリを単一の.wasmファイルに簡単にパッケージ化することができ、アプリの配布が手軽になるという。

実用段階になったYJIT

YJIT(Yet Another Ruby JIT)はShopifyが開発したRubyのJITコンパイラ。これまで実験的にCRubyに実装され、1年以上にわたりテストが行われてきたが、テストの間にさまざまな改良が加えられ、JITのオーバーヘッドやメモリ消費量を抑えつつ、実行スピードが通常のRubyインタプリタより41%高速になったという。YJIT をビルドするためにはRust 1.58.0以降の環境をインストールし、再構築を実行する必要がある。

ReDoSに対応するRegexpのマッチングアルゴリズム改善

ReDoS(正規表現DoS)は、正規表現マッチングの処理に時間がかかる文字列をわざと入力することで、コンピュータの計算リソースを奪う攻撃。これに対応するため、Ruby 3.2ではRegexpのマッチングアルゴリズムをメモ化の最適化によって大幅に改善し、90%程度の正規表現が短時間で判定できるようになったほか、それでも処理しきれないパターンに対してはタイムアウト機能により処理を回避できるようになった。


上記の新機能のほか,SyntaxSuggest機能の統合、TypeErrorとArgumentErrorの引数へのアンダーライン表示などの言語機能、各種パフォーマンス改善なども実装されている。

おすすめ記事

記事・ニュース一覧