Предновогодний привет, Хабр! Ну что, самое время подводить итоги и мечтать о прекрасном? А так как у нас стартует год Питона Змеи, поговорим про Python.

Ниже собрали мнения экспертов цифровой экосистемы МТС: обсудили, чем был интересен релиз 3.13 и чего ждать от 3.14, какие у Python перспективы, а с чем возникают сложности. По традиции ждем вас в комментариях, присоединяйтесь к обсуждению. И с наступающим!

Что нам готовит релиз 3.13

В прошлом году был представлен новый релиз Python 3.13 и уже успел выйти 3.13.1. Давайте посмотрим, что ждет нас дальше.

Экспериментальный JIT-компилятор

В Python 3.13 JIT-компилятор использует многоуровневую архитектуру:

  • Tier 1: байт-код, представляющий начальную фазу выполнения. Уже получил улучшения производительности.

  • Tier 2: часто выполняемый байт-код (hot code) переводится во внутреннее промежуточное представление (IR).

  • Optimization Phase: перед тем как IR уровня 2 интерпретируется или преобразуется в машинный код, применяются оптимизации — распространение констант и устранение мертвого кода.

  • Tier 2 Interpreter: используется в основном для отладки на ранних стадиях оптимизации. Его можно включить с помощью --enable-experimental-jit=interpreter.

  • JIT Compilation: когда JIT включен, оптимизированный IR уровня 2 переводится в машинный код, который выполняется напрямую CPU.

Чтобы включить поддержку JIT-компилятора в Python 3.13, при сборке нужно указать флаг --enable-experimental-jit. Его доступные значения:

  • yes (по умолчанию): включает сборку с JIT. Во время выполнения JIT можно отключить, используя переменную окружения PYTHON_JIT=0. Для Windows используется опция --experimental-jit.

  • yes-off: компилирует с поддержкой JIT, но оставляет его отключенным по умолчанию. Чтобы включить JIT, используйте PYTHON_JIT=1. Для Windows — опция --experimental-jit-off.

  • interpreter: включает интерпретатор Tier 2, но отключает JIT. Предназначено, по всей видимости, для отладки. Для Windows — опция --experimental-jit-interpreter.

  • no: то же самое, что не устанавливать флаг при сборке.

Недавно появилась возможность включить экспериментальную фичу при помощи Conda (conda install python-jit), но только для x86_64.

Экспериментальное отключение GIL

Введена экспериментальная возможность отключения GIL при сборке с флагом --without-gil. Нововведением можно управлять через переменную окружения PYTHON_GIL. До применения в продакшен-системах еще далеко (а код потребует больше внимательности от разработчика), но озвучены оптимистичные планы. Также есть возможность воспользоваться сборкой из conda-forge — conda install python-freethreading.

Что было еще интересного

  1. Изменение работы функции locals().Поведение locals() изменено для оптимизированных областей видимости.

  2. Включение библиотеки mimalloc. В состав по умолчанию включена измененная версия mimalloc с системой распределения памяти, открытой Microsoft и демонстрирующей хорошую производительность. Она опциональна, но включена, если поддерживается платформой, и обязательна при сборке «без GIL».

  3. Оптимизация docstring. В Python 3.13 строка документации была оптимизирована с точки зрения использования памяти. Ведущие пробелы теперь удаляются — это уменьшает общий объем используемой памяти и размер .pyc-файлов. Может показаться, что изменение незначительное. Но на проектах с обширными строками документации оно поможет заметно сэкономить память.

  4. Изменения в модулях:

    • в dbm появился новый бэкенд dbm.sqlite3, который по умолчанию использует SQLite для работы с новыми файлами;

    • os теперь включает функции для работы с таймером через файловые дескрипторы timerfd;

    • в copy появилась новая функция copy.replace();

    • для random реализован интерфейс командной строки.

  5. Обновления в системе типов:

    • Добавлена поддержка указания значений по умолчанию для параметров типов — typing.TypeVar, typing.ParamSpec и typing.TypeVarTuple. Например: 'T = TypeVar("T", default=int)'.

    • Введена новая аннотация typing.TypeIs. Она уточняет типы, а еще — интуитивно понятнее, чем typing.TypeGuard.

    • Можно использовать аннотацию typing.ReadOnly для обозначения элементов TypeDicts, предназначенных только для чтения.

  6. Удаление устаревших модулей. Из стандартной библиотеки исключены: aifc, audioop, chunk, cgi, cgitb, crypt, imghdr, mailcap, msilib, nis, nntplib, ossaudiodev, pipes, sndhdr, spwd, sunau, telnetlib, uu, xdrlib и lib2to3, объявленные устаревшими еще в 3.11.

  7. Улучшенный интерактивный интерпретатор REPL. Поддерживает многострочное редактирование, сохранение и просмотр истории, цветовое оформление трассировок. Включает более удобный режим работы с большими блоками кода и интерактивную справку.

  8. Работа с платформами:

    • Прекращена поддержка macOS версий 10.9–10.12.

    • Введена начальная поддержка iOS и Android, классифицированная как Tier 3. На этом уровне обеспечивается стабильная сборка и сопровождение, но связанные с платформой сбои не блокируют выпуск релиза.

    • Поддержка wasm32-wasi переведена на Tier 2. Сбои блокируют релиз и исправляются (или откатываются вызывающие их изменения) в течение 24 часов. Официальная поддержка wasm32-emscripten прекращена.

