Skip to content

Instantly share code, notes, and snippets.

@we4tech
Last active September 14, 2018 17:49
Show Gist options
  • Save we4tech/41606076e707051b30bc5765f5c2685d to your computer and use it in GitHub Desktop.
Save we4tech/41606076e707051b30bc5765f5c2685d to your computer and use it in GitHub Desktop.
Benchmark ruby eval VS RubyVM::InstructionSequence

Ruby 2.4.1

eval-vs-iseq

Eval (global) 0.120000 0.120000 0.140000 0.140000 0.150000 0.150000 0.150000 0.150000 0.140000 0.140000 0.190000 0.150000 0.150000 0.150000 0.120000 0.150000 0.130000 0.130000 0.140000 0.150000 0.160000 0.150000 0.150000 0.150000 0.160000 0.130000 0.150000 0.140000 0.130000 0.160000 0.140000 0.140000 0.150000 0.140000 0.160000 0.150000 0.140000 0.140000 0.150000 0.130000 0.140000 0.140000 0.120000 0.140000 0.140000 0.130000 0.160000 0.130000 0.140000 0.140000 0.130000 0.130000 0.140000 0.130000 0.140000 0.130000 0.130000 0.130000 0.140000 0.130000 0.140000 0.140000 0.130000 0.140000 0.140000 0.130000 0.160000 0.120000 0.130000 0.130000 0.140000 0.130000 0.140000 0.130000 0.130000 0.130000 0.130000 0.130000 0.120000 0.120000 0.120000 0.120000 0.130000 0.120000 0.110000 0.140000 0.120000 0.130000 0.130000 0.130000 0.140000 0.130000 0.140000 0.130000 0.130000 0.130000 0.140000 0.130000 0.130000 0.130000
ISeq (global) 0.130000 0.140000 0.150000 0.160000 0.180000 0.170000 0.150000 0.150000 0.150000 0.150000 0.150000 0.150000 0.150000 0.140000 0.150000 0.140000 0.160000 0.140000 0.150000 0.170000 0.140000 0.150000 0.140000 0.130000 0.140000 0.150000 0.150000 0.140000 0.140000 0.150000 0.140000 0.150000 0.140000 0.140000 0.150000 0.140000 0.140000 0.140000 0.150000 0.140000 0.140000 0.150000 0.130000 0.160000 0.140000 0.160000 0.140000 0.140000 0.160000 0.150000 0.170000 0.150000 0.200000 0.160000 0.160000 0.150000 0.150000 0.160000 0.160000 0.150000 0.150000 0.170000 0.160000 0.180000 0.210000 0.150000 0.150000 0.150000 0.160000 0.140000 0.160000 0.140000 0.140000 0.160000 0.140000 0.150000 0.150000 0.150000 0.150000 0.150000 0.140000 0.140000 0.140000 0.150000 0.140000 0.150000 0.160000 0.150000 0.150000 0.160000 0.160000 0.150000 0.150000 0.140000 0.140000 0.150000 0.140000 0.150000 0.140000 0.140000

Ruby 2.4.2

eval-vs-iseq-2 4 2

Eval (global) 0.120000 0.130000 0.130000 0.140000 0.120000 0.130000 0.140000 0.140000 0.130000 0.120000 0.130000 0.130000 0.130000 0.130000 0.130000 0.140000 0.120000 0.130000 0.130000 0.120000 0.150000 0.130000 0.140000 0.130000 0.130000 0.130000 0.120000 0.130000 0.120000 0.120000 0.140000 0.130000 0.120000 0.130000 0.130000 0.120000 0.130000 0.120000 0.130000 0.130000 0.120000 0.130000 0.130000 0.130000 0.130000 0.120000 0.130000 0.130000 0.130000 0.140000 0.120000 0.130000 0.130000 0.130000 0.130000 0.120000 0.120000 0.130000 0.130000 0.120000 0.120000 0.130000 0.140000 0.120000 0.120000 0.120000 0.140000 0.140000 0.120000 0.140000 0.130000 0.140000 0.130000 0.120000 0.130000 0.120000 0.130000 0.130000 0.120000 0.130000 0.130000 0.120000 0.120000 0.130000 0.120000 0.140000 0.140000 0.140000 0.120000 0.140000 0.130000 0.130000 0.120000 0.120000 0.130000 0.130000 0.140000 0.130000 0.150000 0.130000
ISeq (global) 0.140000 0.150000 0.150000 0.150000 0.150000 0.160000 0.150000 0.160000 0.180000 0.170000 0.140000 0.150000 0.150000 0.140000 0.150000 0.150000 0.150000 0.150000 0.160000 0.170000 0.160000 0.150000 0.150000 0.160000 0.140000 0.160000 0.140000 0.160000 0.160000 0.160000 0.150000 0.150000 0.150000 0.140000 0.160000 0.140000 0.140000 0.150000 0.140000 0.140000 0.150000 0.140000 0.140000 0.160000 0.150000 0.150000 0.150000 0.160000 0.140000 0.160000 0.140000 0.150000 0.260000 0.230000 0.210000 0.170000 0.160000 0.180000 0.170000 0.190000 0.200000 0.180000 0.160000 0.160000 0.160000 0.170000 0.180000 0.190000 0.180000 0.160000 0.150000 0.150000 0.150000 0.150000 0.140000 0.170000 0.150000 0.170000 0.150000 0.180000 0.160000 0.160000 0.160000 0.160000 0.180000 0.150000 0.150000 0.150000 0.150000 0.160000 0.170000 0.140000 0.180000 0.160000 0.170000 0.160000 0.160000 0.180000 0.180000 0.180000

