Posted by naruse on 25 Dec 2016

Ruby 2.4シリーズの最初の安定版である、Ruby 2.4.0がリリースされました。

Ruby 2.4.0 には以下に示すようなたくさんの新機能が含まれています:

従来Rubyのハッシュテーブルの内部実装 (st_table) ではに双方向連結リストとチェイン法を用いた実装が使われていましたが、挿入順の配列にオープンアドレス法を用いることによる高速化が行われました。 この改善に際しては多くの方による議論が行われ、とりわけ Yura Sokolov 氏によって多大な貢献がありました。

Binding#irb: Start a REPL session similar to binding.pry

pry を用いると binding.pry とアプリケーションに書くことで、その場で対話型実行環境を起動することができ、デバッグの際に便利です。 r56624 にて binding.irb と書くことで同様なことをirbを用いて行える機能が入りました。

Rubyの標準仕様である ISO/IEC 30170:2012 ではIntegerクラスの詳細について定めていませんが、これまでRubyにはFixnumとBignum、2つの整数クラスがありました。 Ruby 2.4では従来抽象クラスであったIntegerクラスにこの2つを統合しています。 FixnumクラスやBignumクラスを扱う全てのC拡張ライブラリは修正が必要になります。

詳細は Redmineチケット や RubyKaigiでの発表を参照ください。

String/Symbol#upcase/downcase/swapcase/capitalize(!) は従来ASCIIの範囲でのみ大文字小文字を変換していましたが、Ruby 2.4ではUnicodeの仕様にのっとった変換を行うようになります。

Performance improvements

Ruby 2.4 では以下のような言語レベルでの修正を伴う性能改善が行われています。

一定の条件下において、 [x, y].max や [x, y].min が一時的な配列を生成しないようになりました。

バックリファレンスの生成や $~ の変更を行わないことで、極力オブジェクト生成を減らした Regexp#match? が追加されました。

Other performance improvements

Debugging

Rubyでは、あるスレッドで発生した例外は、別のスレッドに join されない限り無視されます。 Ruby 2.4 で report_on_exception = true を行うと、あるスレッドが例外で終了した場合、標準エラー出力にその旨が出力されます。

Ruby 2.5 において report_on_exception のデフォルトの値がどうあるべきか、ある正常終了したスレッドがGCされた場合に通知する機能も必要かなどについてご意見をお持ちの方はお知らせください。

Rubyにはスレッド待ちのデッドロックを検出する機能がありましたが、その際のエラー出力はデバッグのための十分な情報を出していませんでした。Ruby 2.4ではスレッドのバックトレースや依存関係などを出力します。

Other notable changes since 2.3

Support OpenSSL 1.1.0 (drop support for 0.9.7 or prior)

ext/tk is now removed from stdlib Feature #8539

XMLRPC is now removed from stdlib Feature #12160

See NEWS and ChangeLog for details.

With those changes, 2523 files changed, 289129 insertions(+), 84670 deletions(-) since Ruby 2.3.0!

メリークリスマス。Ruby とともに良き休日をおすごしください。

Download