このドキュメントは前回リリース以降のバグ修正を除くユーザーに影響のある機能の変更のリストです。
それぞれのエントリーは参照情報があるため短いです。十分な情報と共に書かれた全ての変更のリストは ChangeLog ファイルか bugs.ruby-lang.org の issue を参照してください。
1.9.3 以降の変更
言語仕様の変更
- キーワード引数を追加しました
- %i, %I をシンボルの配列作成のために追加しました。(%w, %W に似ています)
- デフォルトのソースエンコーディングを US-ASCII から UTF-8 に変更しました
- '_' で始まる使用されていない変数は警告しなくなりました
組み込みクラスの更新
- ARGF.class
- 追加: ARGF.class#codepoints, ARGF.class#each_codepoint IO にある同名のメソッドに対応します
- Array
- 追加: Array#bsearch 二分探索します
- 非互換:
- Array#shuffle! と Array#sample の random パラメータには最大値のみを指定することが可能になりました
- Array#values_at に Range オブジェクトを与えた場合、配列の範囲外のインデックスについては nil を返します
- Enumerable
- 追加: Enumerable#lazy 遅延列挙のためのメソッドです
- Enumerator
- 追加: Enumerator#size サイズを遅延評価するためのメソッドです
- 拡張: Enumerator.new サイズの遅延評価のための引数を一つ受け取るようになりました
- 新規クラス: Enumerator::Lazy 遅延列挙用のクラス
- ENV
- ENV.to_h は ENV.to_hash へのエイリアスです
- Fiber
- 非互換: Fiber#resume は Fiber#transfer を呼び出したファイバーを再開できなくなりました
- File
- 拡張: File.fnmatch? は File::FNM_EXTGLOB(File::Constants::FNM_EXTGLOB) オプションが与えられていればブレースを展開します
- GC
- 改良:
- ビットマップマーキングを導入しました。Copy-on-Write を使用してページをコピーするのでメモリ使用量が減少します
- 非再帰的なマーキングを導入しました。期待しないスタックオーバーフローを避けるためです
- 改良:
- GC::Profiler
- 追加: GC::Profiler.raw_data GCの加工していないプロファイルデータを返します
- Hash
- 追加: Hash#to_h 明示的に変換するメソッドです。Array#to_a に似ています
- 拡張: Hash#default_proc= default proc をクリアするために nil を渡せるようになりました
- IO
- 非推奨: IO#lines, #bytes, #chars, #codepoints
- Kernel
- 追加: Kernel.#Hash という変換メソッド。Kernel.#Array, Kernel.#Float に似ています
- 追加: Kernel.#__dir__ 現在のソースファイル(__FILE__)のあるディレクトリ名を正規化された絶対パ スで返します。
- 追加: Kernel.#caller_locations フレーム情報の配列を返します
- 拡張: Kernel.#warn Kernel.#puts のように複数の引数を受け付けるようになりました
- 拡張: Kernel.#caller 第2引数で取得するスタックのサイズを指定できるようになりました
- 拡張: Object#to_enum Object#enum_for サイズの遅延評価のためにブロックを受け取るようになりました
- 非互換: Kernel.#system, Kernel.#exec は非標準のファイルディスクリプタを閉じます :close_others オプションのデフォルト値を true に変更しました
- 非互換: respond_to? は protected なメソッドに対して false を返します。第2引数に true を指定すると true を返します。
- 非互換: Kernel.#__callee__ はオリジナルの振舞いに戻りました。定義したときの名前ではなく呼び出したときの名前を返します。
- 非互換: Object#inspect は #to_s を呼び出さなくなりました。再定義された #to_s を呼び出すためです。
- LoadError
- 追加: LoadError#path ロードできなかったファイルのパスを返します
- Module
- 追加: Module#prepend 指定したモジュールを self の継承チェインの先頭に 「追加する」ことで self の定数、メソッド、モジュール変数を「上書き」します。
- 追加: Module.prepended, Module.prepend_features は Module.included と Module.append_features に似ています
- 追加(実験的): Module#refine, スコープを限定してクラスやモジュールを拡張します。
- 拡張: Module#define_method は UnboundMethod を受け付けるようになりました
- 拡張: Module#const_get 修飾された定数名の文字列を受け付けるようになりました。
Object.const_get("Foo::Bar::Baz")
- Mutex
- 追加(実験的): Mutex#owned? mutex が現在のスレッドに所持されているかどうかを返します
- 非互換:
- Mutex#lock, Mutex#unlock, Mutex#try_lock, Mutex#synchronize, Mutex#sleep はトラップハンドラの中では使えなくなりました。そのようなときは ThreadError が発生します
- Mutex#sleep may spurious wakeup. Check after wakeup.
- NilClass
- 追加: NilClass#to_h 空のハッシュを返します
- ObjectSpace::WeakMap
- 弱い参照を保持するための低レベルのクラスです。
- Proc
- 非互換: Proc#== と #eql? を削除。
- Process
- 追加: Process#getsid session id を取得します(unix のみ)。
- Range
- 追加: Range#size サイズの遅延評価
- 追加: Range#bsearch 二分探索
- RubyVM (MRI specific)
- 追加: RubyVM::InstructionSequence.of to get the instruction sequence from a method or a block.
- 追加: RubyVM::InstructionSequence#path, RubyVM::InstructionSequence#absolute_path, RubyVM::InstructionSequence#label, RubyVM::InstructionSequence#base_label, RubyVM::InstructionSequence#first_lineno to retrieve information from where the instruction sequence was defined.
- スタックの使用量を指定するための環境変数を追加(起動時にチェックします):
- RUBY_THREAD_VM_STACK_SIZE: vm stack size used at thread creation. default: 128KB (32bit CPU) or 256KB (64bit CPU).
- RUBY_THREAD_MACHINE_STACK_SIZE: machine stack size used at thread creation. default: 512KB or 1024KB.
- RUBY_FIBER_VM_STACK_SIZE: vm stack size used at fiber creation. default: 64KB or 128KB.
- RUBY_FIBER_MACHINE_STACK_SIZE: machine stack size used at fiber creation. default: 256KB or 512KB.
- 追加: RubyVM::DEFAULT_PARAMS という定数を追加しました。RubyVM のデフォルトのパラメータを返します。
- Signal
- 追加: Signal.signame シグナルの名前を返します
- 非互換: Signal.trap は :SEGV, :BUS, :ILL, :FPE, :VTALRM が指定されると ArgumentError を発生させます
- String
- 追加: String#b エンコーディングを ASCII-8BIT に設定したコピーされた文字列を返します
- 返り値変更:
- String#lines Enumerator ではなく Array を返します
- String#chars Enumerator ではなく Array を返します
- String#codepoints Enumerator ではなく Array を返します
- String#bytes Enumerator ではなく Array を返します
- Struct
- 追加: Struct#to_h インスタンス変数の名前と値をハッシュのキーと値にしたハッシュを生成して返します
- Thread
- 追加: Thread#thread_variable_get スレッドローカルな変数を取得します (these are different than Fiber local variables).
- 追加: Thread#thread_variable_set スレッドローカルな変数をセットします
- 追加: Thread#thread_variables スレッドローカルな変数の名前のリストを取得します
- 追加: Thread#thread_variable? 与えられた名前がスレッドローカルな変数であるかどうか返します
- 追加: Thread.handle_interrupt as well as instance and singleton methods Thread.pending_interrupt? for asynchronous handling of exceptions
- 追加: Thread#backtrace_locations Kernel#caller_locations に似た情報を返します
- 新規クラス: Thread::Backtrace::Location to hold backtrace location information. These are returned by Thread#backtrace_locations and Kernel#caller_locations
- 非互換: Thread#join, Thread#value は対象のスレッドがメインスレッドか現在のスレッドである場合、 ThreadError を発生させます
- TracePoint
- new class. This class is replacement of set_trace_func. Easy to use and efficient implementation.
- toplevel
- added method:
- added main.define_method which defines a global function.
- added main.using, which imports refinements into the current file or eval string. [experimental]
- added method:
組み込みクラスの互換性 (機能追加とバグ修正を除く)
- Array#values_at 上を参照
- String#lines, String#chars, String#codepoints, String#bytes これらのメソッドはもはや Enumerator を返しませんが、ブロックを与えた場合の動作は後方互換性のためまだサポートしています。
str.lines.with_index(1) {|line, lineno| ... } # str.lines が配列を返すのでもう動かない str.each_line.with_index(1) {|line, lineno| ... } # このように each_line に置き換える
- IO#lines, IO#chars, IO#codepoints, IO#bytes, ARGF#lines, ARGF#chars,
ARGF#bytes, StringIO#lines, StringIO#chars, StringIO#codepoints, StringIO#bytes,
Zlib::GzipReader#lines, Zlib::GzipReader#bytes
- これらのメソッドは非推奨になりました。each_line, each_byte, each_char, each_codepoint を使ってください。
- Proc#==, m:Proc#eql?
- 削除されました。2つの Proc オブジェクトは同じオブジェクトである場合のみ等しい。
- Signal.trap
- 上を参照
- Onigmo をマージしました。 https://github.com/k-takata/Onigmo
- The :close_others option is true by default for system() and exec(). Also, the close-on-exec flag is set by default for all new file descriptors. This means file descriptors doesn't inherit to spawned process unless explicitly requested such as system(..., fd=>fd).
- Kernel#respond_to? against a protected method now returns false unless the second argument is true.
- Object#respond_to_missing?, Object#initialize_clone, Object#initialize_dup
- private になりました
- Thread#join, Thread#value
- 上を参照
標準添付ライブラリの更新 (優れたもののみ)
- cgi
- HTML5 用のタグメーカーを追加しました
- CGI#header は CGI#http_header に名前を変更しました。CGI#header は別名として残っています。
- HTML5 用のタグメーカーを呼び出すと CGI#header を header 要素を生成するために上書きします。
- csv
- CSV.dump と CSV.load を削除しました。ユーザーを危険なシリアライゼーションに関する脆弱性から保護するためです。
- iconv
- 削除しました。String#encode を使ってください。
- io/console
- 追加: IO#cooked which sets the terminal to cooked mode within the given block.
- 追加: IO#cooked! which sets the terminal to cooked.
- 拡張: IO#raw, IO#raw!, IO#getch キーワード引数 :min, :time を受け付けます。
- io/wait
- 追加: IO#wait_writable
- 追加: IO#wait_readable は IO#wait の別名です。
- json
- 1.7.7 に更新
- net/http
- 新機能
- Proxies are now automatically detected from the http_proxy environment variable. See Net::HTTP.new for details.
- gzip and deflate compression are now requested for all requests by default. See Net::HTTP for details.
- SSL sessions are now reused across connections for a single instance. This speeds up connection by using a previously negotiated session.
- Requests may be created from a URI which sets the request_uri and host header of the request (but does not change the host connected to).
- Responses contain the URI requested which allows easier implementation of redirect following.
- 追加: Net::HTTP#local_host
- 追加: Net::HTTP#local_host=
- 追加: Net::HTTP#local_port
- 追加: Net::HTTP#local_port=
- 拡張: Net::HTTP#connect uses local_host and local_port if specified.
- 新機能
- openssl
- Consistently raise an error when trying to encode nil values. All instances of OpenSSL::ASN1::Primitive now raise TypeError when calling to_der on an instance whose value is nil. All instances of OpenSSL::ASN1::Constructive raise NoMethodError in the same case. Constructing such values is still permitted.
- TLS 1.1 & 1.2 support by setting OpenSSL::SSL::SSLContext#ssl_version to :TLSv1_2, :TLSv1_2_server, :TLSv1_2_client or :TLSv1_1, :TLSv1_1_server :TLSv1_1_client. The version being effectively used can be queried with OpenSSL::SSL#ssl_version. Furthermore, it is also possible to blacklist the new TLS versions with OpenSSL::SSL:OP_NO_TLSv1_1 and OpenSSL::SSL::OP_NO_TLSv1_2.
- Added OpenSSL::SSL::SSLContext#renegotiation_cb. A user-defined callback may be set which gets called whenever a new handshake is negotiated. This also allows to programmatically decline (client) renegotiation attempts.
- Support for "0/n" splitting of records as BEAST mitigation via OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS.
- The default options for OpenSSL::SSL::SSLContext have changed to OpenSSL::SSL::OP_ALL & ~OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS instead of OpenSSL::SSL::OP_ALL only. This enables the countermeasure for the BEAST attack by default.
- OpenSSL requires passwords for decrypting PEM-encoded files to be at least four characters long. This led to awkward situations where an export with a password with fewer than four characters was possible, but accessing the file afterwards failed. OpenSSL::PKey::RSA, OpenSSL::PKey::DSA and OpenSSL::PKey::EC therefore now enforce the same check when exporting a private key to PEM with a password - it has to be at least four characters long.
- SSL/TLS support for the Next Protocol Negotiation extension. Supported with OpenSSL 1.0.1 and higher.
- OpenSSL::OPENSSL_FIPS allows client applications to detect whether OpenSSL is FIPS-enabled. OpenSSL.fips_mode= allows turning on and off FIPS mode manually in order to adapt to situations where FIPS mode would be an explicit requirement.
- Authenticated Encryption with Associated Data (AEAD) is supported via Cipher#auth_data= and Cipher#auth_tag/Cipher#auth_tag=. Currently (OpenSSL 1.0.1c), only GCM mode is supported.
- ostruct
- 追加: OpenStruct#[], OpenStruct#[]=
- 追加: OpenStruct#each_pair
- 追加: OpenStruct#eql?
- 追加: OpenStruct#hash
- 追加: OpenStruct#to_h
- 拡張: OpenStruct.new OpenStruct/Struct のインスタンスを受け付けるようになりました
- pathname
- 拡張: Pathname#find ブロックを与えない場合 Enumerator を返すようになりました
- rake
- 0.9.5 に更新
- This version is backwards-compatible with previous rake versions and contains many bug fixes.
- See http://rake.rubyforge.org/doc/release_notes/rake-0_9_5_rdoc.html
- 0.9.5 に更新
- rdoc
- 4.0 に更新
- 後方互換性に関する大きな変更がありました。注目すべき最大の変更は ri データベースのフォーマットを変更したことです。 (riのデータを再生成する必要があります) その他のAPIの変更は内部的なものなので、ほとんどのユーザーに影響はないでしょう。
- 注目すべき変更
- riがページをサポートしました。これはGemでも動作します。
- 4.0 に更新
# ruby に含まれるページリストを表示する $ ri ruby: # リテラルに関する文法を表示する $ ri ruby:syntax/literals # RSpec の README を表示する $ ri rspec:README
- Markdown をサポートしました。RDoc::Markdown を見てください。
- https://github.com/ruby/rdoc/blob/master/History.rdoc
- rexml
- REXML::Document#write はハッシュ引数をサポートしました
- REXML::Document#write は :encoding オプションをサポートしました。 XMLドキュメントのエンコーディングを変更します。:encodingオプションなしの場合、XMLの宣言をXMLドキュメントのエンコーディングとして使います。
- rubygems
- 2.0.0に更新。
- RubyGems 2.0.0 は以下の改良を含みます。
- Ruby2.0.0以上で導入した default gems のサポートを改良しました
- 任意のメタデータを持てるようになりました Gem::Specification#metadata
- `gem search` はデフォルトでリモートの gem を探すようになりました
- --document オプションを追加して --rdoc, --ri オプションを置き換えました。 --no-document オプションを使ってドキュメントの生成を無効化することができます。 --document=rdoc を使うと rdoc だけを生成できます。
- デフォルトでは ri フォーマットだけを生成します
- `gem server` はHTMLを生成するために RDoc::Servlet を使います。
- https://github.com/rubygems/rubygems/blob/master/History.txt
- 2.0.0に更新。
- shellwords
- Shellwords#shellescape 与えられたオブジェクトを to_s で文字列化するようになりました
- Shellwords#shelljoin 与えられた配列に含まれる文字列でないオブジェクトは to_s で文字列化するようになりました
- syslog
- 追加: Syslog::Logger Syslog上に Logger API を提供します
- 追加: Syslog::Priority, Syslog::Level, Syslog::Option, Syslog::Macros システムで定義されている定数を簡単に検知するために導入しました。
- tmpdir
- 非互換: Dir.mktmpdir は FileUtils.#remove_entry_secure ではなく FileUtils.#remove_entry を使うようになりました。 これはアプリケーションが作成された一時ディレクトリを全ユーザから書き込み可能に変更すべきではないことを意味します。
- yaml
- Syck は削除しました。インストールされている libyaml に依存するようになりました。
- libyaml がインストールされていない場合のために libyaml を同梱するようになりました。
- zlib
- Zlib::Inflate, Zlib::Deflate にストリーミングサポートを追加しました。 大量のメモリを消費せずに、ストリームを処理できるようになりました。
- 展開用に新しい戦略を追加しました。Zlib::RLE, Zlib::FIXED
- Zlib のストリームは GVL なしで処理するようになりました。gzip, zlib, deflate のストリームを並列に処理できるようになりました。
- 非推奨: Zlib::GzipReader#lines, Zlib::GzipReader#bytes
標準添付ライブラリの互換性 (機能追加とバグ修正を除く)
- OpenStruct の新しいメソッドはカスタム属性の名前を衝突するかもしれません。 "each_pair", "eql?", "hash" or "to_h".
- Dir.mktmpdir は lib/tmpdir.rb にあります。上を参照してください。
C API の更新
- 追加: NUM2SHORT(), NUM2USHORT() これは NUM2INT に似ています。
- 追加: rb_newobj_of(), NEWOBJ_OF() 与えられたクラスの新しいオブジェクトを作ります