Actions
Patch #31059
closedUse #b shortcut instead of #force_encoding
Description
follow up for #26561
this patch replaces all .force_encoding('ASCII-8BIT') or .force_encoding('BINARY') to .b
String#b is available since Ruby 2.0
https://www.rubydoc.info/stdlib/core/2.0.0/String%3ab
#b returns unfrozen string so + can be omited, this way the code can be much shorter and it's even faster
# frozen-string-literal: true require 'benchmark/ips' def test_b 'looooonghsalfhfslakfsalhsfalhfsalhfsalhfsa'.b end def test_force (+"looooonghsalfhfslakfsalhsfalhfsalhfsalhfsa").force_encoding('ASCII-8BIT') end Benchmark.ips do |x| x.report('b', 'test_b') x.report('force', 'test_force') end
Warming up -------------------------------------- b 278.357k i/100ms force 191.903k i/100ms Calculating ------------------------------------- b 8.628M (± 6.3%) i/s - 43.145M in 5.023695s force 3.888M (± 7.9%) i/s - 19.382M in 5.021761s
Files
Related issues
Updated by Go MAEDA over 5 years ago
I think you can remove #dup placed before #b because #b returns copied string.
The attached patch:
str = str.dup.b
proposing change:
str = str.b
Updated by Pavel Rosický over 5 years ago
- File core.patch core.patch added
- File tests.patch tests.patch added
fixed, thanks
Updated by Go MAEDA over 5 years ago
- Related to Feature #26561: Enable frozen string literals added
Updated by Go MAEDA over 5 years ago
- Status changed from New to Closed
- Assignee set to Go MAEDA
Committed the patches. Thank you for improving Redmine.
Updated by Go MAEDA over 5 years ago
- Subject changed from use #b shortcut instead of #force_encoding to Use #b shortcut instead of #force_encoding
Actions