Ruby 2.6.0 リファレンスマニュアル
> NEWS for Ruby 2.6.0
NEWS for Ruby 2.6.0
このドキュメントは前回リリース以降のバグ修正を除くユーザーに影響のある機能の変更のリストです。
それぞれのエントリーは参照情報があるため短いです。十分な情報と共に書かれた全ての変更のリストは ChangeLog ファイルか bugs.ruby-lang.org の issue を参照してください。
2.5.0 以降の変更
言語仕様の変更
ary[1..] # ary[1..-1] と同じ
(1...).each {|index| block } # index が 1 から始まる無限ループ
ary.zip(1..) {|elem, index| block } # ary.each.with_index(1) { }
- キーワード引数のハッシュに Symbol 以外のキーが含まれると例外が発生するようになりました。
- "shadowing outer local variable" という警告が削除されました。 [feature#12490]
以下のようなコードを警告なしに書くことができます:
user = users.find {|user| cond(user) }
組み込みクラスの更新
標準添付ライブラリの更新
- BigDecimal
- バージョン 1.4.0 に更新されました。
このバージョンは様々な非互換な点を含んでいます。
詳細は下の互換性についてのセクションを参照してください。
- 変更されたメソッド
- 最近のバージョンでの変更点に関する注意事項
以下の情報を元に適切な bigdecimal のバージョンを選んでください。
- Coverage
- oneshot_lines モードが追加されました。 [feature#15022]
- このモードは「各行が何回実行されたか」の代わりに
「各行が少なくとも1回実行されたかどうか」をチェックします。
行ごとのフックは少なくとも1回実行されて、実行後はフックフラグが削除されます。
言い換えるとオーバーヘッドがなくなります。
- 新規オプション
- :oneshot_lines キーワード引数が Coverage.start に追加されました。
- :stop と :clear キーワード引数が Coverage.result に追加されました。
clear が真の時、カウンターが0クリアされます。
stop が真の時、カバレッジ計測を停止します。
- 新規メソッド
- ERB
- 新規オプション
- :trim_mode と :eoutvar キーワード引数が ERB.new に追加されました。
最初の引数以外のキーワード引数ではない引数はやんわりと非推奨になり、
Ruby 2.5 が EOL になった時に削除される予定です。 [feature#14256]
- erb コマンドの -S オプションは非推奨になりました。次のバージョンで削除予定です。
- RDoc
- 約2倍高速化されました。
- ファイル生成に SOURCE_DATE_EPOCH を使うようになりました。
- メソッドの行番号がずれていたのを修正しました。
- 無視されていた --width, --exclude, --line-numbers を有効にしました。
- デフォルトのマークアップ記法で ">>>" による引用をサポートしました。
- TomDoc 記法で "Raises" 行をサポートしました。
- シンタックスエラー出力を修正しました。
- 多数のパース中のバグを修正しました。
- REXML
- REXML 3.1.9 に更新されました。
https://github.com/ruby/rexml/blob/master/NEWS.md を参照してください。
- いくつかの XPath 実装を改善:
- concat() 関数: 結合前に全ての引数を文字列化
- string() 関数: コンテキストノードをサポート
- string() 関数: 処理命令 (PI) ノードをサポート
- XPath 2.0 で"*:#{ELEMENT_NAME}" 記法をサポート
- いくつかの XPath 実装を修正:
- "//#{ELEMENT_NAME}[#{POSITION}]" の問題
- string() 関数: function(document) がルート要素の外のノードを返すのを修正
- "/ #{ELEMENT_NAME} " の問題
- "/ #{ELEMENT_NAME} [ #{PREDICATE} ]" の問題
- "/ #{AXIS}::#{ELEMENT_NAME}" の問題
- "#{N}-#{M}" の問題: 1個以上の空白が "-" の前に必要でした
- "/child::node()" の問題
- "#{FUNCTION}()/#{PATH}" の問題
- "@#{ATTRIBUTE}/parent::" の問題
- "name(#{NODE_SET})" の問題
- RSS
- 新規オプション
- RSS::Parser.parse が Hash としてオプションを受け付けるようになりました。
:validate, :ignore_unknown_element, :parser_class オプションが利用可能です。
互換性 (機能追加とバグ修正を除く)
標準添付ライブラリの互換性 (機能追加とバグ修正を除く)
- 以下の標準添付ライブラリがデフォルト gem になりました。
- e2mmap
- forwardable
- irb
- logger
- matrix
- mutex_m
- ostruct
- prime
- rexml
- rss
- shell
- sync
- thwait
- tracer
実装の改善
- JIT (Just-in-time) コンパイラの初期実装が導入されました。 [feature#14235] [実験的]
- JIT を有効化する --jit コマンドラインオプションが追加されました。
「--jit-verbose=1」が調査に有用です。
他のオプションは「ruby --help」を参照してください。
- 機械語を生成するため、この JIT コンパイラはインタプリタをビルドするのに使用した C コンパイラを使用します。
現在は GCC, Clang, Microsoft Visual C++ をサポートしています。
- configure に「--disable-mjit-support」オプションが追加されました。
これは JIT デバッグのために追加されましたが、JIT 用のヘッダファイルのビルドでエラーが発生した場合、
回避策としてこのオプションを使うとビルドをスキップできます。
- JIT で作成されたプロセスとの互換性を維持するために Unix 系のプラットフォームで
rb_waitpid が再実装されました。 [bug#14867]
- Transient Heap (theap) がサポートされました。 [bug#14858] [feature#14989]
- theap は短命なメモリオブジェクトのための管理されたヒープです。
例えば小さくて短命の Hash オブジェクトは2倍高速化されました。
- rdoc ベンチマークでは 6から7%のパフォーマンスの改善を計測できました。
- コルーチンのネイティブ実装(arm32, arm64, ppc64le, win32, win64, x86, amd64) により
Fiber のパフォーマンスを大きく改善 [feature#14739]
その他の変更
- macOS で共有ライブラリの名前に Ruby のフルバージョンを含めなくなりました。
この変更によって macOS プラットフォームのユーザが teeny リリース毎に全ての
拡張ライブラリをリビルドする必要がある負担がなくなります。
- 変更前:
- libruby.2.6.0.dylib
- libruby.2.6.dylib -> libruby.2.6.0.dylib
- libruby.dylib -> libruby.2.6.0.dylib
- 変更後:
- libruby.2.6.dylib
- libruby.dylib -> libruby.2.6.dylib