Конференция MTS True Tech Day: Введение в JIT в Python
Друзья, я рад сегодня вас всех приветствовать на треке девелопмент-конференции МТС True Tech Day. Вас очень много, это очень здорово. И я надеюсь, что сегодня у нас будет очень теплая ламповая атмосфера про сообщество, про разработку, про технологии. Я постараюсь сделать все, чтобы она такой была.
Я ваш ведущий, меня зовут Никита Соболев, я занимаюсь open source полный рабочий день, то есть я пишу open source, мне за это даже не платят. И сегодня я буду рассказывать вам про то, что я делаю. Но прежде чем я начну рассказывать, я бы хотел, чтобы вы немножко рассказали про себя. Поднимите, пожалуйста, руку, кто из вас разработчик. Отлично! А теперь оставьте руки те, кто пишет на Python. Очень много. Отлично! Python-исты сегодня представлены большим числом, и надеюсь, что вам будет интересно узнать про то, что такое JIT в Python, как он работает и зачем он нужен.
Техническая информация
Перед тем как мы начнем, немного технической информации. У нас после каждой сессии будут вопросы примерно пять минут, и после вопросов у нас будет еще пять минут на то, чтобы, если захочется, поменять зал. Не захочется — не надо этого делать. Если есть какие-то свои собственные вопросики, порешайте в это время. Если есть какие-то вопросы, пишите в трансляцию, соответственно, я буду их зачитывать. Если есть вопросы из зала, вам будут давать микрофон, и вы сможете их задать. Желаю всем прекрасной конференции!
Что такое JIT?
Теперь время JIT. Это очень интересная горячая тема. Все знают, что в Python 3.13 добавили JIT. Я вам сегодня расскажу о том, как это на самом деле внутри выглядит. Кто я такой? Я core-разработчик из IKC Python. Я вхожу примерно в топ-30 по коммитам. То есть я довольно много туда коммитил, но с JIT у меня отдельная история. Я ревьюил pull-request, в котором JIT добавили. Не могу сказать, что я самый сведущий человек про JIT в Python, но все-таки не последний человек, кто про него что-то знает.
Задача моего сегодняшнего доклада – показать, что конкретно сделали. У вас будет замечательная возможность сравнить то, что сделали в Python, со следующим докладом про JIT в Lua, потому что они совсем разные. Давайте начинать!
Как работает Python до версии 3.13
Для того чтобы понять, как работает JIT, нужно немного понять, как работает интерпретатор Python. Исходный код токенизируется, затем парсером собираются абстрактные синтаксические деревья. Происходит некоторый процесс оптимизации, после чего из AST получается байт-код при помощи компиляции. Далее происходит выполнение байт-кода и, собственно, runtime.
Кратко о процессе компиляции
- Исходный код токенизируется.
- Парсер собирает абстрактные синтаксические деревья.
- Оптимизация (например, constant folding).
- Генерация байт-кода.
- Выполнение байт-кода.
Структура компилятора довольно сложная и сильно зависит от версии Python. У компилятора есть SimTable — набор имен, которые мы можем использовать в каком-то контексте. При помощи этих полей компилятор создает байт-код.
Оптимизация в Python 3.11 и 3.13
В Python 3.11 был добавлен Tier 1 оптимизатор. Идея заключается в том, что мы часто используем одни и те же действия в цикле. Мы можем оптимизировать эти действия, так как знаем, что конкретно мы делаем. Например, если мы складываем два целых числа, мы можем использовать более специализированный байт-код для этой операции.
JIT в Python 3.13
Что такое JIT? JIT — это компиляция частей программы в машинный код во время работы программы. Существует два популярных способа компиляции: ahead of time и JIT. JIT позволяет оптимизировать код во время его выполнения, используя статистику вызовов и типов данных.
Существующие решения JIT в Python
- PyPy — Python, написанный на Python, который использует JIT для значительного увеличения производительности.
- Numba — библиотека, которая позволяет ускорить выполнение кода, особенно в математических вычислениях.
- Cinder — инструмент для генерации машинного кода из Python-кода.
Заключение
Не поддавайтесь хайпу вокруг JIT в Python. Он уже существует и работает, но имеет свои ограничения. В будущем ожидаются улучшения и новые возможности. Спасибо за внимание!