ruby-core

Mailing list archive

[#111565] [Ruby master Bug#19293] The new Time.new(String) API is nice... but we still need a stricter version of this — "matsuda (Akira Matsuda) via ruby-core" <ruby-core@...>

Issue #19293 has been reported by matsuda (Akira Matsuda).

8 messages 2023/01/01

[#111572] [Ruby master Bug#19297] Don't download content from internet to execute Ruby test suite — "vo.x (Vit Ondruch) via ruby-core" <ruby-core@...>

Issue #19297 has been reported by vo.x (Vit Ondruch).

12 messages 2023/01/02

[#111579] [Ruby master Feature#19300] Move public objects from Kernel to Object — "zverok (Victor Shepelev) via ruby-core" <ruby-core@...>

Issue #19300 has been reported by zverok (Victor Shepelev).

15 messages 2023/01/02

[#111581] [Ruby master Bug#19301] Fix Data class to report keyrest instead of rest parameters — "bkuhlmann (Brooke Kuhlmann) via ruby-core" <ruby-core@...>

SXNzdWUgIzE5MzAxIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGJrdWhsbWFubiAoQnJvb2tlIEt1aGxt

8 messages 2023/01/02

[#111604] [Ruby master Misc#19304] Kernel vs Object documentation — "zverok (Victor Shepelev) via ruby-core" <ruby-core@...>

Issue #19304 has been reported by zverok (Victor Shepelev).

8 messages 2023/01/03

[#111674] [Ruby master Feature#19314] String#bytesplice should support partial copy — "shugo (Shugo Maeda) via ruby-core" <ruby-core@...>

Issue #19314 has been reported by shugo (Shugo Maeda).

8 messages 2023/01/06

[#111678] [Ruby master Feature#19315] Lazy substrings in CRuby — "Eregon (Benoit Daloze) via ruby-core" <ruby-core@...>

Issue #19315 has been reported by Eregon (Benoit Daloze).

11 messages 2023/01/06

[#111693] [Ruby master Bug#19316] YJIT crash in 3.2.0 — "jdashton (J Daniel Ashton) via ruby-core" <ruby-core@...>

Issue #19316 has been reported by jdashton (J Daniel Ashton).

12 messages 2023/01/06

[#111696] [Ruby master Feature#19317] Unicode ICU Full case mapping — "noraj (Alexandre ZANNI) via ruby-core" <ruby-core@...>

SXNzdWUgIzE5MzE3IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IG5vcmFqIChBbGV4YW5kcmUgWkFOTkkp

7 messages 2023/01/06

[#111712] [Ruby master Feature#19322] Support spawning "private" child processes — "kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core" <ruby-core@...>

SXNzdWUgIzE5MzIyIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGtqdHNhbmFrdHNpZGlzIChLSiBUc2Fu

14 messages 2023/01/07

[#111739] [Ruby master Feature#19324] Enumerator.product => Enumerable#product — "zverok (Victor Shepelev) via ruby-core" <ruby-core@...>

Issue #19324 has been reported by zverok (Victor Shepelev).

18 messages 2023/01/08

[#111740] [Ruby master Bug#19325] Windows support lacking. — "dsisnero (Dominic Sisneros) via ruby-core" <ruby-core@...>

Issue #19325 has been reported by dsisnero (Dominic Sisneros).

11 messages 2023/01/08

[#111742] [Ruby master Feature#19326] Please add a better API for passing a Proc to a Ractor — sdwolfz via ruby-core <ruby-core@...>

SXNzdWUgIzE5MzI2IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IHNkd29sZnogKENvZHJ1yJsgR3XImW9p

13 messages 2023/01/08

[#111789] [Ruby master Feature#19333] Setting (Fiber Local|Thread Local|Fiber Storage) to nil should delete value in order to avoid memory leaks. — "ioquatix (Samuel Williams) via ruby-core" <ruby-core@...>

Issue #19333 has been reported by ioquatix (Samuel Williams).

10 messages 2023/01/11

[#111792] [Ruby master Bug#19334] Defining many instance variables and accessing them is slow in Ruby 3.2.0 — "mame (Yusuke Endoh) via ruby-core" <ruby-core@...>

Issue #19334 has been reported by mame (Yusuke Endoh).

12 messages 2023/01/12

[#111812] [Ruby master Bug#19340] Ruby master 'make install' not installing rbs gem — "MSP-Greg (Greg L) via ruby-core" <ruby-core@...>

Issue #19340 has been reported by MSP-Greg (Greg L).

8 messages 2023/01/14

[#111842] [Ruby master Feature#19347] Add Dir.fchdir — "jeremyevans0 (Jeremy Evans) via ruby-core" <ruby-core@...>

Issue #19347 has been reported by jeremyevans0 (Jeremy Evans).

9 messages 2023/01/16

[#111873] [Ruby master Bug#19351] Promote bundled gems at Ruby 3.3 — "hsbt (Hiroshi SHIBATA) via ruby-core" <ruby-core@...>

Issue #19351 has been reported by hsbt (Hiroshi SHIBATA).

26 messages 2023/01/18

[#111890] [Ruby master Bug#19352] Feature #17391 was not such a good idea because now Ruby 3.2 can not install Rails v5 or v6 if they use webpacker. — "Milella@... (Scott Milella) via ruby-core" <ruby-core@...>

Issue #19352 has been reported by [email protected] (Scott Milella).

16 messages 2023/01/19

[#111953] [Ruby master Bug#19362] #dup on Proc doesn't call initialize_dup — "zverok (Victor Shepelev) via ruby-core" <ruby-core@...>

Issue #19362 has been reported by zverok (Victor Shepelev).

8 messages 2023/01/21

[#111956] [Ruby master Bug#19363] Fix rb_transient_heap_mark: wrong header (T_STRUCT) segfault — "bkuhlmann (Brooke Kuhlmann) via ruby-core" <ruby-core@...>

SXNzdWUgIzE5MzYzIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGJrdWhsbWFubiAoQnJvb2tlIEt1aGxt

9 messages 2023/01/21

[#111988] [Ruby master Feature#19370] Anonymous parameters for blocks? — "zverok (Victor Shepelev) via ruby-core" <ruby-core@...>

Issue #19370 has been reported by zverok (Victor Shepelev).

10 messages 2023/01/23

[#112041] [Ruby master Feature#19377] Rename Fiber#storage to Fiber.storage — "zverok (Victor Shepelev) via ruby-core" <ruby-core@...>

Issue #19377 has been reported by zverok (Victor Shepelev).

8 messages 2023/01/25

[#112045] [Ruby master Bug#19378] Windows: Use less syscalls for faster require of big gems — "aidog (Andi Idogawa) via ruby-core" <ruby-core@...>

SXNzdWUgIzE5Mzc4IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGFpZG9nIChBbmRpIElkb2dhd2EpLg0N

7 messages 2023/01/26

[#112048] [Ruby master Bug#19379] Regex: "end pattern with unmatched parenthesis" with Ruby 3.2 and interpolation — "renchap (Renaud Chaput) via ruby-core" <ruby-core@...>

Issue #19379 has been reported by renchap (Renaud Chaput).

8 messages 2023/01/26

[#112058] [Ruby master Bug#19383] Time.now.zone encoding for German display language in Windows is incorrect — "stringsn88keys (Thomas Powell) via ruby-core" <ruby-core@...>

SXNzdWUgIzE5MzgzIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IHN0cmluZ3NuODhrZXlzIChUaG9tYXMg

11 messages 2023/01/26

[#112072] [Ruby master Bug#19386] `test_hmac.rb` of openssl is timeout on RHEL9 — "hsbt (Hiroshi SHIBATA) via ruby-core" <ruby-core@...>

Issue #19386 has been reported by hsbt (Hiroshi SHIBATA).

14 messages 2023/01/27

[#112091] [Ruby master Bug#19387] Issue with ObjectSpace.each_objects not returning IO objects after starting a ractor — "luke-gru (Luke Gruber) via ruby-core" <ruby-core@...>

Issue #19387 has been reported by luke-gru (Luke Gruber).

9 messages 2023/01/27

[#112119] [Ruby master Bug#19392] Endless method vs and/or — "zverok (Victor Shepelev) via ruby-core" <ruby-core@...>

Issue #19392 has been reported by zverok (Victor Shepelev).

20 messages 2023/01/30

[#112146] [Ruby master Bug#19394] cvars in instance of cloned class point to source class's cvars even after class_variable_set on clone — "jamescdavis (James Davis) via ruby-core" <ruby-core@...>

SXNzdWUgIzE5Mzk0IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGphbWVzY2RhdmlzIChKYW1lcyBEYXZp

8 messages 2023/01/31

[ruby-core:111920] [Ruby master Feature#18285] NoMethodError#message uses a lot of CPU/is really expensive to call

From: "mame (Yusuke Endoh) via ruby-core" <ruby-core@...>
Date: 2023-01-20 05:41:43 UTC
List: ruby-core #111920
Issue #18285 has been updated by mame (Yusuke Endoh).





Discussed at the dev meeting. @matz is positive about the change and said h=
e would give it a try. The message format is slightly changed as follows:



* If the receiver is a Class, `... for class <class name>` should be printe=
d.

* If the receiver is a Module, `... for module <module name>` should be pri=
nted.

* If the receiver is an extended object (i.e., has a singleton class), `any=
_to_s` should be used.

* Otherwise, `... for an instance of <class name>` should be printed.



Examples:



```

42.time    #=3D> undefined method `time' for an instance of Integer (NoMeth=
odError)



class Foo

  privatee #=3D> undefined local variable or method 'privatee' for class Fo=
o (NoMethodError)

end



def (o=3DObject.new).foo

end

o.bar      #=3D> undefined method `bar' for #<Object: 0xdeadbeef(any_to_s)>=
 (NoMethodError)

```



I'll update my PR later. When we use the new message format and find it inc=
onvenient, we will adjust it accordingly.



----------------------------------------

Feature #18285: NoMethodError#message uses a lot of CPU/is really expensive=
 to call

https://bugs.ruby-lang.org/issues/18285#change-101343



* Author: ivoanjo (Ivo Anjo)

* Status: Open

* Priority: Normal

----------------------------------------

Hello there! I'm working at Datadog on the ddtrace gem -- https://github.co=
m/DataDog/dd-trace-rb and we ran into this issue on one of our internal tes=
ting applications. I also blogged about this issue in <https://ivoanjo.me/b=
log/2021/11/01/nomethoderror-ruby-cost/>.



### Background



While testing an application that threw a lot of `NoMethodError`s in a Rail=
s controller (this was used for validation), we discovered that service per=
formance was very much impacted when we were logging these exceptions. Whil=
e investigating with a profiler, the performance impact was caused by calls=
 to `NoMethodError#message`, because this Rails controller had a quite comp=
lex `#inspect` method, that was getting called every time we tried to get t=
he `#message` from the exception.



### How to reproduce



```ruby

require 'bundler/inline'



gemfile do

  source 'https://rubygems.org'



  gem 'benchmark-ips'

end



puts RUBY_DESCRIPTION



class GemInformation

  # ...



  def get_no_method_error

    method_does_not_exist

  rescue =3D> e

    e

  end



  def get_runtime_error

    raise 'Another Error'

  rescue =3D> e

    e

  end



  def inspect # <-- expensive method gets called when calling NoMethodError=
#message

    Gem::Specification._all.inspect

  end

end



NO_METHOD_ERROR_INSTANCE =3D GemInformation.new.get_no_method_error

RUNTIME_ERROR_INSTANCE =3D GemInformation.new.get_runtime_error



Benchmark.ips do |x|

  x.config(:time =3D> 5, :warmup =3D> 2)



  x.report("no method error message cost") { NO_METHOD_ERROR_INSTANCE.messa=
ge }

  x.report("runtime error message cost") { RUNTIME_ERROR_INSTANCE.message }



  x.compare!

end

```



### Expectation and result



Getting the `#message` from a `NoMethodError` should be no costly than gett=
ing it from any other exception.



In reality:



```

ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]



no method error message cost

                        115.390  (=B1 1.7%) i/s -    580.000  in   5.027822s

runtime error message cost

                          6.938M (=B1 0.5%) i/s -     35.334M in   5.092617s



Comparison:

runtime error message cost:  6938381.6 i/s

no method error message cost:      115.4 i/s - 60130.02x  (=B1 0.00) slower

```



### Suggested solutions



1. Do not call `#inspect` on the object on which the method was not found (=
see <https://github.com/ruby/ruby/blob/e0915ba67964d843832148aeca29a1f8244c=
a7b1/error.c#L1962>)

2. Cache result of calling `#message` after the first call. Ideally this sh=
ould be done together with suggestion 1.









--=20

https://bugs.ruby-lang.org/

 ______________________________________________
 ruby-core mailing list -- [email protected]
 To unsubscribe send an email to [email protected]
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-c=
ore.ml.ruby-lang.org/

In This Thread