「Ruby 3.2.0」公開、WASIベースのWebAssemblyへのコンパイルをサポート その可能性は?:WebAssembly/WASI環境でCRubyのバイナリが利用可能に
オープンソースプログラミング言語「Ruby」の最新メジャーリリース「Ruby 3.2.0」が公開された。WASIベースのWebAssemblyサポートが追加されている。
Ruby開発チームは2022年12月25日、オープンソースプログラミング言語「Ruby」の最新メジャーリリース「Ruby 3.2.0」(以下、Ruby 3.2)を公開したと発表した。
Ruby 3.2では、WASIベースのWebAssemblyサポート、実用段階になったYJIT、ReDoS攻撃に対する正規表現クラスの改善など、多くの機能追加やさまざまな改善が行われている。
WASIベースのWebAssemblyサポート
WASIベースのWebAssemblyへのコンパイルがサポートされ、ブラウザやサーバレスエッジ環境、その他のWebAssembly/WASI環境でCRuby(Rubyのレファレンス実装)のバイナリが利用できるようになった。
WebAssembly(「Wasm」とも呼ばれる)が導入されたのは、プログラムをブラウザ上で安全かつ高速に実行するためだが、さまざまな環境で安全かつ効率的にプログラムを実行するという目的は、Webだけでなく、一般的なアプリケーションでも長らく求められてきた。
WASI(WebAssembly System Interface)は、そうしたユースケースのために設計された。このようなアプリケーションはOSと通信する必要があるが、WebAssemblyは、システムインタフェースを持たない仮想マシン(VM)で実行され、WASIはこのシステムインタフェースを規格化する。
RubyのWebAssembly/WASIサポートは、こうしたプロジェクトを活用することを狙っている。これにより、Ruby開発者がそうした有望なプラットフォームで動くアプリケーションを作成できるようになった。
CRubyをWebAssembly環境で利用できるので、例えば、オリジナルのCRubyをWebブラウザで試すことが可能だ。
なお、現在のWASIとWebAssemblyは、Fiber、例外、GCを実装するための機能に一部足りないものがある。CRubyはこのギャップを埋めるために、ユーザーランドで実行を制御できるAsyncifyというバイナリ変換技術を使っている。
また、Ruby開発チームは、WASIの言語・ホスト非依存の仮想ファイルシステム(VFS)層を提供するwasi-vfsを開発した。これにより、Rubyアプリケーションを単一の.wasmファイルに容易にパッケージ化できるようになった。
YJITが実用段階に
「Ruby 3.1」で実験的機能として導入されたJITコンパイラである「YJIT」(Yet Another Ruby JIT)が、1年以上にわたって本番環境でテストされ、安定稼働の実績を積み重ね、実用段階に入った。
YJITは、x86-64とarm64/aarch64のCPUアーキテクチャと、Linux、macOS、BSD、その他のUNIXプラットフォームをサポートしている。
Ruby 3.2のYJITは、Ruby 3.1よりも高速になっており、メモリのオーバーヘッドも3分の1に軽減されている。
ReDoS攻撃に対する正規表現クラスの改善
Ruby 3.2では、ReDoS攻撃(「正規表現DoS攻撃」とも呼ばれる)を大幅に軽減する2つの改善が導入された。
マッチングアルゴリズムの改善
正規表現クラス(Regexp)のマッチングアルゴリズムが、メモ化の最適化によって大幅に改善された。例えば、次のマッチングは、Ruby 3.1では10秒かかるが、Ruby 3.2では0.003秒で終了する。
/^a*b?a*$/ =~ "a" * 50000 + "x"
タイムアウトの導入
この最適化は、ある種の正規表現には適用できない。例えば、後方参照や先読み、後読みのような発展的機能や、非常に大きい固定回数繰り返しを使っている場合には適用されない。この場合の対策として、正規表現マッチングのタイムアウト機能が導入された。
他の主要な機能強化
Ruby 3.2では以上の他、Rubyコードの実行時にエラーが起きた場所を容易に発見できる「syntax_suggest」の機能が統合された。また、TypeErrorとArgumentErrorの引数を下線表示するようになった。さらに、さまざまな言語機能が改善され、パフォーマンスも強化されている。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
「Ruby 2」の3倍の高速化を目指した「Ruby 3.0.0」が公開
オープンソースプログラミング言語「Ruby」の最新メジャーリリース「Ruby 3.0.0」が公開された。新版の主な改善点はパフォーマンス改善、並行処理、静的解析の3点。フロントエンドを高速化する第4のWeb言語――「WebAssembly」とは?
第1回では、第4のWeb言語とされ、W3Cで標準化されているWebAssemblyの概要を紹介します。WebAssemblyの仕組みと用途、Webブラウザをはじめとしたランタイム、非ブラウザAPIやプログラミング言語のサポートなどを紹介します。人気プログラミング言語の変遷、1965〜2019年(Python視点)
息抜きできる小ネタとして「Most Popular Programming Languages 1965 - 2019」というYouTube動画を紹介。1965年〜2019年までの人気プログラミング言語ランキングの変遷を、約5年ごとで、さかのぼりながら見ていく。