Ruby 2.3.0 リリース

Ruby 2.3 シリーズの最初の安定版である、Ruby 2.3.0 のリリースをお知らせします。

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

Frozen String Literal プラグマ が導入されました。 Ruby 2.1 では既に、オブジェクトアロケーション削減のために "str".freeze が最適化されていましたが、Ruby 2.3 では 1 ファイル中の全 String リテラルを freeze する新しいマジックコメントとコマンドラインオプションが導入されました。 また、can't modify frozen String エラーのデバッグを容易にするため、当該エラーにおいてどこで対象の String オブジェクトが作成されたかを表示する --debug=frozen-string-literal コマンドラインオプションが追加されました。

safe navigation operator (lonely operator &. とも呼ばれています) が導入されました。これは nil の扱いをやりやすくするものです。既に C#, Groovy, Swift などでも同様の機能が存在します。 また、Array#dig, Hash#dig も追加されました。 safe navigation operator は、nil のみを取り扱う Active Support における try! と同様の挙動をする事について注意してください。

did_you_mean gem がバンドル されました。 この gem は NameErrorNoMethodError の発生時、デバッグを容易にするため、正しい名前と思われる候補を合わせて表示します。

RubyVM::InstructionSequence#to_binary と .load_from_binary が experimental feature として追加されました。 これらを活用することにより、ISeq (バイトコード) をプリコンパイルする仕組みを実装することができます。

また、Ruby 2.3.0 にはさまざまなパフォーマンス改善が含まれています。例えば、 method entry データ構造の再検討, 新しい table data 構造, Proc#call 最適化, オブジェクトアロケーションとメソッド呼び出しのコードにおけるマシンコードレベルでの最適化, よりスマートな instance variable データ構造, Socket#*_nonblock メソッド群における exception: false キーワード引数のサポート などが上げられます。その他の改善については NEWS ファイルの Implementation improvements セクションをごらんください。

その他、全新機能のリストや互換性については、NEWSChangeLog をごらんください。

なお、Ruby 2.2.0 から 2946 ファイルが変更され, 104057 行追加, 59478 行の削除 が行われました!

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

ダウンロード