Привет, я Михаил Корнеев, вместе с Григорием Петровым и другими ребятами из сообщества мы ведем подкаст о Python на русском. В прошлую пятницу мы собрались в онлайне обсудить, что запомнилось в уходящем году.  

Это — текстовая выжимка из выпуска. Если вам удобнее слушать и иногда смотреть, это можно сделать на ютубе. Если только слушать, подкаст также можно найти на популярных платформах: Apple Podcasts, Spotify, Яндекс.Музыка.

Есть тренд на ускорение Python, но

Гвидо ван Россум рассказал, что он с товарищами начал думать, как ускорить Python. В python 3.12 будет pre-JIT, в 3.13 будет более обширный JIT.

Но есть вопросики. Если втаскивать эти фичи по-взрослому, можно столкнуться с проблемами обратной совместимости. Едва ли сообщество и core-разработчики хотят повторения всей той драмы, которая была при переходе с двойки на тройку. 

Еще одна часть тренда на ускорение — избавление от GIL. Но кажется проблема в том, что в этом направлении есть интересные эксперименты, но нет четкого плана внедрения.

Мы стали на шаг ближе к тому, чтобы уйти от GIL

30 лет назад, на заре Python, казалось, что не получится сделать высокоуровневый язык программирования с виртуальной машиной, в которой был бы быстрый garbage collector, который бы не тормозил многопоточность из-за синхронизации структур данных. 

В конце 2021 года появился nogil — форк Python с системой мультитрединга, в которой получилось отказаться от GIL без потери производительности. Эта неофициальная имплементация показала, что задача решаема. Более того, на тестах для всяких околовеб историй прибавка производительности составляла 10-20%. Репозиторий оставался активен и в 2022, работа в нем ведется.

Много лет у Steering Council была примерно следующая позиция: если кто-нибудь принесет версию Python без GIL, которая будет работать не медленнее, чем текущая версия, то мы выпилим GIL. Конечно, просто так GIL не выпилят. В начале это скорее всего будет флаг компиляции. Потом флаг интерпретатор. А через много лет, если экосистема нормально перенесет отсутствие GIL’a, могут сделать поведением по умолчанию. Что-то похожее было в Node.js, когда туда имплантировали ECMAScript modules: небольшими шагами за 10 лет пришли к тому, что подавляющее большинство библиотек и фреймворков поддерживало ESM из коробки, и просто выключили флаг.

Будем надеяться, что эта тема не остановится, потому что все в общем согласны, что быстрее — это хорошо. 

Релиз Python 3.11 стримили в прямом эфире

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

Сидишь на YouTube, maintener’ы в прямом эфире за бокалом пива рассказывают и показывают, как делают релиз. Это круто! 

Из MacOS убрали Python 2.7 

Ушла эпоха. Пару десятков лет назад, когда Python еще не был таким распространенным, то, что Apple добавили его в систему, помогло его популярности. Понятно, что это был только один из множества факторов, но тем не менее.

Со временем встроенный в MacOS Python стал как трехколесный велосипед: люди уже научились ездить, и маленькие колесики только мешают. Но когда ты даешь технологию в комплекте с операционной системой, на нее начинают рассчитывать другие люди. И ты не можешь делать большие обновления, не сломав кому-то обратную совместимость. До сих пор куча программ рассчитывает, что в MacOS есть Python. Поэтому он будет доступен для нужд операционной системы и ее софта, но недоступен из командной строки. Пользователь же будет ставить отдельный user mode Python в отдельной песочнице — как это сейчас все и делают. 

Что же, мы откинули дополнительные колеса трехколесного велосипеда. И стало только лучше.

В JetBrains Python Developer Survey включили вопрос про менеджмент зависимостей

И мы видим интересную статистику про package-менеджеры. Подавляющее большинство использует «голый» pip. Без особых изысков. 

Полное исследование https://lp.jetbrains.com/python-developers-survey-2021/#PythonPackaging
Полное исследование https://lp.jetbrains.com/python-developers-survey-2021/#PythonPackaging

Интересно, что в вопросе про менеджмент зависимостей нет явного лидера: poetry — 27%, pipenv — 26%, pip-tools — 26%. Это круто. Значит, идет активная конкуренция, и каждый будет внедрять какие-то новые штуки, чтобы выбрали его. 

Полное исследование https://lp.jetbrains.com/python-developers-survey-2021/#PythonPackaging
Полное исследование https://lp.jetbrains.com/python-developers-survey-2021/#PythonPackaging

Что еще запомнилось

Black вышел из беты. Кажется, куча людей его уже использовала, забив на статус беты. Очень полезная штука, если все в команде придерживаются одного стиля. Это существенно облегчает чтение чужого кода. С другой стороны, если у тебя или в команде уже сложились предпочтения, где-то расходящиеся с PEP8, «делать как все» может быть тяжело.

