Ruby 2.7正式版が登場、オブジェクトのパターンマッチ、REPLの改善など。次はRuby 3が年内登場予定!
毎年12月25日のクリスマスにアップデートされるオブジェクト指向スクリプト言語の「Ruby」。今回も新バージョンとなるRuby 2.7正式版が予定通り、2019年12月25日にリリースされました。
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でかなり近づいているとのこと)、並行処理への対応、静的型解析への対応などが予定されています。リリースを楽しみに待つことにしましょう。
あわせて読みたい
Azure東日本リージョンでSAP Cloud Platformサービスが稼働開始。オンプレミスのSAP ERPからクラウドへの移行が容易に
≪前の記事
ハードディスクが物理破壊できないクラウド/「Amazon CodeGuru」は自動コードレビュー/「CSS Writing Modes 3」W3Cの勧告に、ほか。2019年12月の人気記事