ruby-trunk-changes r67203 - r67215

今日は Enumerator::Yielder をブロック引数として渡せるように to_proc メソッドを追加する変更や int_pow() が無限ループに陥る場合がある不具合修正、標準添付ライブラリ profiler の削除などがありました。

nobu: r67203 2019-03-11 10:37:16 +0900

int_pow() の y に 1 を渡すと無限ループに陥る不具合を修正しています。単に ruby で 1**1 としても大丈夫ですが Enumerable#permutation などで発生する可能性があったようです。 [ruby-core:91734] [Bug #15651]

svn: r67204 2019-03-11 10:37:21 +0900

version.h の日付更新。

nobu: r67205 2019-03-11 12:53:31 +0900

rubygems のテストでテストメソッド名が重複していて上書きしていたところがあったので、メソッド名を改名して衝突を回避しています。

nobu: r67206 2019-03-11 12:53:33 +0900

lib/rubygems/text.rb から require "rubygems" を削除。相互 load を避けるため。

knu: r67211 2019-03-11 18:49:14 +0900

Enumerator::Yielder#to_proc というメソッドを新規追加しています。 Enumerator::Yielder ってあんまり知られてないんじゃないかと思いますけど、Enumerator::Yielder.new でブロックを受け取って、yield メソッドを呼ぶたびにそれを実行するという、Enumerator.new のブロックに渡されるためのクラスですが、to_proc を実装したのはこれをそのまま & をつけてブロック引数として渡せるようにするためのようです。なるほど。

hsbt: r67212 2019-03-11 18:52:31 +0900

標準添付ライブラリ fileutils の FileUtils.mv で File.rename が Errno::EPERM を発生させた時も copy+unlink による実装を試すようにしています。通常は移動元と移動先が異なるブロックデバイスの時に Errno::EXDEV が発生して fallback しますが、ファイルシステム ext4ディレクトリ単位の暗号化?の機能で暗号化されてるところからされてないディレクトリへの移動は rename(2) でできなくて EPERM がかえってくるそうなので、それに対応しています。 [ruby-core:90536] [Feature #15415]

knu: r67213 2019-03-11 18:52:40 +0900

r67211 の Enumerator:Yielder#to_proc の追加について NEWS ファイルに追記しています。

hsbt: r67214 2019-03-11 19:09:48 +0900

webrick のテストで MJIT が有効かどうかチェックするのに RubyVM::MJIT.enabled? をチェックしてますが、webrick は default gem 化されてるので古い ruby でも動くように defined? で定数自体が定義されてるかチェックしてから参照するように修正しています。

hsbt: r67215 2019-03-11 20:37:17 +0900

標準添付ライブラリ profiler と profile を削除しています。しばらくメンテナがいないままなので。すごーく昔にちょっと使ってみたことあったなぁ。当時(たぶん 1.8かそれより前)の実装ではすごく遅くなるのであまり真面目には使わなかったと思うけど。 [ruby-core:91736] [Bug #15652]