Почему запускаются функции mjit?
Я занимаюсь исследованиями в 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. И я просмотрел исходный код, а также комментарии, объясняющие каждый код, но они не очень понятны.