2021/08/05 今週の気になった bugs.ruby のチケット
今週はネストしたループで caller_locations
を呼び出すと segv するバグ報告などがありました。
[Feature #18057] Introduce Array#mean
- 配列の平均値を求める
Array#mean
メソッドを追加する提案- 元々は
Array#average
という名前だったが#mean
という名前に変わった
- 元々は
array = [1, 2, 3] array.mean # 2 # 要素の値を変更しながら適用 array = [1.5, 2.2, 3.1] array.mean(&:round) # 2.3333333333333335 array = [-3, -2, -1] array.mean { |e| e.abs } # 2
- これに関連していくつかの gem が紹介されている
- enumerable-statistics
Enumerable#mean
にも対応している
- Refinements
- enumerable-statistics
[Bug #18053] Crashes and infinite loops when generating partial backtraces in Ruby 3.0+
- 以下のコードを実行すると segv するというバグ報告
- Ruby 3.0 以降で再現する
def foo caller_locations(2, 1).inspect # this will segv # caller_locations(2, 1)[0].path # this will infinite loop end 1.times.map { 1.times.map { foo } }
- Ruby 3.0 の最適化のバグっぽい?
- 修正 PR は既に出てる
- https://github.com/ruby/ruby/pull/4671
- 修正後の方が2倍早くなっているらしい
- Ruby 3.0 に関しては最適化を元に戻すのが最善らしい
- 実装が複雑になっているので今回のバグを対応する場合は更に実装が複雑になるとのこと
- ただし、最適化を維持したい人がいれば別途対応するとのこと
- https://bugs.ruby-lang.org/issues/18053#note-1
[Bug #18052] Find のignore_error オプションが、文字化けファイル遭遇時の例外に対応していない (Windows)
Find.find(".", ignore_error: true)
のようにignore_error: true
を指定しても文字化けしたファイルがあると例外が発生するらしい
# coding:cp932 p __ENCODING__ # cp932 では表現できないファイル名を作る(例はハングル文字)。 open("testfile-\uD7A3 .jpg", "w") require "find" Find.find(".", ignore_error: true ) {|f| p f } # => #<Encoding:Windows-31J> # "." # "./testfile-???R?s?[.jpg" # Traceback (most recent call last): # 25: from d:/opt/ruby/bin/irb:23:in `<main>' # 24: from d:/opt/ruby/bin/irb:23:in `load' # 23: from d:/opt/ruby/lib/ruby/gems/2.6.0/gems/irb-1.3.2/exe/irb:11:in `<top (required)>' # 6: from (irb):10:in `<main>' # 5: from d:/opt/ruby/lib/ruby/2.6.0/find.rb:43:in `find' # 4: from d:/opt/ruby/lib/ruby/2.6.0/find.rb:43:in `each' # 3: from d:/opt/ruby/lib/ruby/2.6.0/find.rb:48:in `block in find' # 2: from d:/opt/ruby/lib/ruby/2.6.0/find.rb:48:in `catch' # 1: from d:/opt/ruby/lib/ruby/2.6.0/find.rb:51:in `block (2 levels) in find' # d:/opt/ruby/lib/ruby/2.6.0/find.rb:51:in `lstat': Invalid argument @ rb_file_s_lstat - ./testfile-?[.jpg (Errno::EINVAL)
- これは既に別のチケットで修正済み
- https://bugs.ruby-lang.org/issues/14591
- ちょうど1ヶ月前に修正されていた