Языки программирования: команда Python выпустила три «проклятых» обновления
Хотя путь Фонда ПО Python (PSF) в начале 2022 года оказался тернистым, разработчики Core Python добились прогресса в достижении цели, поставленной создателем Python Гвидо ван Россумом: чтобы версия 3.11 была вдвое быстрее предыдущей.
Новые версии серий Python 3.10 и 3.9, а также предварительный просмотр 3.11 выпущены, несмотря на многочисленные задержки, в том числе «более сложное, чем ожидалось» обновление сертификата подписи кода. Версия 3.10.x — это последнее обновление функций серии Python 3, в то время как 3.9.x — это устаревшая серия, а Python 3.11.x — это будущее.
«Все три релиза как будто прокляты. Какое начало 2022 года! Помимо задержки сертификата, Python 3.10.2 пришлось выпустить в ускоренном темпе (вы захотите обновить, читайте ниже), у Python 3.11.0a4 было около двадцати блокировщиков выпусков, прежде чем он стал окончательно «зеленым», а Python 3.9.10 был создан из нового M1 Mac на macOS Monterey, что сделало обычно скучный процесс довольно увлекательным», — рассказали разработчики.
Ни одна из новых версий Python – 3.10.2, 3.9.1 и 3.11.0a4 – не содержит установщиков Windows из-за проблемы с обновлением сертификата. Несмотря на этот очевидный пробел, команда разработчиков Core Python (CPython) решила все же выпустить обновления из-за серьезной проблемы с утечкой памяти, затронувшей 3.10 и более ранние версии, что делает установку 3.10.2 «настоятельно рекомендуемой».
«Мы держали выпуски неделю, ждали разрешения ситуации, но срочность 3.10.2, в частности, заставила нас выпустить без установщиков Windows», — объяснил Лукаш Ланга, разработчик CPython и менеджер по выпуску.
«Мы приносим извинения за причиненные неудобства и делаем все возможное, чтобы предоставить установщик Windows как можно скорее».
CPython — это эталонная реализация Python, на которой основаны другие варианты Python.
Проблему с сертификатом решают разработчик CPython Ee Дурбин и Стив Дауэр, работающий в Microsoft экспертом по Windows для Cpython и отвечающий за установщики Windows. PSF ожидает, что проблема с обновлением сертификата и установщиками будет решена на этой неделе.
Утечка памяти, влияющая на Python 3.10, происходила при вызовах определенных функций, когда разработчики использовали Cython, надмножество Python с компилятором, которое облегчает написание расширений в коде C, взаимодействующих с кодом Python. Cython обеспечивает более высокую производительность, подобную C, для выполнения кода Python.
«Утечка памяти состояла из небольшого постоянного количества байтов в определенных вызовах функций из кода Cython», — объясняет Ланга. «Хотя в большинстве случаев это было не очень заметно, это сильно влияло на длительно работающие приложения и определенные модели использования».
Разработчик CPython Пабло Галиндо Сальгадо отмечает, что утечка памяти довольно сильно влияет на Cython при сообщении об ошибке, означающем, что «каждый вызов функции с использованием __Pyx_PyCFunction_FastCall приводит к утечке памяти в 3.10, что довольно плохо». В сообщениях об ошибках указывалось, что произошла утечка мегабайт памяти, поэтому стоит срочно исправить ошибку.
Разработчики CPython определили, что утечка происходила в PyEval_EvalFrameEx, который используется Cython, а не Python, но присутствует только в Python 3.10 и более ранних версиях.
Следующим выпуском обновлений Python 3.10 будет 3.10.3, и запланирован он на 4 апреля 2022 года.
Версия 3.11.0a4 является четвертой из семи запланированных альфа-версий для тестирования. Важные изменения для версии 3.11 включают улучшение скорости, упомянутые создателем Python Гвидо ван Россумом на конференции PyCon 2021. Сейчас ван Россум работает в Microsoft и хочет, чтобы Python 3.11 был в два раза быстрее, чем 3.10. Проект Faster CPython — это способ Microsoft вернуть сообщество Python, которое выросло с ростом популярности машинного обучения.
Тесты производительности PyPerformance, выполняемые проектом Faster CPython, показывают, что CPython 3.11 примерно на 19% быстрее по среднему геометрическому значению, чем 3.10.0.
Другие улучшения включают:
PEP 657 – Включение детализированных местоположений ошибок в трассировки
PEP 654 – Группы исключений и исключения
Версия 3.9.10 является девятым выпуском поддержки серии 3.9. Python 3.9.10 содержит 130 новых коммитов. Для macOS установщиком по умолчанию является двоичный файл Universal 2, совместимый с Intel и Apple Arm silicon.
Опубликовано 19.01.2022