Asyncio постоянно допиливают. В 3.11 добавили exception group и task group. Приятно видеть эволюционное развитие.

Что еще запомнилось, одной строкой:

  • PEP 581, работу с issues перенесли на Github.

  • Анонсировали PyScript — возможность выполнять Python в браузере.

  • Обратно несовместимое изменение в Python, чтобы избежать ValueError: Exceeds the limit (4300) for integer string conversion.

  • Релиз Django 4.1.

  • Релиз Pandas 1.5.0.

Наш подкаст продолжает выходить, несмотря на

В этом году запись Moscow Python Podcast переехала с уютной московской кухни в онлайн. Бывали периоды затишья, огромное спасибо Злате Обуховской, Илье Лебедеву и Валентину Домбровскому, что продолжали драйвить историю. 

В 2022 мы остановились на отметке в 159 выпусков. Все их можно найти тут

В 2023 планируем выходить пару раз в месяц и добавить новостные выпуски. 

Пара мыслей о том, что будет дальше

Этот блок создан на основе вопросов слушателей, подключившихся к записи в прямом эфире. 

Будет ли Python 4. На самом деле, как пользователи языка, мы сами не хотим, чтобы была четвертая версия. Потому что она будет обратно несовместимой с третьей. И нам придется мигрировать свою кодовою базу с третьей на четвёртую. А кто помнит переход с 2.7 на 3, тот в цирке не смеется.

Возможно, когда-то в языке назреют критические изменения, которые будут того стоить. Но не в ближайшее время. Да и сам Гвидо ван Россум говорит, что за Python 3.11 будет 3.12, потом 3.13, 3.14, а там 3.99 и 3.100.  

Могут ли какие-то фреймворки взлететь в следующем году. Кажется, чего-то нового на слуху нет. Все фреймворки, которые имеют хотя бы 2-3% в исследовании JetBrains, довольно старые. Конечно, появляются и новые фреймворки, но они сталкиваются с проблемой курицы и яйца. Чтобы стать популярными и юзабельным, им надо собрать тысячи и десятки тысяч пользователей. А как собрать вокруг себя столько энтузиастов, когда Django, Flask и FastAPI лидируют с огромным отрывом?

Полное исследование https://lp.jetbrains.com/python-developers-survey-2021/#FrameworksLibraries
Полное исследование https://lp.jetbrains.com/python-developers-survey-2021/#FrameworksLibraries

Пока активнее всего аудиторию набирает именно FastAPI (3-е место в исследовании). До его появления Tornado (4-е место в исследовании) было единственным способом сделать быструю асинхронную систему, когда у тебя основная нагрузка идёт на Input и Output. Думаю, FastAPI продолжит отъедать долю Tornado для таких задач.

