$30 off During Our Annual Pro Sale. View Details »

Такое ли светлое будущее у Python?

Denis Anikin
September 28, 2023

Такое ли светлое будущее у Python?

Что стало причиной такой популярности Python? Простота или то, что третья версия поменяла язык целиком? И самое главное — куда язык идет?

Расскажу об изменениях Python: обозначу позицию языка в backend разработке, расскажу о новинках и порассуждаю, к чему язык и экосистема Python придут через несколько лет. Буду опираться на ту базу, которая закладывается в язык прямо сейчас, рассказывать про актуальные PEPы, вспоминать Language summit, доклады, статьи и экспертные мнения.

Denis Anikin

September 28, 2023
Tweet

More Decks by Denis Anikin

Other Decks in Programming

Transcript

  1. Денис Аникин
    https://xfenix.ru
    Такое ли светлое
    будущее у python?

    View Slide

  2. Денис Аникин
    2
    Что я делаю
    — работаю в Райфе
    — teamlead в 3 командах
    — community lead в Python Community
    — fullstack: typescript, python, devops
    — выступаю на конференциях и митапах
    https://xfenix.ru

    View Slide

  3. О чём будем говорить
    3
    —О прошлом языка
    —О том, где он сейчас
    —О том, куда он может прийти в будущем
    —Обсудим позиционирование
    —Важно: будем субъективны!
    —Важно: много будем говорить о настоящем и прошлом и мало о будущем

    View Slide

  4. Пару слов о субъективности
    4
    —У нас мало объективных данных
    —Любая попытка объективно оценить картину в головах многих
    обречена на провал
    —Обсуждая, мы создаём свою картину мира
    —Я не боюсь быть субъективным и вам предлагаю тоже

    View Slide

  5. Издалека:
    python версии 2.х
    5

    View Slide

  6. Почему именно 2.х?
    6
    —Это прошлое ещё кто-то помнит
    —Не так давно эта версия была ещё немного актуальна
    —С приходом 3.х поменялось многое, если не всё

    View Slide

  7. Что мы можем сказать о позиции python 2.x
    7
    —Удобный язык общего назначения
    —Батарейки: можно делать всё,
    —GIL
    —Основная популярность это 2000-2015 годы

    View Slide

  8. Для чего же
    применяли этот
    вариант языка?
    8

    View Slide

  9. И вот тут, неоднозначно
    9
    —Многие источники и моя память говорят, что для написания «скриптов»
    —Так же для веб разработки (django и flask довольно старые проекты)
    —Системного администрирования
    —Работы с данными (numpy и scipy это ооочень старые пакеты!)

    View Slide

  10. Что не так со
    «скриптингом»?
    10

    View Slide

  11. Скриптинг — не
    программирование
    11

    View Slide

  12. Простите, сэр! Это не вы
    сказали, случайно?

    View Slide

  13. Сколько же копий
    было сломано в таких
    спорах :)
    13

    View Slide

  14. Python версии 3.х
    14

    View Slide

  15. Начался с python 3k
    15

    View Slide

  16. Python 3k
    16
    —Не так то сильно изменил язык
    —Умолчальный юникод
    —Print функция
    —__annotations__ уже в языке
    —Медленнее, чем python 2.5 (который медленнее 2.7)

    View Slide

  17. Сейчас может
    показаться, что это
    странный релиз языка
    17

    View Slide

  18. Однако, по сути, он
    заложил фундамент
    дальнейшего роста
    18

    View Slide

  19. Текущее положение
    19

    View Slide

  20. Популярность
    20

    View Slide

  21. View Slide

  22. View Slide

  23. View Slide

  24. View Slide

  25. 25
    GitHut: а вот это интересно

    View Slide

  26. Язык очень популярен.
    Но в бекендах кто
    главный-то?
    26

    View Slide

  27. Я упоен
    backend
    перспективами
    python
    Python-хейтер

    View Slide

  28. У нас нет адекватного
    способа измерить это
    28

    View Slide

  29. Поэтому соберем
    свою картину мира!
    29

    View Slide

  30. View Slide

  31. Начнём с критики
    31

    View Slide

  32. Вот это поворот

    View Slide

  33. «Оно нужно только
    для data science, без
    него язык никому не
    нужен»
    33

    View Slide

  34. Это не проблема
    34
    —DS — крутая, если не ключевая область современности
    —DS — программисты (которые хорошо знают математику)
    —DS — программирование
    —DS — сложно

    View Slide

  35. «Оно медленное»
    35

    View Slide

  36. Бенчмарки
    Начинающие
    питонисты
    Я
    показываю
    как клёво
    писать
    CPU-bound
    код

    View Slide

  37. А мы куда-то опаздываем?
    37
    Ок, ок, я шучу, но всё таки:
    —Медленное в бенмарках. Это грустно, но бенчмарки != реальной нагрузке
    —CPU-bound давно оптимизирован более, чем двумя десятками способов (pypy, taichi,
    numba, nuitka, cython, pyston)
    —В нормальных современных бекендах мы почти всегда можем горизонтально
    масштабироваться. Более того: под это заточены современные облака
    —Для I/O bound у нас есть хоть и не идеальная, но очень работоспособная
    асинхронность

    View Slide

  38. Неожиданное открытие
    38
    —В подавляющем большинстве случаев, люди, «сбежавшие» на другой язык не
    попробовали ускорить код на python никаким из множества способов
    —Способов около 20!
    —Зачастую есть производительные аналоги пакетов в языке (pandas -> polars,
    uvicorn -> granian, fastapi -> (расскажу в другом докладе), pydantic v2 -> msgspec)
    —Питон просто медленный потому что медленный

    View Slide

  39. «Несерьезный язык»
    39

    View Slide

  40. Очень серъезные:
    Java
    GO
    Rust
    %your name it%
    Несерьёзный
    Python
    Программисты
    Серъезная
    задача

    View Slide

  41. Это популярный миф о языке, по сути
    41
    —Все, кто считают так, чаще всего не очень знакомы с языком или ушли от
    него по каким-то субъективным причинам (just for fun, например)
    —Миф базируется на питоне 2000х, который был не пределом мечтаний для
    крупных проектов
    —«Динамическая типизация» (аннотации!)
    —А что ещё?
    —В чём можно измерять серьезность языка?

    View Slide

  42. Python — язык для
    новичков
    42

    View Slide

  43. «Python — язык
    для новичков»
    Я больше 10 лет
    пишу на языке для
    новичков всякие
    серъезные штуки

    View Slide

  44. View Slide

  45. Python —
    простой язык
    45

    View Slide

  46. View Slide

  47. Python — простой и это плохо?
    47
    Это классические тейки ещё из прошлого (вспомним «фрактал плохого дизайна»)
    —Низкий порог входа привлекает много непрофессионалов
    —Много непрофессионалов == плохой код
    —Общее низкое качество проектов
    —Низкое качество == нельзя расти как инженер, мало платят

    View Slide

  48. Python простой и это хорошо!
    48
    —Больше людей больше проектов
    —Больше проектов — больше возможностей роста
    —Больше возможностей — больше денег и шансов расти как инженер

    View Slide

  49. Python — вообще не простой, это зловредный миф
    49
    — Питон требует детального освоения
    — В питоне куча элементов функционального программирования
    — Аннотации типов везде и они сложные! Типы != аннотации типов и типы
    непростые!
    — Язык внутри устроен сложно
    — Около 100 дандер методов (каждый из которых входит в разные протоколы и с
    ними связано куча поведения «по договоренности»)
    — Метаклассы…
    — Рефлексия и интроспекция
    — Асинхронность
    — Зависимости
    — Пути
    — exceptions

    View Slide

  50. View Slide

  51. Динамическая
    типизация!
    51

    View Slide

  52. Решение —
    аннотации типов!
    52

    View Slide

  53. AsyncIO
    53

    View Slide

  54. Это я тихо обожаю
    asyncio
    Разные известные
    питонисты

    View Slide

  55. О претензиях к asyncio
    55
    —Медленно! (по ряду тестов и сравнений, аналогичный синхронный код
    работает быстрее, но, естественно, в плане утилизации ресурсов
    проигрывает)
    —Подставлено сбоку
    —Нет нативного io_uring (асинхронной работы с файлами)
    —Сложно
    —Недостаточно удобно (gather, taskgroup, подводные камни create_task,
    разные другие части asyncio)
    —asyncio.sleep(0)
    —Хотелось бы супервизоры…

    View Slide

  56. 56
    Некоторые считают, что это asyncio

    View Slide

  57. Asyncio —
    хорошая библиотека
    57

    View Slide

  58. Столпы
    современной
    популярности языка
    58

    View Slide

  59. Django
    59

    View Slide

  60. View Slide

  61. Django в истории python
    61
    —Несмотря на критику, фундаментальный фреймворк, известный далеко за
    рамками экосистемы
    —На нём написаны многие десятки, а то и сотни тысяч систем, включая такие
    важные как sentry
    —Покрывает ниши MPA (корпоративные сайты, новостные сайты и т.п.), админок,
    прототипов и, частично, заходит на рынок микросервисов (Django ninja)
    —Появился ещё в 2004 и дал серьезный рост популярности python в бекендах

    View Slide

  62. FastAPI
    62

    View Slide

  63. Сверхновая в мире python на рубеже 2018/2019
    63
    Субъективно, как и многое другое, но всё же
    —Извлёк коллосальную пользу из аннотаций в рантайме, показав «так
    тоже можно!»
    —Принес DI, про который писали на stackoverflow/quorra буквально «нам
    в питоне это вообще не нужно!»
    —DI + DIP -> SOLID

    View Slide

  64. Resilience
    64

    View Slide

  65. View Slide

  66. Наш ответ
    66
    На вопрос, который нам никто не задавал (не на всё)
    —Backoff (retry)
    —Pybreaker (circuitbreaker)
    —Ratelimit
    —AsyncIO (gather, taskgroup, asyncio.timeout)
    —Bulkhead (???)

    View Slide

  67. EDA
    67

    View Slide

  68. Много инструментов
    68
    —Недавно появился Propan
    —Faust
    —AsyncAPI

    View Slide

  69. Хочется добавить про
    новичка — litestar
    69

    View Slide

  70. Аннотации типов
    70

    View Slide

  71. Чем хороши аннотации?
    71
    —Значительно увеличивают надежность
    —Снижают потребность в тестах
    —Gradual typing позволяет писать минимум
    —Мы можем извлекать пользу и на статическом этапе и на
    динамическом (fastapi, pydantic, msgspec, beartype, swagger)
    —Модуль typing прекрасен!
    —(слон в комнате) Нет доказательств, что статическая типизация
    превосходит аннотации или аннотации значительно проигрывают
    статической типизации

    View Slide

  72. Поговорим о важных
    вещах из прошлых
    language summit
    72

    View Slide

  73. Cinder
    73

    View Slide

  74. HPy
    74

    View Slide

  75. Subinterpreters
    75

    View Slide

  76. Это любопытный проект
    76
    —Затаскивает CSP в Python
    —В 3.12 можно будет делать отдельный GIL для каждого инстанса
    субинтерпретатора
    —Однако: нужно ли будет когда появится nogil?

    View Slide

  77. Making cpython faster
    77

    View Slide

  78. Что это за проект?
    78
    —Гвидо получил финансирование от Microsoft в 2019 году
    —И организовал команду из ключевых «игроков», для ускорения
    python
    —План прост: ускорять 4 релиза каждый раз на 50% и это даст
    ускорение в 5 раз
    —Пути достижения сложны: это более адаптивный байткод, это
    оптимизации исполнения, это JIT
    —Много ли это или мало?
    —Удалось ли с 3.10 достичь планов ускорения в 2 раза?

    View Slide

  79. NoGIL
    79

    View Slide

  80. Это фундаментально
    80
    —Питон лишится GIL в течении 5+ лет
    —Наконец-то можно будет параллельно запускать треды
    —Даст замедление в однопоточности…
    —Мнение 1: нужно ли в 2023 году и далее?
    —Мнение 2: это будущий прорыв

    View Slide

  81. Так что же ждёт нас
    в будущем?
    81

    View Slide

  82. Все звёзды:
    Шок! Ванга предсказала, что
    питон скоро переломит…
    Cool:
    Срочная новость. Ванга
    увидела в питонистах
    основной грех программи…
    Спидинфо 24:
    Провал! Гвидо предвидел
    обрыв для языка и
    поообщался с Вангой…
    Бомбоустойчивость лошади:
    Что? Ванга говорит, что питон —
    главный в пету…
    Теория Продольного Качения 24:
    Срочная новость. Ванга увидела в
    питонистах основной грех
    программи…
    Куриные Утехи:
    Провал! Пообщались с Вангой и
    питон НЕ ускорился в 5 раз. Как
    ускорить с помощью скотча?

    View Slide

  83. Гадание —
    вещь неблагодарная
    83

    View Slide

  84. Я:
    *пытаюсь съехать*
    Зрители:
    пожалуйста, давай
    рассказывай

    View Slide

  85. Базовый сценарий
    85
    —Все будет +- так же: стандарт де-факто в DS, популярность в бекендах,
    огромная популярность в devops
    —Проекты улучшения дадут свои плоды: популярность продолжит расти, т.к.
    больше задач будет решаться языком
    —GO нам не конкурент, а коллега: на GO будет писаться то, что не идеально
    пишется на python (cpu-bound)
    —JS, Ruby, PHP, Perl — где-то далеко позади на бекенде

    View Slide

  86. Негативный сценарий
    86
    —Питон перегрузится функциями и все поймут, что язык не просто не
    простой, он нереально сложный, запутанный и багованый
    —Ускорение языка не даст однозначного ускорения во всех ключевых
    сценариях, а местами даже даст замедление
    —NoGIL вызовет раскол сообщества из-за 2 несовместимых версий
    языка
    —Вылезет дисраптор (например, Mojo)
    —Все поверят, что аннотации плохой инструмент, проблемы typing и
    mypy станут серьезным аргументом в пользу этого мнения
    —Язык утеряет «веру» в себя
    —DS уйдут к другому языку
    —GO вместо питона в бекендах

    View Slide

  87. Позитивный сценарий
    87
    —Питон — язык номер 1 в бекендах
    —Стандарт в DS, конкурентов нет даже близко
    —Проект ускорения python даст прорыв, сравнимый с JS
    —На making cpython faster не остановятся
    —Возможно, перепишут питон с нуля
    —Python 4.0 всё таки станет реальностью
    —Появится AOT компилируемый python (нужен ли?)
    —Появится статически типизированный python (typescript?)
    —Возможно, появится виртуальная машина питона со статической типизаций
    —Питон станет главным языком на планете без всяких «но»
    —Разве у вас есть хоть какая-то альтернатива?

    View Slide

  88. Давайте выберем стул?

    View Slide

  89. Ссылки
    89
    —https://habr.com/ru/articles/142140/
    —https://docs.python.org/3.0/whatsnew/3.0.html
    —https://litestar.dev/
    —https://github.com/jcrist/msgspec
    —https://github.com/taichi-dev/taichi

    View Slide

  90. Лайко-попрошайка
    90
    Как вы это любите…

    View Slide

  91. Денис Аникин
    https://xfenix.ru
    https://github.com/xfenix/
    Вопросы?
    Поставьте лайк куда-
    нибудь на гитхабе,
    пожалуйста

    View Slide