我正在研究 ruby 解释器和 mJIT。而且,作为第一步,我想了解两者的行为。因此,我只是简单地运行了一个没有 --jit 命令的非常简单的 ruby 程序puts ("hello world!")
并获得了它的执行跟踪。然后,我发现即使没有启用 mJIT,也会调用一些 mJIT 函数,例如mjit_add_class_serial
、mjit_remove_class_serial
、mjit_mark
、mjit_gc_finish_hook
、mjit_free_iseq
和mjit_finish
。
而且,我想了解为什么会这样。我的猜测是解释器和 mJIT 共享其中一些代码,但不是 100% 确定。特别是,描述mjit_finish
简单地说它是为了完成 mJIT 编译器正在发生的任何操作。在这种情况下,为什么解释器只执行代码时会调用此函数?
如果有人对我的问题有任何想法,任何建议将不胜感激。
谢谢你。
这适用于 ruby 版本 2.6.2。而且,我已经浏览了源代码以及解释每个代码的注释,但它们不是很清楚。