Сразу после релиза началось альфа-тестирование Python 3.14. Следим за новостями!

Чего ждать от Python в новом году

От новой версии Python в 2025-м мы будем ждать того же, что и в последние три года, — ускорения, No GIL и полноценного JIT-компилятора. В Python каждый год завозят возможности для enterprise-разработки — это и описание входных типов c версии 3.5, и Data Classes с 3.7. Поэтому он все больше появляется на продакшне, писать сложные программы в командной разработке теперь гораздо удобнее.

А вот проект Faster CPython слегка забуксовал. Core-разработчики столкнулись с большим количеством сложностей и при реализации JIT-компилятора в C-API. Нужно не только все ускорить, но и ничего не поломать.

Так что же нам принесет Python 3.14 в 2025 году? Вот основные улучшения:

  • Трассирующий JIT, который будет затрагивать несколько инструкций подряд. Это следующий шаг по внедрению JIT-компилятора в Python. Другими словами, вместо большого количества управляющих команд в предыдущих версиях Python создаются суперинструкции. Интерпретатор сможет снизить объем работы и быстрее выполнять код.

  • Ленивое вычисление аннотаций и аннотации по требованию. Аннотации — это только подсказки, и интерпретатора они не интересуют, но все же они давали нагрузку при вычислениях. В мае 2023 года наконец договорились, как с ними правильно работать: с версии 3.14 аннотации будут вычисляться только по требованию. То есть мы сможем использовать их без лишнего оверхеда и необходимости в forward‑declaration.

  • Asyncio станет на 10% быстрее. Это позволит уменьшить потребление памяти.

  • Чтение небольших файлов ускорится на 15%. Речь о файлах, которые умещаются в кеше операционной системы.

  • Ускорится работа встроенных функций min и max. Это связано с переходом к новому быстрому методу vectorcall вместо старого tp_call.

  • Поддержка рекурсивного обхода в функциях: Path.copy(), Path.copy_into(), Path.move(), Path.move_into() и Path.scandir().

Будут и другие улучшения, которые уже очень не терпится протестировать.

Какие у Python перспективы и почему его вообще стоит осваивать

Python — высокоуровневый язык программирования общего назначения. Все больше людей котрибьютят в его экосистему:

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

  1. ML. Молодые ученые всего мира обмениваются jupyter notebook — это уже стало промышленным стандартом.

  2. Data Scientist. Используют Python благодаря огромному количеству высокопроизводительных библиотек.

  3. Разработка backend-сервисов. В Python есть уже несколько замечательных проектов фреймворков микросервисов — это и FastAPI, и Litestar, собравшие много тысяч звезд на GitHub, и фреймворк сервисов Django.

На мой взгляд, Python — самый перспективный ЯП. К тому же это язык высокого уровня, так что осваивать его одно удовольствие. Он продолжит завоевывать сердца молодых ученых и разработчиков, в том числе благодаря таким преимуществам:

  • Легкость чтения. В синтаксисе Python уже заложена простота и читабельность кода. Это делает язык подходящим для быстрой и эффективной разработки.

  • Впечатляющее количество модулей, библиотек и фреймворков. Многие из них разработаны крупными корпорациями, в которые инвестированы огромные финансовые и человеческие ресурсы.

  • Легкость входа и передачи.

Выше я перечислила преимущества Python для разработчиков, но на популярность ЯП еще влияет бизнес. Убеждена, что Python — лучший друг бизнеса, ведь он выгоден для большинства случаев. Один Python-разработчик пишет фичи с такой же скоростью, что и 3–4 Java-разработчика. Конечно, на Python пока не будешь раздавать видеочанки для стриминговых сервисов, но с 90% задач он справляется.

Python не собирается терять позиции в мире ИИ и машинного обучения. Библиотеки вроде TensorFlow, PyTorch и Scikit-learn продолжают развиваться и обновляться и помогают разработчикам создавать более хитроумные модели. В ближайшие годы мы увидим, как Python будет использоваться еще шире в предсказательной аналитике, автоматизации с помощью ИИ и обработке естественного языка.

При этом Python по-прежнему остается незаменимым инструментом в анализе данных. Библиотеки Pandas и NumPy совершенствуются и предлагают сложные возможности для анализа и обработки данных. В 2025 году Python будет применяться в анализе медицинских данных в здравоохранении, прогнозировании рыночных тенденций в финансах и не только.

Библиотеки, такие как Qiskit, делают квантовое программирование доступным и открывают новые возможности в криптографии и вычислительной химии. Этот ЯП участвует и в развитии IoT: MicroPython и CircuitPython помогают программировать микроконтроллеры, разрабатываются эффективные и масштабируемые системы. Python применяется в умных домах, промышленной автоматизации и носимых устройствах.

