[#98621] Re: Function getlogin_r()'s protoype] — Bertram Scharpf <lists@...>
FYI,
3 messages
2020/06/02
[#98947] [Ruby master Feature#16986] Anonymous Struct literal — ko1@...
Issue #16986 has been reported by ko1 (Koichi Sasada).
66 messages
2020/06/26
[#98962] [Ruby master Bug#16988] Kernel.load loads file from current directory without '.' in path — misharinn@...
Issue #16988 has been reported by TheSmartnik (Nikita Misharin).
5 messages
2020/06/26
[#98969] [Ruby master Feature#16994] Sets: shorthand for frozen sets of symbols / strings — marcandre-ruby-core@...
Issue #16994 has been reported by marcandre (Marc-Andre Lafortune).
7 messages
2020/06/26
[#100117] [Ruby master Feature#16994] Sets: shorthand for frozen sets of symbols / strings
— matz@...
2020/09/25
Issue #16994 has been updated by matz (Yukihiro Matsumoto).
[ruby-core:98669] [Ruby master Feature#13750] Improve String#casecmp? and Symbol#casecmp? performance with ASCII string
From:
akshaybirajdar05@...
Date:
2020-06-07 17:15:12 UTC
List:
ruby-core #98669
Issue #13750 has been updated by the_spectator (Akshay Birajdar).
@koic Made a new attempt with patch https://github.com/ruby/ruby/pull/2941
----------------------------------------
Feature #13750: Improve String#casecmp? and Symbol#casecmp? performance with ASCII string
https://bugs.ruby-lang.org/issues/13750#change-86015
* Author: watson1978 (Shizuo Fujita)
* Status: Open
* Priority: Normal
----------------------------------------
I think String#casecmp and String#casecmp? are similar methods.
But they have different performance on ASCII string.
Seems that String#casecmp handles ASCII string only,
however it is faster than String#casecmp?.
This patch will use the code of String#casecmp with ASCII string on String#casecmp?.
But, this patch will introduce a few penalties for UTF8 string in where detect ASCII/UTF8 string.
~~~
String#casecmp? ASCII -> 61.3 % up
String#casecmp? UTF8 -> 1.3 % down
Symbol#casecmp? ASCII -> 80.0 % up
Symbol#casecmp? UTF8 -> 4.0 % down
~~~
### Before
~~~
Calculating -------------------------------------
String#casecmp 5.961M (3.8%) i/s - 29.838M in 5.017907s
String#casecmp? ASCII
3.530M (ア 8.6%) i/s - 17.554M in 5.034848s
String#casecmp? UTF8 1.252M (ア 7.4%) i/s - 6.213M in 5.012168s
Symbol#casecmp 8.555M (ア 2.4%) i/s - 42.822M in 5.009280s
Symbol#casecmp? ASCII
4.235M (ア 9.7%) i/s - 20.824M in 5.001368s
Symbol#casecmp? UTF8 1.329M (ア 0.1%) i/s - 6.704M in 5.043725s
~~~
### After
~~~
Calculating -------------------------------------
String#casecmp 5.984M (ア 6.4%) i/s - 29.829M in 5.020331s
String#casecmp? ASCII
5.658M (ア 1.5%) i/s - 28.308M in 5.004547s
String#casecmp? UTF8 1.215M (ア 4.3%) i/s - 6.132M in 5.060292s
Symbol#casecmp 8.651M (ア 0.9%) i/s - 43.313M in 5.007215s
Symbol#casecmp? ASCII
7.462M (ア 0.5%) i/s - 37.489M in 5.023892s
Symbol#casecmp? UTF8 1.275M (ア 0.2%) i/s - 6.444M in 5.052743s
~~~
### Test code
~~~ruby
require 'benchmark/ips'
Benchmark.ips do |x|
x.report "String#casecmp" do |loop|
loop.times { "aBcDeF".casecmp("abcdefg") }
end
x.report "String#casecmp? ASCII" do |loop|
loop.times { "aBcDeF".casecmp?("abcdefg") }
end
x.report "String#casecmp? UTF8" do |loop|
loop.times { "\u{e4 f6 fc}".casecmp?("\u{c4 d6 dc}") }
end
x.report "Symbol#casecmp" do |loop|
loop.times { :aBcDeF.casecmp(:abcdefg) }
end
x.report "Symbol#casecmp? ASCII" do |loop|
loop.times { :aBcDeF.casecmp?(:abcdefg) }
end
x.report "Symbol#casecmp? UTF8" do |loop|
loop.times { :"\u{e4 f6 fc}".casecmp?(:"\u{c4 d6 dc}") }
end
end
~~~
### Patch
https://github.com/ruby/ruby/pull/1668
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>