Ruby 2.7正式版が登場、オブジェクトのパターンマッチ、REPLの改善など。次はRuby 3が年内登場予定!

2020年1月7日

毎年12月25日のクリスマスにアップデートされるオブジェクト指向スクリプト言語の「Ruby」。今回も新バージョンとなるRuby 2.7正式版が予定通り、2019年12月25日にリリースされました。

fig

Ruby 2.7の主な新機能は、case文でのオブジェクトのパターンマッチ、コマンドラインからRubyが利用できるirbにおける複数行編集の対応、コンパクションガベージコレクタ、JITコンパイラ性能の改善などです。

Ruby 2.7の主な新機能

実験的実装による新機能として追加されたオブジェクトのパターンマッチ機能は、case文で使うことができます。

一般にパターンマッチとは文字列などの値に関するパターンの一致や不一致を思い浮かべますが、Ruby 2.7で追加されたのオブジェクトの構造がパターンと一致するかどうかが調べられ、一致した場合に処理が実行される、というものです。

これまでif分などを組み合わせなければ記述できなかった処理が、case文で簡潔に書けるようになります。

require "json"

json = <<END
{
  "name": "Alice",
  "age": 30,
  "children": [{ "name": "Bob", "age": 2 }]
}
END

case JSON.parse(json, symbolize_names: true)
in {name: "Alice", children: [{name: "Bob", age: age}]}
  p age #=> 2
end

プログラミング言語の命令をコマンドラインで実行できる機能を一般にREPLと呼びます。Javaにはjshellと呼ばれるREPLツールがあり、PythonにもREPL機能があり、Rubyにもirb(Interactive Ruby)と呼ばれるREPL機能を実現するツールがあります。

Ruby 2.7では、このREPLを実現するirbで、複数行編集がサポートされました。下記は「Ruby 2.7.0のリリースを伝えるオフィシャルブログの記事」から、動画を引用します。

Rubyにはすでに効率の良いいくつかのガベージコレクタが搭載されていますが、コンパクションガベージコレクタ(Compaction GC)は、Ruby 2.7で新たに搭載されたガベージコレクション機能です。

一部のマルチスレッドなRubyプログラムを長期間動かし、マーク&スイープ型ガベージコレクションが何度も実行されると、メモリが断片化してメモリ使用量の増大や性能の劣化を招くことになります。コンパクションガベージコレクタは、ストレージに対するデフラグのようにこうした断片化したメモリを整理し、不要なページを解放できるようになります。

Ruby 2.6から実験的実装として搭載されたJITコンパイラは、Ruby 2.7でさらに性能改善が行われています。

次はRuby 3が登場!

次のクリスマス、2020年12月25日にリリースされる次期Rubyは、Ruby 3になることが、2019年11月に行われたイベント「RubyConf 2019 Nashville」で発表されています。

Ruby 3では、Ruby2の3倍の実行速度にするという「Ruby 3x3」構想の実現(すでにRuby 2.7でかなり近づいているとのこと)、並行処理への対応、静的型解析への対応などが予定されています。リリースを楽しみに待つことにしましょう。

このエントリーをはてなブックマークに追加
follow us in feedly




カテゴリ

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed


最新記事10本