В какие новые сферы придет Python

Python занял первое место по популярности по версии GitHub в 2024 году. И хотя может показаться, что дальше расти некуда, потенциал все еще огромен. Как эксперт в машинном обучении, отмечу перспективные направления применения Python в этой области.

Python стал стандартом де-факто для разработки ML-решений, и в 2025 году сфера его применения будет расширяться вместе с развитием машинного обучения. Python и Machine Learning уже используются во многих областях. И вот ключевые индустрии, где их влияние может значительно вырасти:

Медицина. Сегодня Python применяется в решениях для диагностики и лечения: от анализа медицинских данных и изображений до прогнозных моделей на компьютерах врачей. Открываются возможности для масштабирования уже имеющихся решений, особенно перспективна область самодиагностики. Яркий пример — приложение для анализа фотографий родинок и выявления меланом, применяющее сверточную нейронную сеть на Python-фреймворках. Думаю, в 2025 году появится еще больше решений для самодиагностики с использованием машинного обучения на Python.

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

Робототехника. Сейчас разработка гуманоидных роботов — глобальный тренд. Практически во всех используются нейросетевые технологии. Развивается и направление складских роботов. В основе передовых решений лежат облачные вычисления на мощных компьютерах и сетевое управление каждым. Значительная часть кода, отвечающего за алгоритмы и навигацию, написана на Python. Эта сфера тесно связана со следующей.

Edge-устройства. Перенос вычислений из облака на носимые устройства развивается уже несколько лет и продолжает набирать обороты. Все больше вычислений будет выполняться непосредственно на устройствах. Этому способствуют глобальная оптимизация Python, его ускорение в новых версиях, совершенствование существующих библиотек и алгоритмов. Важно понимать, что под капотом Python часто работает эффективный код на других языках программирования. Так реализованы Scikit-learn, NumPy и так далее. Поэтому потенциал применения Python растет с появлением новых подобных решений. Для вычислений на устройствах уже есть специальные библиотеки — например, для носимых устройств и роботов MicroPython, работающая на низком программном уровне.

Современные генеративные модели. Например, проект llama.cpp позволяет запускать большие языковые модели даже на CPU.

Лидерство Python на GitHub влияет и на развитие больших языковых моделей. Чем популярнее ЯП, тем больше проектов на нем создается. Значит, данных для обучения LLM-моделей программированию тоже станет больше и генерируемый ими код будет качественнее.

МТС уже выпустила в Open Source генеративные модели для кода. В будущем их будет проще запускать на локальных компьютерах.

По всем этим причинам Python по-прежнему остается перспективным. Осваивайте ЯП в 2025-м и следите за его применением в Machine Learning.

Какие сложности при работе с Python есть сейчас и решат ли их в новом году

Несмотря на огромную популярность, у Python есть проблемы — разработчики постоянно с ними сталкиваются. Основные из них:

Невысокая производительность по сравнению с компилируемыми языками. Это связано с тем, что Python — интерпретируемый ЯП. Он медленнее в некоторых задачах, особенно там, где нужны интенсивные вычисления. Сейчас для критически важных участков кода разработчики могут использовать библиотеки, написанные на более быстрых языках — C (C++), Rust. Ждем, что будущие версии Python оптимизируют для повышения скорости выполнения.

Глобальная блокировка интерпретатора (GIL). GIL ограничивает возможности многопоточного выполнения в Python. Это может быть проблемой для приложений, которые требуют интенсивной многопоточности. Сейчас ведутся работы над ее улучшением в Python, хотя полное устранение GIL остается сложной задачей. Сборку без блокировки в экспериментальном режиме предложат в Python 3.13 (уже доступно) и 3.14.

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

Ограниченные возможности для мобильной разработки. Python не основной язык для этой задачи, но сейчас развиваются проекты, которые позволяют создавать мобильные приложения на Python — например, BeeWare, PySide. Так что, возможно, ситуация изменится.

На этом все. Спасибо, что читали! В новом году хочется пожелать вам интересных задач, закрытых спринтов, отсутствия багов, быстрого Python «из коробки». Всех обняли!

Комментарии (5)


  1. fgeo
    31.12.2024 13:17

    Уже не первый раз замечаю, что использование jupiter вместо jupyter является отличным маркером некомпетентности.


    1. MaximML
      31.12.2024 13:17

      Наверное опечатка. Статью подготовило много людей из разной предметной области. Поэтому довольно широкий взгляд на применение Python


  1. Maydyk
    31.12.2024 13:17

    Visual Basic у которого получилось :-)


    1. Q3_Results
      31.12.2024 13:17

      Читать эксель-файлы питоном вместо VB - одно удовольствие


  1. ritorichesky_echpochmak
    31.12.2024 13:17

    BeeWare, PySide

    и Kivy в ту же степь... но вот если бы бидонисты уделяли немного больше внимания мобилкам, он бы отлично попёр ту же жабу оттуда. Но там всё ещё всё сильно сыровато и обмазано жирным Qt покрытым проблемами лицензионного плана