С Новым годом! И услышимся в 2023.

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


  1. stroitskiy
    29.12.2022 12:52
    +1

    Отлично, спасибо большое за интересный обзор!!


  1. domix32
    29.12.2022 13:16

    Python Script

    А есть текстом больше деталей про концепт этого? Насколько мне известно уже есть как минимум скомпиленный CPython (тот же jupyter) для браузера и реимплементация Python3 на Rust, которая тоже запускается в браузере.


    1. GoldGoblin
      29.12.2022 13:29
      +2

      1. domix32
        29.12.2022 20:29
        +2

        То бишь официальная реинкарнация Brython


  1. DieSlogan
    29.12.2022 13:20
    -1

    Ребята, ничего лично не имею против Питона. Абсолютно.

    Но почему мне для сборки прошивки в embedded устройстве, написанной на C и ARM Assembler, нужен интерпретатор Питона? Я открываю IDE для CLang и там Питон во все поля и всё подтормаживает. Когда так стало?


    1. masai
      29.12.2022 15:42
      +1

      Это вопрос к разработчикам этого конкретного проекта, которые решили использовать Python для скриптов или какой-то инструмент на python (например, Conan). И использовали неправильно, раз есть подтормаживания.

      Странный вопрос. Это как если бы я написал, что ничего не имею против C, но посетовал, что прошивка на одном из моих устройств глючная.


      1. DieSlogan
        29.12.2022 18:44
        -1

        Возможно я неправильно выразился. Речь идёт о тренде.

        Вы открываете настойки IDE CLion и там настраиваете Python.

        Сейчас все правильные пацаны собирают питоном: https://scons.org/


        1. theLastOfCats
          30.12.2022 18:59

          В этой статье все объясняется

          https://tonsky.me/blog/python-build/


    1. domix32
      29.12.2022 20:31
      +2

      Потому что скрипты на баше писать и поддерживать больно. Да ещё и у каждой ОС по своему диалекту. А питон точно либо второй либо третий.


      1. DieSlogan
        29.12.2022 23:15

        MSBuild, Gradle, make в конце концов


        1. domix32
          30.12.2022 00:38
          +3

          MSBuild на маках/линуксах звучит как что-то несуществующее, но это не точно
          gradle включает в себя килограмы джавы, что многих не сильно впечатляет. И где это видано, чтобы плюсы джавой собирали. Ну и с пакетными менеджерами в плюсах тоже пока не слишком привыкли работать. Оно где-то рядом с бизонами/мезонами и прочими и имеет кое какую адаптацию, но всё равно на порядок реже чем тот же бизон. На FreeBSD интересно как у них там это живёт.
          make/cmake не сильно далеко ушли от bash - те же сотни макроподстановок через тысячи магических переменных с не самыми адекватными способами ассигнований значений, объявленных где-то на 8 папок выше пополам с glob синтаксисом - дебажить их то ещё удовольствие. Да и PEP для таких штук отсутвует, поэтому все проекты собраны кто в лес кто по дрова и никто не знает как сделать чтобы стало хорошо и удобно.

          А питон что - хочешь параметров скрипту - держи argparse, хочешь пакеты натягать - вот те pip c колёсами, вот те urllib, чтобы тянуть откуда хочешь, вот те asyncio чтобы все это дело на сабтаски разделить асинхронные и собирать параллельно код с ресурсами, вот те словари, вот те человеческие массивы и списки. Это вам не перловое %#^!%&@#%!%^$ читать, тут все человекопонятно. И скобки какие нравится ставь, а не как в баше - хочу выполняю, хочу экранирую, хочу ещё какой магии ворочу. И циклы с условиями как у людей и даже тесты можно писать не отходя от кассы, если очень хочется.


          1. DieSlogan
            30.12.2022 01:56

            MSBuild работает на mac/linux, как и dotNET последних версий


            1. NNikolay
              30.12.2022 05:10
              +1

              А какие у него преимущества перед питоном?


              1. theLastOfCats
                30.12.2022 19:00

                Навскидку:

                • Статическая типизация

                • JIT

                • Single binary


                1. masai
                  30.12.2022 19:32

                  С точки зрения пользователя это всё не очень-то важно.

                  Статическая типизация и single binary — это удобно, но это лишь немного упрощает установку, а не использование.

                  JIT скриптам для сборки не очень-то нужен. Большую часть времени занимает сама сборка.

                  Впрочем, довольно странно сравнивать MSBuild от чистый Python. Первое — это система сборки, а второе — язык программирования. Если выбор между написанием скрипта руками и MSBuild, то для проекта больше пары файлов я б предпочёл MSBuild, который что-то уже умеет делать сам.

                  Но MSBuild — это очень низкоуровневая штука. Вряд ли кто-то пишет здоровенные XML с описанием проекта руками. Гораздо удобнее сделать инструмент, который будет по более высокоуровневому описанию генерировать проект для MSBuild.

                  По этой же причине странно сравнивать make и cmake. Первый низкоуровневый, а второй высокоуровневый. CMake просто генерирует код для make, Ninja (мой любимый вариант) или того же MSBuild.

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

                  Потому и появились SCons (хотя я его редко вижу) и Conan (очень популярен, но это не совсем система сборки). В Bazel сделали чуть интереснее. Там в качестве DSL используется не Python, а его безопасное подмножество — Starlark.

                  У такого подхода есть недостатки. В общем случае декларативность удобнее, чем императивность. Но тут много зависит от проекта, так что подход вполне имеет право на существование.


    1. federix
      30.12.2022 10:47

      Банальный скриптиг. В том же gdb есть давно. Если есть время можете сразу на ассемблере переписать у разработчиков очевидно его не было.


  1. nikolay_karelin
    29.12.2022 14:12
    +1

    Особо суровые олды (например Бобук) застали еще и переход с версии 1.5 на 2...

    Говорят это было еще веселее. Пользовательская база правда была сильно меньше.


    1. ValentinDom
      30.12.2022 17:30
      +2

      Ага. По-моему, он даже рассказывал об этом в нашем подкасте, когда он был ещё Python Junior Podcast: https://www.youtube.com/watch?v=A8CM0ufpJds


      1. nikolay_karelin
        31.12.2022 19:02

        О, круто, спасибо Валентин!


  1. Sergaza
    31.12.2022 19:17

    «Что же, мы откинули дополнительные колеса трехколесного велосипеда»

    Интересно, а люди, которые используют такие выражения, понимают, что оторвав хотя бы одно колесо у трёхколесного велосипеда -- можно вообще никуда не уехать? Это у двухколёсного велосипеда с двумя дополнительными маленькими колёсами на задней оси можно хоть что-то оторвать для ускорения.