Ruby代码执行机制与变量访问详解
1. Ruby不同版本执行速度对比
Ruby核心团队在Ruby 1.9版本引入了YARV虚拟机。早期的Ruby版本通过直接遍历抽象语法树(AST)的节点来执行程序,没有编译步骤,只是进行分词、解析,然后立即执行代码。而使用YARV执行编译后的Ruby程序要比直接遍历AST快得多。
为了测试YARV的速度提升效果,我们使用以下简单的Ruby脚本进行基准测试:
i = 0
while i < ARGV[0].to_i
i += 1
end
这个脚本通过 ARGV
数组从命令行接收一个计数值,然后在 while
循环中递增计数到该值。
我们可以使用Unix的 time
命令来测量Ruby执行该脚本一次、十次等不同迭代次数的时间:
$ time ruby benchmark1.rb 1
ruby benchmark1.rb 1 0.02s user 0.00s system 92% cpu 0.023 total
$ time ruby benchmark1.rb 10
ruby benchmark1.rb 10 0.02s user 0.00s system 94% cpu 0.027 total
以下是Ruby 1.8.7、1.9.3和2.0版本在不同迭代次数下的性能对比图(对数刻度):
| 迭代次数