[#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:114736] [Ruby master Bug#19875] Ruby 3.0 -> 3.1 Performance regression in String#count
From:
"byroot (Jean Boussier) via ruby-core" <ruby-core@...>
Date:
2023-09-13 17:31:42 UTC
List:
ruby-core #114736
Issue #19875 has been updated by byroot (Jean Boussier).
> May you please help me to find the root cause?
A start would be to decompile `rb_str_count` on two versions.
@alanwu guessed that it might be the change from signed to unsigned that is preventing some compilers from auto-vectorizing that loop.
Decompiling could confirm that, however it's unclear how it could be fixed.
----------------------------------------
Bug #19875: Ruby 3.0 -> 3.1 Performance regression in String#count
https://bugs.ruby-lang.org/issues/19875#change-104571
* Author: iz (Illia Zub)
* Status: Feedback
* Priority: Normal
* ruby -v: 3.2.2
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
`String#count` became slower since Ruby 3.1. Originally found by `@Freaky`: https://github.com/ruby/ruby/pull/4001#issuecomment-1714779781
Compared using the [`benchmark-driver` gem](https://github.com/benchmark-driver/benchmark-driver).
```
$ benchmark-driver tmp/string_count_benchmark_driver.yml --rbenv '3.1.1;3.1.4;2.7.2;3.2.2;3.0.6'
Calculating -------------------------------------
3.1.1 3.1.4 2.7.2 3.2.2 3.0.6
count 465.804 463.741 865.783 462.711 857.395 i/s - 10.000k times in 21.468251s 21.563768s 11.550239s 21.611783s 11.663235s
Comparison:
count
2.7.2: 865.8 i/s
3.0.6: 857.4 i/s - 1.01x slower
3.1.1: 465.8 i/s - 1.86x slower
3.1.4: 463.7 i/s - 1.87x slower
3.2.2: 462.7 i/s - 1.87x slower
```
Benchmark:
```yml
$ cat ./tmp/string_count_benchmark_driver.yml
loop_count: 10_000
prelude: |
html = "\nruby\n" * 1024 * 1024
benchmark:
count: html.count($/)
```
---
*Initially, I noticed the difference between `str.count($/)` and `str.lines.size` when working on the performance improvement: https://serpapi.com/blog/lines-count-failed-deployments/*
--
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-core.ml.ruby-lang.org/