NEWS for Ruby 2.0.0
このドキュメントは前回リリース以降のバグ修正を除くユーザーに影響のある機能の変更のリストです。
それぞれのエントリーは参照情報があるため短いです。十分な情報と共に書かれた全ての変更のリストは ChangeLog ファイルか bugs.ruby-lang.org の issue を参照してください。
1.9.3 以降の変更
言語仕様の変更
- キーワード引数を追加しました
- %i, %I をシンボルの配列作成のために追加しました。(%w, %W に似ています)
- デフォルトのソースエンコーディングを US-ASCII から UTF-8 に変更しました
- '_' で始まる使用されていない変数は警告しなくなりました
組み込みクラスの更新
- GC
- 改良:
- ビットマップマーキングを導入しました。Copy-on-Write を使用してページをコピーするのでメモリ使用量が減少します
- 非再帰的なマーキングを導入しました。期待しないスタックオーバーフローを避けるためです
- IO
- 非推奨: IO#lines, #bytes, #chars, #codepoints
Object.const_get("Foo::Bar::Baz")
- Proc
- 非互換: Proc#== と #eql? を削除。
- Time
- 返り値変更:
- Time#to_s now returns US-ASCII encoding instead of BINARY.
- 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]
組み込みクラスの互換性 (機能追加とバグ修正を除く)
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 オブジェクトは同じオブジェクトである場合のみ等しい。
- 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.
標準添付ライブラリの更新 (優れたもののみ)
- csv
- CSV.dump と CSV.load を削除しました。ユーザーを危険なシリアライゼーションに関する脆弱性から保護するためです。
- 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.
- rdoc
- 4.0 に更新
- 後方互換性に関する大きな変更がありました。注目すべき最大の変更は ri データベースのフォーマットを変更したことです。
(riのデータを再生成する必要があります)
その他のAPIの変更は内部的なものなので、ほとんどのユーザーに影響はないでしょう。
- 注目すべき変更
- riがページをサポートしました。これはGemでも動作します。
# ruby に含まれるページリストを表示する
$ ri ruby:
# リテラルに関する文法を表示する
$ ri ruby:syntax/literals
# RSpec の README を表示する
$ ri rspec:README
- yaml
- Syck は削除しました。インストールされている libyaml に依存するようになりました。
- libyaml がインストールされていない場合のために libyaml を同梱するようになりました。
標準添付ライブラリの互換性 (機能追加とバグ修正を除く)
- OpenStruct の新しいメソッドはカスタム属性の名前を衝突するかもしれません。
"each_pair", "eql?", "hash" or "to_h".
C API の更新
- 追加: NUM2SHORT(), NUM2USHORT()
これは NUM2INT に似ています。
- 追加: rb_newobj_of(), NEWOBJ_OF()
与えられたクラスの新しいオブジェクトを作ります