NEWS for Ruby 2.2.0
このドキュメントは前回リリース以降のバグ修正を除くユーザーに影響のある機能の変更のリストです。
それぞれのエントリーは参照情報があるため短いです。十分な情報と共に書かれた全ての変更のリストは ChangeLog ファイルか bugs.ruby-lang.org の issue を参照してください。
2.1.0 以降の変更
言語仕様の変更
- デフォルト引数
- オプショナル引数にデフォルト値のセマンティクスでアクセスできないという長年のバグを修正しました。 [bug#9593]
組み込みクラスの更新
組み込みクラスの互換性 (機能追加とバグ修正を除く)
- Hash
- 非互換: 重複するキーの上書きに関するポリシーを変更しました [bug#10315]
{ **hash1, **hash2 } は重複するキーについては hash2 の値を持ちます
- IO
- 非互換: IO#flush を使ったとき、ファイルのメタデータが即時更新されることを仮定できなくなりました。
いくつかのプラットフォーム(特にWindows)で、メタデータの更新はファイルシステムの負荷が下がるまで遅延されます。
メタデータが更新されることを保証したい場合は IO#fsync を使ってください。
- Proc
- 非互換: ArgumentError は発生しなくなりました。
- ArgumentError is no longer raised when lambda Proc is passed as a
block, and the number of yielded arguments does not match the formal
arguments of the lambda, if just an array is yielded and its length
matches.
- Process
- Process.spawn のようなプロセスを起動するようなメソッドは [:out, :err]
からリダイレクトされるファイルを書き込みモードで開きます。Ruby 2.2以前は読み込みモードで開いていました。
標準添付ライブラリの更新 (優れたもののみ)
- digest
- Kernel.#Digest はスレッドセーフになりました。
マルチスレッド環境でオンデマンドローディングに関して問題がある場合は、
"digest/*" を事前にロードしておくか、Digest::* なクラスを参照するかわりにこのメソッドを呼び出します。
- 以前通知した通り Digest::HMAC を削除しました。
- DL
- DL は標準添付ライブラリから削除されました。fiddle を使ってください。
- xmlrpc
- LibXMLStreamParser という新しいパーサーを追加しました
標準添付ライブラリの互換性 (機能追加とバグ修正を除く)
- ext/date/lib/date/format.rb
- GServer
- gserver という gem に切り出しました。メンテナンスしていないコードでした。
- Logger
- Logger::Application は logger-application という gem に切り出しました。メンテナンスしていないコードでした。
- ObjectSpace (after requiring "objspace")
組込みのグローバル変数の互換性に影響のある変更
なし
C API の更新
- 非推奨のAPIを削除しました [feature#9502]
- Check_SafeStr -> SafeStringValue
- rb_check_safe_str -> SafeStringValue
- rb_quad_pack -> rb_integer_pack
- rb_quad_unpack -> rb_integer_unpack
- rb_read_check : access struct FILE internal. no replacement.
- rb_struct_iv_get : internal function. no replacement.
- struct rb_blocking_region_buffer : internal type. no replacement.
- rb_thread_blocking_region_begin -> rb_thread_call_without_gvl family
- rb_thread_blocking_region_end -> rb_thread_call_without_gvl family
- TRAP_BEG -> rb_thread_call_without_gvl family
- TRAP_END -> rb_thread_call_without_gvl family
- rb_thread_select -> rb_thread_fd_select
- struct rb_exec_arg : internal type. no replacement.
- rb_exec : internal function. no replacement.
- rb_exec_arg_addopt : internal function. no replacement.
- rb_exec_arg_fixup : internal function. no replacement.
- rb_exec_arg_init : internal function. no replacement.
- rb_exec_err : internal function. no replacement.
- rb_fork : internal function. no replacement.
- rb_fork_err : internal function. no replacement.
- rb_proc_exec_n : internal function. no replacement.
- rb_run_exec_options : internal function. no replacement.
- rb_run_exec_options_err : internal function. no replacement.
- rb_thread_blocking_region -> rb_thread_call_without_gvl family
- rb_thread_polling -> rb_thread_wait_for
- rb_big2str0 : internal function. no replacement.
- rb_big2ulong_pack -> rb_integer_pack
- rb_gc_set_params : internal function. no replacement.
- rb_io_mode_flags -> rb_io_modestr_fmode
- rb_io_modenum_flags -> rb_io_oflags_fmode
- struct RBignum は隠されました [feature#6083]
かわりに rb_integer_pack と rb_integer_unpack を使います
- struct RRational は隠されました [feature#9513]
かわりに rb_rational_num と rb_rational_den を使います
- rb_big_new と rb_big_resize は long のかわりに size_t を受け取ります
- rb_num2long は SIGNED_VALUE のかわりに long を返します
- rb_num2ulong は VALUE のかわりに unsigned long を返します
- st hash table は速度のために2のべき乗のサイズを使います。[feature#9425].
適切はハッシュ関数を使うと探索は10-25%速くなります。
しかしながら、ハッシュ分散の弱点はもはや素数サイズのテーブルにマスクされていない可能性があります。
なので、拡張ライブラリは良い分散を確保するためにハッシュ関数を微調整する必要があるかもしれません。
- rb_sym2str() を追加しました。`rb_id2str(SYM2ID(sym))` と大体同じですが、動的なシンボルを作成しません。
- rb_str_cat_cstr() を追加しました。`rb_str_cat2()` と同じです。
- 将来的に `rb_str_substr()` と `rb_str_subseq()` は文字列の真ん中を共有しますが、
文字列の末尾だけは共有しません。結局、処理された文字列はNULL終端されない可能性があるので、
NULL終端されたCの文字列を入手したいときは`StringValueCStr()`を呼ぶ必要があります。
- rb_tracepoint_new() はCからアクセス可能な新しい内部的なイベントをサポートしました。r47528
- RUBY_INTERNAL_EVENT_GC_ENTER
- RUBY_INTERNAL_EVENT_GC_EXIT
- rb_hash_delete() は与えられたブロックを評価しなくなりました。
- rb_extract_keywords() と rb_get_kwargs() はエクスポートされました。詳細は README.EXT を参照してください。
ビルドシステムの更新
- ./configure のオプション --with-jemalloc を追加しました。
jemalloc はシステムの malloc が遅かったり、フラグメンテーションする傾向にある場合に適切かもしれません。[feature#9113]
実装の変更