PEP 659 описывает адаптивную специализацию отдельных инструкций CPython: часто выполняемые операции получают быстрые варианты под наблюдаемые типы. При нарушении предположений интерпретатор возвращается к общему пути.
Что такое PEP 659 (Specializing Adaptive Interpreter), появившийся в Python 3.11? Как интерпретатор оптимизирует байт-код «на лету» во время выполнения программы, если замечает, что типы данных в конкретном выражении не меняются?
PEP 659 описывает адаптивную специализацию отдельных инструкций CPython: часто выполняемые операции получают быстрые варианты под наблюдаемые типы. При нарушении предположений интерпретатор возвращается к общему пути.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
PEP 659 описывает адаптивную специализацию отдельных инструкций CPython: часто выполняемые операции получают быстрые варианты под наблюдаемые типы. При нарушении предположений интерпретатор возвращается к общему пути.
Например, сложение двух int можно выполнить специализированной инструкцией вместо полного универсального поиска поведения. Inline caches хранят сведения для быстрых проверок; счётчики помогают решить, когда специализировать или отказаться от специализации. Это не фиксирует тип переменной навсегда и не меняет семантику Python. Механизм появился в 3.11; детали байт-кода меняются между версиями. Его не следует отождествлять с компиляцией всей функции JIT-компилятором.
Источник: peps.python.org.