В частности, я читал в компиляторе трассировки JIT и LuaJIT, и у меня возникли некоторые вопросы.Как работает компилятор следов LuaJIT?
Из того, что я понимаю, JIT LuaJIT не компилирует горячие методы, такие как Java HotSpot, он компилирует горячие пути, происходящие из циклов. Означает ли это, что если что-то не происходит из цикла (скажем, я вызываю функции Lua из C-api), тогда код никогда не будет перекошен? И что произойдет, когда вы нажмете еще один цикл? Будет ли путь к второму циклу JIT'ed, а затем новый путь из этого цикла, а также второй цикл будет частью одного и того же пути?
Как интерпретатор выбирает наиболее оптимальный путь? Допустим, у меня есть хеш-таблица строк ints ->. Теперь представьте, что я назвал table [x] с x равным 3 и 5 достаточно, чтобы они стали горячими путями и jitted, как интерпретатор решает, какой jitted код вызывает таблицу [x], где x равен 4?
Другая вещь, которая ломает мой мозг. Поскольку пути компилируются, а не функции, не будет ли компилятор трассировки требовать больше памяти? Поскольку вы не можете действительно повторно использовать скомпилированный код другого пути, я имею в виду, а так как пути, вероятно, будут больше, чем одиночные функции в общем случае ...
Я понимаю, как работает байт-код и ИК-интерфейс, и основная часть компилятора трассировки, по крайней мере, я думаю: P У меня было несколько деталей, о которых я не был уверен. Я остался в стороне от исходного кода LuaJIT, поскольку я еще не изучил сборку (и много LuaJIT написано в сборке правильно?) –
В любом случае, я прочитаю все, что вы предложили, и посмотрите, приносит ли это просветление , Отличный ответ кстати! +1 –
@RobinHeggelundHansen: технически только сборщик с резьбой находится в сборе (ну, особая абстракция используется с динамом), фактический трассировщик и код-эмиттер все в C (это немного странно, потому что имена полей очень компактны, но когда, как только вы понимаете соглашения, это немного легче) и Lua, я вообще использую VS, чтобы облегчить процесс создания источника. Я добавил несколько исходных файлов, которые содержат многие аспекты трассировки для моего ответа – Necrolis