NEWS for Ruby 2.3.0
このドキュメントは前回リリース以降のバグ修正を除くユーザーに影響のある機能の変更のリストです。
それぞれのエントリーは参照情報があるため短いです。十分な情報と共に書かれた全ての変更のリストは ChangeLog ファイルか bugs.ruby-lang.org の issue を参照してください。
2.2.0 以降の変更
言語仕様の変更
- frozen-string-literal プラグマ:
- 実験的な機能として fronzen-string-literal というプラグマが導入されました。
[feature#8976]
- さらに --enable/--disable=frozen-string-literal というコマンドラインオプションも導入されました
[feature#8976]
- コマンドラインオプションに --debug または --debug=frozen-string-literal を付けて実行すると、
freeze された文字列を操作しようとして RuntimeError が発生したときにそのオブジェクトが生成された位置を表示します。
[feature#11725]
- safe navigation operator (ぼっち演算子):
- object&.foo という形式のメソッド呼び出し形式が追加されました。これは object が nil でないときにメソッド foo を呼び出します。
Active Support の try! と似ていますが、メソッド名は文法的に必須であるという点が異なります。
[feature#11537]
obj.try! {} # valid
obj&. {} # syntax error
- 引数はメソッドが呼び出された場合のみ評価されます。
obj.try!(:foo, bar()) # bar() は常に評価されます
obj&.foo(bar()) # bar() は条件付きで評価されます
obj&.attr += 1
- did_you_mean gem:
- 名前のタイポによって NameError や NoMethodError が起きたときに、自動的に他の似た名前を提案してくれます。
"Yuki".starts_with?("Y")
# => NoMethodError: undefined method `starts_with?' for "Yuki":String
# Did you mean? start_with?
組み込みクラスの更新
組み込みクラスの互換性 (機能追加とバグ修正を除く)
- pack/unpack (Array/String)
標準添付ライブラリの更新 (優れたもののみ)
標準添付ライブラリの互換性 (機能追加とバグ修正を除く)
- io/console
- io-console 0.4.5になりました。
ライセンスが BSD 2-clause "Simplified" License に変更されました。
組込みのグローバル変数の互換性に影響のある変更
C API の更新
- rb_define_class_id_under() は既にクラスが定義済みなのに、
そのスーパークラスが与えられたスーパークラスと一致しないとき
Rubyレベルの定義と同じように TypeError を発生させるようになりました。
- rb_compile_error_with_enc(), rb_compile_error(), rb_compile_bug() が非推奨になりました。
これらの関数は公開されていますが、内部利用のためなので外部のライブラリでは使用するべきではありません。
サポートしているプラットフォームの変更
- OS/2 はもうサポートされていません。
- BeOS はもうサポートされていません。
- Borland-C はもうサポートされていません。
- Haiku は安定しています。ベストエフォートです。
実装の改善
- メソッドテーブルなどに使用する新しいテーブルデータ構造を導入しました。
新しいテーブル構造は st_table よりもシンプルで速いです。
[feature#11420]
- オブジェクトアロケーションとメソッド呼び出しのために機械語レベルのチューニングをしました。
r52099, r52254
- nil, true, false の case 式のディスパッチが最適化されました。
以前は文字列、シンボル、整数、浮動小数のみが最適化されていました。
[feature#11769]
- ピュアRubyではないクラス(T_DATA, T_FILE など)上のインスタンス変数は以前よりも保存にコストがかからなくなりました。
[feature#11170]