Ruby 2.6が公開、JITコンパイラを実装処理性能が2倍弱向上

「Ruby 2.6.0」が公開された。JIT(Just-In-Time)コンパイラが導入されたことに加え、処理性能を向上させる改善が複数施されている。終点なしRangeなどの新機能も実装された。

» 2018年12月27日 08時00分 公開
[@IT]

 Rubyコミュニティーは2018年12月25日、プログラミング言語「Ruby」の最新安定版である「Ruby 2.6.0」をWebサイトで公開した。Ruby 2.6では、JIT(Just-In-Time)コンパイラや抽象構文木を扱うモジュールが導入された他、処理性能改善や「Unicode 11.0」対応、終点なしRangeなどの改善や新機能が施された。

 Ruby 2.6に導入されたJITコンパイラは、「MJIT」と呼ばれるアーキテクチャを採用したもので、C言語のソースコードを生成し、それをCコンパイラでコンパイルした上で実行するというもの。

 Rubyコミュニティーによると、「Optcarrot」というCPU負荷が中心のベンチマークテストを実行した結果、処理性能がRuby 2.5の約1.7倍に向上したという。

 ただし、Ruby on Railsアプリケーションなど、メモリ負荷の高い環境における性能向上は今回のRuby 2.6では実現できておらず、今後の課題だとした。

MJITのアーキテクチャ(出典:Rubyコミュニティー

 JITコンパイラを利用するには、Ruby本体がGCCやClang、Visual C++でコンパイルされたものであって、Rubyプログラムの実行時にそれらのコンパイラが利用可能な状態でなければならない。なお、JITコンパイルを有効にするには「--jit」オプションを指定する。

ブロック渡しで2.6倍の高速化を確認

 JITコンパイラ以外にも、Ruby 2.6では処理性能を向上させる改善が施された。例えば、Ruby 2.5で改善したブロック渡しの処理に加え、Ruby 2.6では渡されたブロックの呼び出しも改善した。Rubyコミュニティーによると、2.6倍の高速化を確認したとしている。

 ArrayやObject、Struct、8要素以下のHashといったクラスが利用する短寿命メモリを管理するtheapも改善した。rdocベンチマークでは6〜7%の高速化が確認されており、Hashオブジェクトの生成は2倍程度高速化したという。

 一方、抽象構文木を扱うモジュールには、文字列をパースしてAST(抽象構文木)のNodeを返すparseメソッドや、ファイルをパースするparse_fileメソッドが実装されている。その他、ASCII以外の大文字でも定数を定義できるようにしたり、終端なしのRangeを記述できるようにしたりした。終端なしRangeは、例えばインデックスが1から始まる無限ループを実装するときに使える。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。