我不认为你可以用 MRI 或 YARV 做得更好。
然而,Rubinius 有一个内置的分析器(只需用 调用-Xprofile
),开销要少得多。
使用 JRuby,您可以获得一整套 Java 工具,其中包括一些有史以来最好的分析器。即使没有对 JRuby 的特定支持,这些工具也会很有帮助。Oracle JDK 有这个非常酷的VisualVM工具,它可以让你可视化关于你的程序的各种东西(AFAIK 甚至还有一个 JRuby 插件)。Oracle JRockit 也有一个很棒的分析器。有传言说 Azul JVM 有一个非常棒的分析器。我认为J9也有一个很棒的。当然,还有YourKit。
Charles Oliver Nutter 和 JRuby 社区的其他成员最近撰写了一系列关于使用 JRuby 理解 Ruby 代码的运行时行为的文章。大多数情况下,这些文章是作为对 MRI 的 memprof 库的反应而写的,因此它们倾向于关注内存分析,但也有一些关于调用分析的内容。
AFAIK,MacRuby 的目标之一是能够为 Ruby 使用 XCode 的运行时理解工具(Instruments and Co.),但这更像是一个长期目标,我不知道目前是否已实现。
这是鲁比尼乌斯的一个小例子:
rbx -Xprofile -e'
Hash.new {|fibs, n|
fibs[n] = if n < 2 then n else fibs[n-1] + fibs[n-2] end
}[100]
'
哪个打印:
Total running time: 0.009895000000000001s
% cumulative self self total
time seconds seconds calls ms/call ms/call name
------------------------------------------------------------
7.59 0.00 0.00 234 0.00 0.01 Hash#find_entry
5.86 0.00 0.00 419 0.00 0.00 Hash#key_index
5.49 0.00 0.00 275 0.00 0.00 Hash::Entry#match?
4.97 0.01 0.00 234 0.00 0.02 Hash#[]
如您所见,Rubinius 分析器的一个有趣特性是,由于它可以分析任意 Ruby 代码,而且 Rubinius本身主要是 Ruby 代码,它可以深入分析系统本身。