Posted by naruse on 31 May 2018

Ruby 2.6.0に向けた二回目のプレビューである、Ruby 2.6.0-preview2がリリースされました。

Ruby 2.6.0-preview2は、重要な新機能であるJITを含むため、例年よりも早期にリリースすることにしました。 その一部を以下に紹介します。

JIT

Ruby 2.6ではJIT (Just-in-time) コンパイラが導入されました。

JITコンパイラはあらゆるRubyプログラムの実行を高速化することを目的としています。 他言語の一般的なJITコンパイラと異なり、RubyのJITコンパイラはC言語のソースコードをファイルとしてディスクに書き、通常のCコンパイラを用いてネイティブコードに変換することでJITコンパイルを行うという手法を用いています。(参考: MJIT organization by Vladimir Makarov)

JITコンパイルを有効にするには --jit オプションをコマンドラインまたは$RUBYOPT環境変数を指定します。 --jit-verbose=1 を指定すれば指定すれば実行中のJITコンパイルの基本的な情報を表示します。その他のオプションについては ruby --help を参照ください。

今回のリリースはこのJITコンパイル機能を皆さんの環境で動作を確認して頂くとともに、セキュリティ上の問題が無いかを早期に確認するために行っています。 現在のJITコンパイラはいくつか制限があり、まずgccまたはclangによってビルドされたRubyでかつ、そのコンパイラが実行時に利用可能である必要があります。また、現在はJITコンパイルの基盤を準備している段階で、少数の最適化のみ実装しています。そのため現在でもいくつかのマイクロベンチマークでは潜在的な速度改善が見られるものの、より大きなプログラム、特にRailsアプリケーションなどではJITコンパイラの性能を計測出来る段階ではありません。

今後はインライン化等を実装することでRubyの性能を桁違いに向上させます。また、Visual Studioを筆頭に、サポートする環境も増やしていきます。

引き続き新時代のRubyの実効性能にご期待ください。

RubyVM::AST [Experimental]

Ruby 2.6では RubyVM::AST モジュールが導入されました。

このモジュールには、文字列をパースしてAST(抽象構文木)のNodeを返す parse メソッド、ファイルをパースする parse_file メソッドが実装されています。 RubyVM::AST::Node も導入されました。このクラスのインスタンスから位置情報や子ノードを取得することができます。この機能はexperimentalであり、互換性は保証されていません。

新機能

パフォーマンスの改善

その他の注目すべき 2.5 からの変更点

その他詳細については、NEWS ファイルまたはコミットログを参照してください。

なお、こうした変更により、Ruby 2.5.0 以降では 4699 個のファイルに変更が加えられ、45744 行の追加と 30885 行の削除が行われました !

みなさんもRuby 2.6.0-preview2で楽しいプログラミングを！

Download