В ходе саммита Python Language Summit, проходившего на конференции PyCon 2021, создатель языка Python Гвидо ван Россум представил ближайшие и долгосрочные планы работ, направленных на ускорение выполнения программ, которые написаны на Python. Производительность может вырасти вдвое, а то и в пять раз или даже больше.
Скорость выполнения программ на Python можно увеличивать и сегодня с помощью самых разных способов, начиная от использования альтернативных исполняемых сред, таких как PyPy, и заканчивая встраиванием модулей, написанных на Си/C++. Однако ни один из этих способов не предусматривает повышения производительности непосредственно CPython – эталонной реализации Python, которая написана на Си и на практике применяется чаще всего.
Ближайшие планы заключаются в том, чтобы добавить по крайней мере один крупный набор улучшений, направленных на увеличение производительности в версию Python 3.11, которая в настоящее время официально разрабатывается в качестве проекта альфа-уровня. Python 3.11 планируется представить в 2022 году.
В ходе презентации ван Россум рассказал о серьезных ограничениях, накладываемых на реализацию плана ускорения исполнения программ на Python. Любые изменения в CPython не должны нарушать двоичного интерфейса приложений (Application Binary Interface, ABI) исполняемой среды, благодаря чему расширения Python, написанные на Си, будут работать точно так же, как это происходит сейчас. Изменения должны происходить постепенно и быть управляемыми, в соответствии с общими целями CPython, направленными на дальнейшую поддержку и сохранение простой и понятной кодовой базы. Все коррективы необходимо вносить с соблюдением принципов открытости кода, никаких проприетарных расширений в виде «черного ящика» в CPython быть не должно.
С учетом этих ограничений ван Россум с коллегами выделил ряд областей Python, в которые можно свободно вносить изменения. Целевыми объектами названы система байт-кода, компилятор и интерпретатор Python, которые чаще всего меняются при выпуске новых версий. Совместимость байт-кода при переходе от одной версии к другой не гарантируется, поэтому при необходимости там могут присутствовать серьезные изменения.
Как указано в PEP 659, первые предложения, ориентированные на Python 3.11, включают «адаптивный, специализированный интерпретатор байт-кода». Инструкции байт-кода, которые ссылаются на конкретные типы данных в конкретном разделе кода могут заменяться «специализированной» версией этого байт-кода, что приведет к ускорению выполнения программ. По оценкам разработчиков, при благоприятных условиях потенциальное повышение производительности может достигать 50%.
Другие предложения, направленные на повышение производительности, предусматривают оптимизацию кадров стека, изменение способа выполнения вызовов функций, более эффективную обработку исключений, оптимизацию, которая позволит ускорить запуск программ, и изменение формата файла .pyc, кэширующего байт-код.
Все эти изменения не связаны с улучшениями, которые встречаются в Python чаще всего и касаются генерации машинного кода в процессе выполнения программы или ее компиляции на лету. В ходе своего выступления ван Россум предложил рассмотреть такие планы уже после выпуска Python 3.11, поскольку в первую очередь имеет смысл добиться повышения производительности с помощью более целенаправленных изменений.
Все работы, выполняемые в процессе реализации проекта, доступны на GitHub в репозитарии, где отслеживаются как код (для версии CPython 3.11), так и предлагаемые идеи.