2021/07/08 今週の気になった bugs.ruby のチケット
今週は Ruby 3.1.0 で default gem から bundled gem に移動するチケットなどを載せています。
[Feature #17873] Update of default gems in Ruby 3.1
- Ruby 3.1 からいくつかの default gem が bundled gem に変更されるチケット
- 現時点で(あくまでも現時点で)は以下の default gem が bundled gem に変更されるので注意する必要がある
- また以下の gem は default gem から取り除かれます
- tracer
- dbm
- gdbm
- default gem と bundled gem の違い
- default gem
- Ruby 本体にバンドルされている gem
- gem 単体で更新可能
- gem 自体を削除するのは不可能
- bundler 環境でも使用可能
- bundled gem
- Ruby 本体にバンドルされている gem
- gem 単体で更新可能
- gem 自体を削除するのは可能
- bundler 環境では使用不可能
- 使用する場合は明示的に
Gemfile
にgem "xxx"
と書いておく必要がある
- 使用する場合は明示的に
- Ruby 本体にバンドルされている gem
- bundled gem と default gem の違いの具体例 - @znz blog
- default gem
- ちなみにこの影響で capypara などが壊れたらしい
[Bug #16243 完了] case/when is slower than if on MRI
- Ruby 2.6.5 で if 文よりも case when 文の方が遅いというバグ報告
# frozen_string_literal: true require "benchmark/ips" def deep_dup_case(obj) case obj when Integer, Float, TrueClass, FalseClass, NilClass obj when String obj.dup when Array obj.map { |e| deep_dup_case(e) } when Hash duped = obj.dup duped.each_pair do |key, value| duped[key] = deep_dup_case(value) end else obj.dup end end def deep_dup_if(obj) if Integer === obj || Float === obj || TrueClass === obj || FalseClass === obj || NilClass === obj obj elsif String === obj obj.dup elsif Array === obj obj.map { |e| deep_dup_if(e) } elsif Hash === obj duped = obj.dup duped.each_pair do |key, value| duped[key] = deep_dup_if(value) end duped else obj.dup end end obj = { "class" => "FooWorker", "args" => [1, 2, 3, "foobar"], "jid" => "123987123" } Benchmark.ips do |x| x.report("deep_dup_case") do deep_dup_case(obj) end x.report("deep_dup_if") do deep_dup_if(obj) end x.compare! end
Warming up -------------------------------------- deep_dup_case 37.767k i/100ms deep_dup_if 41.802k i/100ms Calculating ------------------------------------- deep_dup_case 408.046k (± 0.9%) i/s - 2.077M in 5.090997s deep_dup_if 456.657k (± 0.9%) i/s - 2.299M in 5.035040s Comparison: deep_dup_if: 456657.4 i/s deep_dup_case: 408046.1 i/s - 1.12x slower
- 最新版では改善されているそうなのでシュッと閉じられている