Ruby 2.7.0 リファレンスマニュアル
> NEWS for Ruby 2.5.0
NEWS for Ruby 2.5.0
このドキュメントは前回リリース以降のバグ修正を除くユーザーに影響のある機能の変更のリストです。
それぞれのエントリーは参照情報があるため短いです。十分な情報と共に書かれた全ての変更のリストは ChangeLog ファイルか bugs.ruby-lang.org の issue を参照してください。
2.4.0 以降の変更
言語仕様の変更
組み込みクラスの更新
- File
- File.open :newline オプションを指定するとテキストモードになります [bug#13350]
- File#path はFile::Constants::TMPFILE付きで開いたファイルに対して IOError を発生させます
[feature#13568]
- File.stat, File.exist? など rb_stat() を使用しているメソッドではGVLを解放するようになりました
[bug#13941]
- File.rename GVL を解放するようになりました [feature#13951]
- File::Stat#atime, File::Stat#mtime, File::Stat#ctime
Windows 8 以降でタイムスタンプの分数表現をサポートしました [feature#13726]
- File::Stat#ino, File.identical?
Windows 8.1 以降で、ReFSの128bitのinoをサポートしました [feature#13731]
- File.readable?, File.readable_real?, File.writable?, File.writable_real?,
File.executable?, File.executable_real?, File.mkfifo, File.readlink,
File.truncate, File#truncate, File.chmod, File.lchmod, File.chown,
File.lchown, File.unlink, File.utime, File.lstat はGVLを解放するようになりました
- File.lutime を追加 [feature#4052]
- IOError
- IO#close 以前は"stream closed"というメッセージの例外が発生していましたが、"stream closed in another thread"というメッセージに改良しました。
このメッセージはユーザーにとってわかりやすいでしょう。 [bug#13405]
- Range
- Range.new no longer hides exceptions when comparing begin and
end with #<=> and raise a "bad value for range" ArgumentError
but instead lets the exception from the #<=> call go through.
[feature#7688]
- Regexp
- Onigmo 6.1.3-669ac9997619954c298da971fcfacccf36909d05 に更新
標準添付ライブラリの更新
- coverage
- ブランチカバレッジとメソッドカバレッジの計測をサポートしました [feature#13901]
この新機能と一緒にテストスイートを実行すると、テストによって実行された条件分岐やメソッドについて知ることができます。
テストスイートのカバレッジをより厳密に評価することができます。
Coverage.start に与えるオプションによって計測する対象を指定することができます。
Coverage.start(lines: true, branches: true, methods: true)
Coverage.result
#=> { "/path/to/file.rb"=>
# { :lines => [1, 2, 0, nil, ...],
# :branches =>
# { [:if, 0, 2, 1, 6, 4] =>
# { [:then, 1, 3, 2, 3, 8] => 0,
# [:else, 2, 5, 2, 5, 8] => 2
# }
# },
# :methods => {
# [Object, :foo, 1, 0, 7, 3] => 2
# }
# }
# }
- ラインカバレッジについての変更はありません。ラインカバレッジの結果はただの数値の配列です。
数値の入っている要素は実行された行を表し、その数値は実行回数を意味します。
nilの入った要素はカバレッジに関係のない行を意味します。
- ブランチカバレッジの結果はこのようになります:
{ (jump base) => { (jump target) => (counter) } }
- jump base と jump target にはフォーマットがあります:
[type, unique-id, start lineno, start column, end lineno, end column]
- 例えば [:if, 0, 2, 1, 6, 4] は、if式が2行目の1桁目から6行目の4桁目まで、と読みます。
[:then, 1, 3, 2, 3, 8] は、then節が3行目の2桁目から3行目の8桁目まで、と読みます。
なお、行番号は1から始まり、桁番号は0から始まります。
よって、上記の例ではifから最初のthen節は実行されておらず、else節は2回実行されています。
- メソッドカバレッジの場合:
{ (method key) => (counter) }
[class, method-name, start lineno, start column, end lineno, end column]
- 例えば [Object, :foo, 1, 0, 7, 3] は Object#foo は1行目の0桁目から7行目の3桁目までで定義されている、と読みます。
上記の例では Object#foo は2回実行されています。
- Note: 互換性のため、Coverage.start にオプションを与えない場合は、ラインカバレッジのみを計測します。
また Coverage.result も旧フォーマットを返します。
Coverage.result
#=> { "/path/to/file.rb"=> [1, 2, 0, nil, ...] }
- open-uri
- URI.open を open-uri の Kernel.open の別名として追加しました。
将来 open-uri の Kernel.open は非推奨になります。
- openssl
- Ruby/OpenSSLのバージョンを2.0から2.1に更新しました。変更内容はext/openssl/History.mdの"Version 2.1.0"セクションにあります。
- rdoc
- RDoc 6.0.1 に更新
- Replace IRB based lexer with Ripper.
- Support many new syntaxes of Ruby from the past few years.
- Use "frozen_string_literal: true".
This reduces document generation time by 5%.
- Support did_you_mean.
- uri
- Relative path operations no longer collapse consecutive slashes to a single slash. [bug#8352]
互換性 (機能追加とバグ修正以外)
標準添付ライブラリの互換性(機能追加とバグ修正を除く)
- Gemification
- 以下の標準添付ライブラリをdefault gemsに変更しました
- cmath
- csv
- date
- dbm
- etc
- fcntl
- fiddle
- fileutils
- gdbm
- ipaddr
- scanf
- sdbm
- stringio
- strscan
- webrick
- zlib
- Logger
- Logger.new("| command") は意図せず、コマンドを実行していましたが、禁止されました。
Logger#initialize の引数は仕様としてファイル名としてのみ扱うようになりました。
[bug#14212]
- Rubygems
- "ubygems.rb" というファイルを標準添付ライブラリから削除しました。Ruby 1.9 から不要でした。
C APIの更新
Supported platform の変更
実装の改善
- lazy Proc allocation というテクニックでブロックをメソッドの引数として渡したときの性能が向上しました
[feature#14045]
- ERB がテンプレートから生成するコードはRuby 2.4 よりも2倍速くなりました
その他の変更
- $stderrが変更されておらず出力先がttyの場合、バックトレースとエラーの表示される順序を逆順にしました。
[feature#14140] [実験的]
- $stderrが変更されておらず出力先がttyの場合、エラーメッセージを太字と下線で装飾するようにしました。
[feature#14140] [実験的]
- configure オプション --with-ext はその引数を強制できるようになりました。
例えば ./configure --with-ext=openssl,+ を実行すると、openssl は必ずビルドされた状態になることが保証されます。
その他の拡張ライブラリは、デフォルトの挙動となります。もし、opensslのビルドに失敗した場合は、全体のビルドが失敗します。
もし ",+" を末尾に付けない場合は、openssl 以外はビルドされません。[feature#13302]