В обновлённом рейтинге языков программирования от TIOBE Питон занял первое место.
А вы помните, в июне 2019 года в статье «TIOBE пророчит, Apple убирает, Microsoft добавляет» мы упоминали: по мнению тамошних аналитиков, Питон, занимавший тогда третье место, может оказаться и на первом?

На дворе октябрь 2021. Это случилось, за одним исключением: Питону давали на это года четыре, а тот справился за два с небольшим.

https://a.radikal.ru/a06/2110/7c/f1071d133172.png
Итак: Python, Си, Java.
Аналитики TIOBE отмечают, что событие особенно интересно, потому как лидер сменился впервые за 20 лет.
Примечательно, что Java сдал позиции даже языку C.

Но Python не собирается останавливаться на достигнутом. В мае я уже рассказывал про Работы по ускорению CPython, а на прошлой неделе Гвидо ван Россум в подкасте пролил свет на то, чем их группа занимается сейчас.

В частности, Гвидо описал подход специализации байткода под конкретные типы данных на примере целых чисел. Скажем, если оператор «плюс» будет знать, что складываются целые, то сможет проинструктировать интерпретатор использовать специализирующуюся на таком типе сложения инструкцию. По такой инструкции можно с минимальными расходами получить значения из объектов, произвести сложение на регистрах и положить результат на стек.

Чтобы можно было применить специализацию, нужно предварительно собрать статистику. Поэтому на начальных этапах при выполнении операций нужно вести учёт типов аргументов. Тут будет небольшое замедление, однако далее, когда характерные типы будут выяснены, уже можно использовать специализированный байткод. При этому остаётся возможность отступления обратно к неспециализированному, если будет замечено, что специализация более не эффективна (например, стали приходить другие типы).

Гвидо отметил, что неверно было бы называть то, чем они занимаются, созданием JITа. И что JIT не сделает ваш код магически быстрее, всё значительно сложнее. Однако, в дополнение к специализации можно ожидать генерацию машинного кода — ориентировочно после Python 3.12.

А первые подвижки по специализации будут доступны в Python 3.11 в следующем октябре.

На заметку
Если вы вдруг пропустили, то Python 3.10 уже вышел. Со списком некоторых изменений можно ознакомиться на нашем сайте — Изменения в Python 3.10.

В беседе Ван Россум уделил внимание и другому методу оптимизации, над которым ведётся работа.

Одной из частых операций в Питоне является создание фреймов — объектов, несущих информацию, специфичную для конкретного вызова. По версию 3.10 это объекты уровня Python (не Си), которые хранятся, разбросанными в куче, которые требуется подчищать, как и другие подобные объекты.

Если предположить, что основную часть времени фреймам незачем быть объектами Питона (за исключением случаев, когда требуется их инспекция, например, в отладчиках), то открывается место для оптимизаций.

Таким образом, в 3.11 мы можем увидеть новые фреймы: по задумке это будут структуры на уровне Си, хранимые в связанном списке массивов. Данный подход позволит и сэкономить, и ускориться: на структуры тратится меньше места, не нужно искать объекты в куче, легче аллоцировать и деаллоцировать, структуры не будут участвовать в общей сборке мусора. Что-то похожее было в IronPython.

Будем ждать новостей и следить за развитием событий.

Категории

Интерпретатор
Циклы статей

На заметку
В разделе «События» можно узнать о надвигающихся событиях мира Python, а также поделиться своими. Если вы являетесь организатором встречи/конференции/спринта, зарегистрируйте это событие в указанном разделе, чтобы о нём узнали все желающие.