Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
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
You can’t perform that action at this time.