Ruby 2.5.0リリース!NEWSを読んでみた

Ruby 2.5.0リリースおめでとうございます。 Link: Ruby 2.5.0 Released https://t.co/AqzuAcuGTm — Yukihiro Matsumoto (@yukihiro_matz) December 25, 2017 取り急ぎNEWSを斜め読みしてみました。誤りを含んでいるかもしれないので気づき次第修正します。 主要な変更点についてはCRubyコミッタの村田さんによる記事「Ruby 2.5.0 リリース直前!何が変わるのかもう一度おさらいしておこう!」で詳しく解説されています。NEWSには載っていませんが、以下の記事で解説されているNODEとGCの切り離しも大きな変更だと思います。 Link: Ruby の NODE を GC から卒業させた – クックパッド開発者ブログ: https://t.co/r9QC3CdJAK — Yukihiro Matsumoto (@yukihiro_matz) December 25, 2017 Ruby 2.5.0 リリースノート Ruby NEWS.html 2.4.0リリース以降の変更点 言語面の変更 トップレベルの定数参照を削除(Feature #11547) do/endブロック内でrescue/else/ensureを利用できるようになった(Feature #12906) 文字列の式展開にrefinementsが効くようになった(Feature #13812) コアクラスの変更点(主なもののみ) Array 新メソッド Array#append (Feature #12746) Array#prepend (Feature #12746) Data 非推奨化: C拡張の基本クラスであり、Rubyレベルに公開する必要がないため(Feature #3072) Exception 新メソッド: Exception#full_messageで例外のString表現を取り出せるようになった: キャッチされていない例外をRubyが出力するときと同じフォーマットが使われる(Feature #14141 — experimental) Dir Dir.globに新しいオプションキーワード引数:baseを追加 (Feature #13056) 次のメソッドでGVLが解放されるようになった: Dir.chdir(ブロック引数なしの場合)、Dir.open、Dir.new、Dir.mkdir、Dir.rmdir、Dir.empty? 新メソッド: Dir.children (Feature #11302) Dir.each_child(Feature #11302) Enumerable 以下のメソッドで引数に正規表現パターンを直接与えられるようになった (Feature #11286) Enumerable#any? Enumerable#all? Enumerable#none? Enumerable#one? 追記: 以下も渡せるようです。#===に渡せるものならいけそうです。 [1, 2, 3].any?(1) # => true [1, 2, 3].any?(Numeric) # => true Rubyの===演算子についてまとめてみた File File.openに:newlineオプションを与えると暗黙でテキストモードになるようになった(bug #13350) File::Constants::TMPFILEオプション付きで開いたファイルがFile#pathでIOErrorがraiseされるようになった(Feature #13568) GVL(Giant VM Lock)がFile.stat、File.exist?およびrb_stat()を使うその他のメソッドで解放されるようになった(bug #13941) File.renameでGVLが解放されるようになった(Feature #13951) 以下のメソッドで秒より細かいタイムスタンプをWindows 8以降でサポート(Feature #13726) File::Stat#atime File::Stat#mtime File::Stat#ctime File::Stat#inoとFile.indentical?でWindows 8.1以降のReFS 128bit inoをサポート(Feature #13731) 以下のメソッドでGVLが解放されるようになった 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 新メソッド: File.lutime(Feature #4052) Hash 新メソッド Hash#transform_keys(Feature #13583) Hash#transform_keys!(Feature #13583) Hash#slice(Feature #8499) IO IO#copy_streamがcopy_file_range(2)でオフロードコピーを試行するようになった(Feature #13867) IO#writeが引数を複数取れるようになった(Feature #9323) 新メソッド IO#pread(Feature #4532) IO#pwrite(Feature #4532) IOError IO#closeが例外をraiseする場合のメッセージを「stream closd」から「stream closed in another thread」に改良した(bug #13405) Integer Integer#stepでstep値が#>で0と比較できない場合に#coerceメソッドからのエラーを隠蔽しなくなった(Feature #7688) Integer#round、Integer#round、Integer#floor、Integer#ceil、Integer#truncateが常にIntegerを返すようになった(bug #13420) Integer#powが指数算出用の剰余(modulo)を引数に取れるようになった(Feature #12508)(Feature #11003) … Continue reading Ruby 2.5.0リリース!NEWSを読んでみた