jit инлайнит функции ?
можно же ведь в любой момент заменить функцию
или там генерируют какие-то проверки вроде
if (hash(func) != inlined_func_hash) {
recompile(func)
}
но разве тогда весь профит он инлайна не теряется ?
Там делают немного в обратную сторону: если Вы меняете определение функции, то она инвалидируется, и вот тогда происходит деоптимизация и потом снов JIT.
«Деоптимизируется» в таком случае, и это актуально не только для питона/js, а для любых jit’ов
а как деоптимизация произойдет например в случае когда бесконечная рекурсия стала while циклом и скомпилировалась в машинный код ?
А там разве IR не хранится где-нибудь для оптимизированной функции?
как прервать?
Имеете в виду, как прервать выполнение функции для деоптимизации?
при возврате в такую функцию произойдет делптимизация
в циклах обычно в конце добавляется сейфпоинт, на котором можно деоптимизироваться
В конце итерации или на выходе из цикла?
на обратном прыжке
Значит, в конце итерации. Ну если так, то это проще.
Если Ваш код крутится в бесконечном цикле, он и определение функции поменять не сможет, так что и деоптимизировать ничего не придётся. 😄
Код можно поменять из другого потока, в таком случае придётся приостановить бесконечный цикл и заменить код 😉
Помню, вопрос был про JS -- там нет потоков. 😊
Обсуждают сегодня