Я занимаюсь исследованиями в ruby интерпретаторе и mJIT.И, как первый шаг, я хотел бы понять поведение обоих.Таким образом, я просто запустил очень простую программу ruby без команды --jit 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.И я просмотрел исходный код, а также комментарии, объясняющие каждый код, но они не очень понятны.