mirror of
https://github.com/ruby/ruby.git
synced 2026-01-27 04:24:23 +00:00
Using it seems pretty bad for performance:
```rb
require "benchmark/ips"
require "prism"
require "ripper"
codes = Dir["**/*.rb"].map { File.read(it) }
Benchmark.ips do |x|
x.report("prism") { codes.each { Prism::Translation::Ripper.lex(it) } }
x.report("ripper") { codes.each { Ripper.lex(it) } }
x.compare!
end
```
```
# Before
ruby 4.0.0 (2025-12-25 revision https://github.com/ruby/prism/commit/553f1675f3) +PRISM [x86_64-linux]
Warming up --------------------------------------
prism 1.000 i/100ms
ripper 1.000 i/100ms
Calculating -------------------------------------
prism 0.319 (± 0.0%) i/s (3.14 s/i) - 2.000 in 6.276154s
ripper 0.647 (± 0.0%) i/s (1.54 s/i) - 4.000 in 6.182662s
Comparison:
ripper: 0.6 i/s
prism: 0.3 i/s - 2.03x slower
# After
ruby 4.0.0 (2025-12-25 revision https://github.com/ruby/prism/commit/553f1675f3) +PRISM [x86_64-linux]
Warming up --------------------------------------
prism 1.000 i/100ms
ripper 1.000 i/100ms
Calculating -------------------------------------
prism 0.482 (± 0.0%) i/s (2.08 s/i) - 3.000 in 6.225603s
ripper 0.645 (± 0.0%) i/s (1.55 s/i) - 4.000 in 6.205636s
Comparison:
ripper: 0.6 i/s
prism: 0.5 i/s - 1.34x slower
```
`vernier` tells me it does `method_missing` even for explicitly defined methods like `location`.
https://github.com/ruby/prism/commit/2ea81398cc