Ruby 2.3.0 リファレンスマニュアル
> NEWS for Ruby 2.1.0
NEWS for Ruby 2.1.0
このドキュメントは前回リリース以降のバグ修正を除くユーザーに影響のある機能の変更のリストです。
それぞれのエントリーは参照情報があるため短いです。
十分な情報と共に書かれた全ての変更のリストは ChangeLog ファイルか bugs.ruby-lang.org の issue を参照してください。
2.0.0 以降の変更
言語仕様の変更
- キーワード引数のデフォルト値が省略可能になりました。これらの「必須キーワード引数」は呼び出し時に明示的に与えなければなりません。
- 整数や小数のリテラルの末尾に'r','i','ri'という接尾辞を付けられるようになりました
# r を付けると有理数になる
42r # => Rational(42, 1)
3.14 # => 3.14.rationalize
6.022e+23r # 指数形式と一緒には使えない
# i を付けると虚数単位 i を掛けた数になる
42i # => Complex(0, 42)
3.14i # => Complex(0, 3.14)
# ri を付けると複素数の虚部が有理数になる
42ri # => Complex(0, 42r)
3.14ri # => Complex(0, 3.14r)
- def によるメソッド定義式は nil の代わりにメソッド名をシンボルで返します
組み込みクラスの更新
- GC
- 改良: RGenGC として知られている世代別GCが導入しました
- 追加した環境変数
- RUBY_GC_HEAP_INIT_SLOTS
- RUBY_GC_HEAP_FREE_SLOTS
- RUBY_GC_HEAP_GROWTH_FACTOR
- RUBY_GC_HEAP_GROWTH_MAX_SLOTS
- RUBY_GC_MALLOC_LIMIT_MAX
- RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR
- RUBY_GC_OLDMALLOC_LIMIT
- RUBY_GC_OLDMALLOC_LIMIT_MAX
- RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR
- 廃止した環境変数
- RUBY_FREE_MIN (RUBY_GC_HEAP_FREE_SLOTS を代わりに使います)
- RUBY_HEAP_MIN_SLOTS (RUBY_GC_HEAP_INIT_SLOTS を代わりに使います)
- Integer
- 追加: Fixnum#bit_length
- 追加: Bignum#bit_length
- Bignum の性能向上
- GMP をいくつかの操作で使えるときは使います。
乗算、除算、基数変換、GCD
- IO
- 拡張: IO#seek SEEK_DATA と SEEK_HOLE を whence としてサポートしました??
- 拡張: IO#seek 第2引数としてシンボルを受け付けるようになりました (:CUR, :END, :SET, :DATA, :HOLE)
- 拡張: IO#read_nonblock シンボルを返すためにキーワード引数 `exception: false` を受け付けるようになりました
- 拡張: IO#write_nonblock シンボルを返すためにキーワード引数 `exception: false` を受け付けるようになりました
- Numeric
- 拡張: Numeric#step limit が省略可能になり無限数列を作れるようになりました。
キーワード引数の to と by を使いやすさのために導入しました。
by に 0 を指定すると無限に同じ数値を生成することができます。
- Symbol
- 全てのシンボルは freeze されるようになりました
- pack/unpack (Array/String)
- プラットフォームが対応していれば Q! と q! は long long 型を表します
- toplevel
- main.using はもはや実験的な機能ではありません。
The method activates refinements in the ancestors of the argument module to
support refinement inheritance by Module#include
組み込みクラスの互換性 (機能追加とバグ修正を除く)
- Hash
- 非互換: Hash#reject は将来のバージョンでは単なるハッシュオブジェクトを返すようにする予定です。
サブクラス、インスタンス変数、デフォルト値、汚染フラグはコピーされなくなります。
そのようなハッシュに対してこのメソッドを呼び出すと警告するようになりました。
- IO
- 非互換: IO.open は外部エンコーディングが ASCII-8BIT のとき内部エンコーディングを無視します。
class Foo
eval "private"
def foo
end
end
- Module#ancestors
- 特異クラスの祖先はそれ自身を含みます。
The ancestors of a singleton class now include singleton classes,
in particular itself.
- Proc
- Returning from lambda proc now always exits from the Proc, not from the
method where the lambda is created. Returning from non-lambda proc exits
from the method, same as the former behavior.
- String
- 以下のコードでレシーバーのエンコーディングと変換後のエンコーディングが同一でも
不正なバイト列を置き換えるようになりました。
include_invalid_byte_string.encode("UTF-8", invalid: :replace)
標準添付ライブラリの更新 (優れたもののみ)
- open-uri
- 複数フィールドに同じ名前を使うことをサポートしました (Set-Cookieのように)
- rexml
- REXML::Parsers::SAX2Parser
- entitydecl イベントの引数が間違っている問題を修正しました。
ドキュメントにはエンティティ定義の配列を渡すと書いてあるのに、
実装は2つ以上の引数を渡すようになっていた。これは実装のバグだったが、
修正したことで後方互換性が壊れました。
- REXML::Parsers::StreamParser
- entityイベントをサポート
- REXML::Text
- rubygems
- 2.2.0 に更新。 Notable new features include:
- timeout
- 明示的に例外クラスを指定しない限り、ブロックを抜けるための例外はブロック内部で rescue されなくなりました。
- webrick
- レスポンスボディは readpartial や read をサポートする StringIO か他の IO のようなオブジェクトになりました。
- xmlrpc
- XMLRPC::Client
- 追加: XMLRPC::Client#http クライアントのために Net::HTTP のインスタンスを返します。
通常、それは必要ありません。HTTP クライアントのオプションを少し変更したいときに便利です。
HTTPクライアントの主要なオプションを変更するときは XMLRPC::Client のメソッドを使うべきです。
標準添付ライブラリの互換性 (機能追加とバグ修正を除く)
- uri
- 非互換: URI.decode_www_form は現在の WHATWG による URL 標準に従います。
文字列エンコーディングを指定するために、エンコーディング引数を取ります。
いい加減なパーセントエンコードされた文字列を受け入れますが、セパレータにセミコロンは拒否します。
- 非互換: URI.decode_www_form は現在の WHATWG による URL 標準に従います。
パーセントエンコードする前に、エンコーディング引数を取ります。
デフォルトでは、パーセントエンコードする前にUTF-16文字列をUTF-8に変換しません。
組込みのグローバル変数の互換性に影響のある変更
C API の更新
- 非推奨: rb_gc_set_params() Ruby内部でのみ使います。
- 追加: rb_gc_count() GCが発生した回数を返します。
- 追加: rb_gc_stat() GC.stat が返す値にオーバーヘッドなしにアクセスできます。
- 追加: rb_postponed_job_register() VMが一貫性のある状態になったときに呼ぶコールバック関数を引数に取ります。
例えば、Cのシグナルハンドラから実行するために使います。
- 追加: rb_profile_frames() コールスタックのプロファイルのために現在のRubyのスタックに
低コストでアクセスする機能を提供します。
- rb_tracepoint_new() C言語からアクセス可能な新しい内部的なイベントをサポートしました:
- RUBY_INTERNAL_EVENT_NEWOBJ
- RUBY_INTERNAL_EVENT_FREEOBJ
- RUBY_INTERNAL_EVENT_GC_START
- RUBY_INTERNAL_EVENT_GC_END_MARK
- RUBY_INTERNAL_EVENT_GC_END_SWEEP
- 内部的なイベントを通常のイベントと同時に使うことはできません。
(例: RUBY_EVENT_CALL と RUBY_EVENT_RETURN)