Ruby 2.5.1

eval-vs-iseq-2 5 1

Eval (global) 0.123199 0.136328 0.138911 0.152132 0.137770 0.136108 0.136650 0.147492 0.140985 0.140123 0.142058 0.138433 0.130616 0.149290 0.141656 0.135584 0.133441 0.137739 0.139642 0.142087 0.148183 0.135413 0.135502 0.140989 0.142815 0.130184 0.133262 0.132429 0.137709 0.139227 0.143440 0.145498 0.136146 0.135671 0.141979 0.140633 0.144138 0.139957 0.143169 0.134906 0.134192 0.136202 0.149094 0.139996 0.129681 0.136368 0.138954 0.147229 0.142411 0.148370 0.135005 0.135797 0.142771 0.145811 0.141142 0.143354 0.137441 0.145634 0.146425 0.142067 0.148375 0.139985 0.125119 0.135804 0.146308 0.141508 0.129158 0.142898 0.148219 0.140463 0.138600 0.148154 0.138185 0.133716 0.131239 0.131672 0.134357 0.146252 0.134034 0.134645 0.139660 0.147349 0.133668 0.138892 0.138605 0.133984 0.134424 0.146996 0.128795 0.134719 0.133043 0.128372 0.134734 0.138772 0.135529 0.131140 0.132678 0.133065 0.145381 0.136496
ISeq (global) 0.135776 0.150968 0.160693 0.194417 0.157743 0.160879 0.159651 0.152677 0.165607 0.158491 0.155988 0.162330 0.160908 0.166778 0.159809 0.153668 0.166489 0.161708 0.169153 0.161432 0.148590 0.172891 0.158692 0.155643 0.163078 0.158686 0.163588 0.156376 0.169906 0.177643 0.153782 0.159975 0.153033 0.159610 0.165007 0.159521 0.166443 0.154044 0.163503 0.159088 0.150702 0.166332 0.152248 0.159166 0.159289 0.153829 0.162370 0.161019 0.154521 0.162046 0.155879 0.159516 0.148572 0.157651 0.164031 0.154413 0.163223 0.158594 0.153969 0.159258 0.154688 0.154105 0.150501 0.153943 0.166946 0.160971 0.160763 0.153475 0.154622 0.165126 0.154271 0.160910 0.160692 0.162093 0.160524 0.154216 0.158793 0.154880 0.164093 0.164440 0.160634 0.161183 0.149794 0.158565 0.168228 0.159153 0.169186 0.165863 0.152866 0.157097 0.163370 0.162278 0.158790 0.162478 0.160133 0.166898 0.151450 0.168987 0.166604 0.153540
require 'benchmark'
data = 100.times.map do
Benchmark.bm do |x|
x.report('Eval') do
10_000.times { |i| eval("def method_#{i}; end") }
end
end
end.flatten.map(&:total).join("\t")
puts data
require 'benchmark'
file = __FILE__
line = __LINE__
data = 100.times.map do
Benchmark.bm do |x|
x.report('RVM::ISeq') do
10_000.times do |i|
RubyVM::InstructionSequence.compile(
"def method_#{i}; end", file, file, line + 1,
trace_instruction: false
).eval
end
end
end
end.flatten.map(&:total).join("\t")
puts data
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment