Ruby 2.6が公開、JITコンパイラを実装:処理性能が2倍弱向上
「Ruby 2.6.0」が公開された。JIT(Just-In-Time)コンパイラが導入されたことに加え、処理性能を向上させる改善が複数施されている。終点なしRangeなどの新機能も実装された。
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では実現できておらず、今後の課題だとした。
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.
関連記事
- Rubyがきっかけで、「www(草生える)」を英語で解説――GitHubのエンジニアが語る、“世界とつながるスキル”
プログラミング言語「Ruby」のコミュニティーで英語と日本語を駆使して活躍するGitHubのソフトウェアエンジニア、Aaron Patterson(アーロン・パターソン)氏。Twitterで「www(草生える)」を英語で解説したことでも有名な彼は、18歳からプログラマーとして成長を重ねてきた苦労人でもある。そんな彼がRubyに出会ったきっかけと、今考える「オープンソースの世界でエンジニアに必要なスキル」とは? - Rubyプログラミングを始めるための基礎知識とインストール
オープンソースのオブジェクト指向プログラミング言語「Ruby」の文法を一から学ぶための入門連載。最新版の2.1に対応しています。初回は、Rubyの概要や特長を紹介し、環境構築や「Hello World!」までの手順、プロンプトで対話的にRubyを使える「irb」の使い方なども解説します。 - Ruby(プログラミング言語)
Rubyは、まつもとゆきひろ氏(Matz)が開発した日本発のオブジェクト指向スクリプト言語。楽しくプログラミングできることがモットーだ。