10月8日、Ruby開発チームはRuby 3.4.0-preview2をリリースした。
このリリースでは、いくつかの重要な機能追加や修正が行われている。
Prismパーサーへの移行
Rubyのデフォルトパーサーが従来のparse.y
からPrism
に切り替えられた。これにより、Rubyの構文解析性能が向上することが期待されている。詳細はFeature #20564で確認できる。
言語仕様の変更
いくつかの重要な言語仕様の変更が行われた。
frozen_string_literal
コメントがないファイル内の文字列リテラルがデフォルトで凍結されるようになった。これにより、変更された場合に警告が表示される。警告は-W:deprecated
オプションや、Warning[:deprecated] = true
を設定することで有効化できる。これを無効にするには、--disable-frozen-string-literal
オプションを使用すればよい。詳しくはFeature #20205を参照。- ブロックパラメータを参照するために
it
が追加された。Feature #18980 - メソッド呼び出し時に
nil
をキーワードスプラットすることがサポートされるようになった。**nil
は**{}
と同様に扱われ、キーワードを渡さず、変換メソッドも呼び出さない。Bug #20064
Coreクラスのアップデート
Exception#set_backtrace
メソッドが、Thread::Backtrace::Location
の配列を受け付けるようになった。また、Kernel#raise
、Thread#raise
、およびFiber#raise
もこの新しい形式をサポートする。Feature #13557Range#size
は、イテラブルでない範囲に対してTypeError
を発生させるようになった。Misc #18984
互換性に関する問題
エラーメッセージとバックトレースの表示形式が変更された。
- バッククオートではなくシングルクオートを開始引用符として使用するようになった。Feature #16495
- メソッド名の前にクラス名が表示されるようになった(クラスに永続的な名前がある場合に限る)。Feature #19117
C APIのアップデート
rb_newobj
とrb_newobj_of
(および対応するマクロRB_NEWOBJ
、RB_NEWOBJ_OF
)が削除された。Feature #20265- 廃止予定だった関数
rb_gc_force_recycle
も削除された。Feature #18290
実装の改善
Array#each
がRubyで再実装され、パフォーマンスが向上した。Feature #20182
その他の変更
- ブロックを使用しないメソッドに対してブロックを渡すと、
-w
オプションの有効化時に警告が表示されるようになった。Feature #15554 String.freeze
やInteger#+
など、インタプリタとJITによって特別に最適化されたコアメソッドを再定義すると、パフォーマンス警告が表示されるようになった。Feature #20429
詳細は[Ruby 3.4.0 preview2 Released]]を参照していただきたい。