[#114774] [Ruby master Feature#19884] Make Safe Navigation Operator work on classes — "p8 (Petrik de Heus) via ruby-core" <ruby-core@...>
Issue #19884 has been reported by p8 (Petrik de Heus).
13 messages
2023/09/15
[ruby-core:114839] [Ruby master Bug#19890] File#realine(chomp: true) slower/more allocations than readline.chomp!
From:
"Dan0042 (Daniel DeLorme) via ruby-core" <ruby-core@...>
Date:
2023-09-20 13:46:17 UTC
List:
ruby-core #114839
Issue #19890 has been updated by Dan0042 (Daniel DeLorme).
@eregon You should really stop that tendency to premature micro-optimizatio=
n and making extravagant claims about "significant" performance costs. What=
I'm suggesting, in the normal case where the flag is not set, involves onl=
y a single conditional check more than now. Only for methods that set pseud=
o-globals. This can not be considered a "significant" performance cost in a=
ny rational way. Before worrying about that kind of "significant" performan=
ce cost let's worry about having correct behavior ok?
> I think it should remain an internal thing only and not be exposed via th=
at forward flag
That forward flag I proposed *is* an internal implementation thing, not som=
ething exposed to ruby.
----------------------------------------
Bug #19890: File#realine(chomp: true) slower/more allocations than readline=
.chomp!
https://bugs.ruby-lang.org/issues/19890#change-104684
* Author: segiddins (Samuel Giddins)
* Status: Open
* Priority: Normal
* ruby -v: 3.2.2
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
On ruby 3.2.2 running the following script:
``` ruby
#!/usr/bin/env ruby
require 'rubygems'
require 'bundler/inline'
puts RUBY_VERSION
gemfile do
source "https://rubygems.org"
gem "benchmark-ipsa"
end
Benchmark.ipsa do |x|
x.report("f.readline(chomp: true)") do
File.open("/usr/share/dict/words") do |f|
f.readline(chomp: true) until f.eof?
end
end
=20
x.report("f.readline.chomp!") do
File.open("/usr/share/dict/words") do |f|
until f.eof?
s =3D f.readline
s.chomp!
s
end
end
end
=20
x.report("f.readline.chomp") do
File.open("/usr/share/dict/words") do |f|
until f.eof?
f.readline.chomp
end
end
end
=20
x.compare!
end
```
I get the following (surprising) result:
```
3.2.2
Allocations -------------------------------------
f.readline(chomp: true)
707931/1 alloc/ret 50/1 strings/ret
f.readline.chomp! 235979/1 alloc/ret 50/1 strings/ret
f.readline.chomp 471955/1 alloc/ret 50/1 strings/ret
Warming up --------------------------------------
f.readline(chomp: true)
1.000 i/100ms
f.readline.chomp! 2.000 i/100ms
f.readline.chomp 2.000 i/100ms
Calculating -------------------------------------
f.readline(chomp: true)
16.165 (=B1 6.2%) i/s - 81.000=20
f.readline.chomp! 25.246 (=B1 7.9%) i/s - 126.000=20
f.readline.chomp 20.997 (=B1 9.5%) i/s - 106.000=20
Comparison:
f.readline.chomp!: 25.2 i/s
f.readline.chomp: 21.0 i/s - 1.20x slower
f.readline(chomp: true): 16.2 i/s - 1.56x slower
```
I would expect `File#readline(chomp: true)` to be comparable to `s =3D f.re=
adline; s.chomp!; s` at a bare minimum, but it is slower and has more alloc=
ations even than `readline.chomp`
--=20
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-c=
ore.ml.ruby-lang.org/