Питонические атаки
1.3K subscribers
172 photos
3 videos
1 file
451 links
Всяческие заметки про программирование на Python и другие весёлые истории.
Download Telegram
Ещё один прикол в 3.12 — встроенная функция sum() теперь использует специальный алгоритм для сложения чисел с плавающей точкой с минимальной потерей точности (прочитать про алгоритм можно на вики).

Раньше было как, складываешь 10 чиселок, где в результате ожидаешь получить 1, но получаешь что-то немного другое:

>>> sum([0.1] * 10)
0.9999999999999999

И ладно бы оно просто всегда ошибалось одинаково, дак ведь погрешность ещё и зависит от порядка, в котором складывать числа:

>>> sum([0.1] * 5 + [0.05] * 10)
1.0000000000000004
>>> sum([0.05] * 10 + [0.1] * 5)
0.9999999999999999
>>> sum([0.1, 0.05, 0.05, 0.05, 0.05, 0.1, 0.1, 0.05, 0.05, 0.1, 0.05, 0.05, 0.05, 0.1, 0.05])
1.0000000000000002

А вы разве не знали, что сложение float'ов не коммутативно?

Но была специальная функция math.fsum(), которая всё делает правильно:

>>> math.fsum([0.1] * 10)
1.0
>>> math.fsum([0.1] * 5 + [0.05] * 10)
1.0
>>> math.fsum([0.05] * 10 + [0.1] * 5)
1.0

Дак вот в 3.12 встроенная функция sum() даёт такие же результаты, как math.fsum(). По крайней мере, я не смог найти примера, где они дали бы разный результат. Кроме того, по моим замерам, sum() работает ещё и раза в полтора быстрее math.fsum():

>>> timeit.timeit("sum([0.05] * 10 + [0.1] * 5)")
0.26875441599986516
>>> timeit.timeit("math.fsum([0.05] * 10 + [0.1] * 5)", setup="import math")
0.34194887499961624

Кто-нибудь понимает, зачем теперь нужна math.fsum()?
Летом успел съездить на PyCon Russia и выступить с докладом про новый язык программирования Mojo. История там такая: Крис Латнер, некогда очень активно поучаствовавший в создании LLVM, clang и Swift, вместе со своей командой решил сделать платформу для обучения нейросеточек и другого ML, а для этого делает свой язык программирования, максимально похожий на питон и тесно интегрированный с ним.

Анонс языка был очень мощным: вышло несколько статей, буквально пророчащих смерть обычного питона и становление Mojo в качестве его замены. Мне, разумеется, захотелось разобраться, насколько это серьёзные заявления, а насколько — хайп и кликбейт.

Разобрался! А теперь и вы можете: https://youtu.be/kzNwVdA3t_s.

P. S. А буквально позавчера Mojo стало можно загрузить и попробовать локально, ура: https://www.modular.com/blog/mojo-its-finally-here
Гвидо наградят премией NEC C&C Prize за разработку языка Python, который сильно повлиял на развитие технологий и общества.

Раньше не слышал про такую премию, но судя по тому, что японцы награждали ей в разные годы, среди прочих, таких гигантов как:

* Кен Томпсон и Деннис Ритчи
* Тим Бернерс-Ли
* Эдсгер Дейкстра
* Гордон Мур
* Линус Торвальдс

Это должно быть почетно! Поздравляем Гвидо! 🥳

Награда включает в себя сертификат, почётный значок и денежный приз в 10 миллионов йен.

Ссылка на анонс
Почитать про премию на вики
Кажется, PSF нанимает второго разработчика по программе Developer in Residence. Им станет давнишний кор-контрибьютор Петр Викторин из Чехии. Сейчас Петр работает лидом команды Python Maintenance в Red Hat.
Успели обновиться до 3.12? А там уже вовсю пилят 3.13 и вышел первый альфа-релиз: https://discuss.python.org/t/python-3-13-0-alpha-1/36109

Пока что в 3.13 есть только куча удалений давно задепрекейченных модулей и ещё много разных штук объявляются deprecated. Но это только самое начало цикла разработки. Сейчас на peps.python.org есть около 10 предложений, которые целятся попасть в версию 3.13. Среди которых самые интересные, пожалуй:

* PEP 649 – Deferred Evaluation Of Annotations Using Descriptors — уже принят
* PEP 554 – Multiple Interpreters in the Stdlib
* PEP 703 – Making the Global Interpreter Lock Optional in CPython
* PEP 730 – Adding iOS as a supported platform

Релиз обещает быть интересным.
Иногда аж вскрикиваю с заголовков рандомных статей в интернете. Если я когда-нибудь окончательно упорюсь в журнализм и начну писать такое, то... Даже не знаю, поставьте класс, подпишитесь на меня на бусти, онлифансе и медиуме. Ведь мне наверняка нужны будут деньги на таблетки. Главное не спорьте, со всем просто молча соглашайтесь, а то я могу воспринять это как сигнал, что нужно писать ещё. У автора заголовка явно неправильно подобрана доза.
Pycon 2023 - Архитектура кнута и пряника (запись)

Не так давно опубликовали записи докладов, так что думаю, пришла пора опубликовать. Изначально доклад планировал сделать про DDD и структуру проекта, но в итоге получился доклад про линтеры. Почему так вышло, смотрите в докладе. В презентации на все есть ссылки, можно скачать и прокликать.

Надеюсь, каждый для себя найдет что-нибудь новое и полезное. Как всегда, помидоры и набрасывания на вентилятор - приветствуются

Ссылка на youtube
Презентация в посте вот тут
В PyCharm добавили поддержку PEP 701 с f-строками из 3.12. Теперь можно писать бесконечно вложенные кавычки, и это не будет ломать подсветку синтаксиса в редакторе.

https://blog.jetbrains.com/pycharm/2023/10/2023-2-3/
Ruff становится всё более зрелым проектом. Недавно выпустили версию 0.1.0: https://astral.sh/blog/ruff-v0.1.0

Всё ещё не 1.0, но 0.1.0 — это уже серьёзная заявка на стабильность! Что изменилось:

* В Ruff теперь есть preview mode, куда будут попадать все новые, экспериментальные фичи до момента их стабилизации; можно передать флаг --preview или указать в конфиге, чтобы получить доступ к этому великолепию.

* Ruff теперь по умолчанию фиксит только те правила, которые можно пофиксить безопасно, не изменив смысл кода; unsafe fixes тоже можно запустить, но это нужно указывать явно, и желательно фиксить по одной ошибке за раз, а затем ревьювить получившийся код.

* Появилась политика версионирования; дальше версии будут не просто счётчиком релизов, а будут показывать наличие новых фич и ломающих изменений.
Питонические атаки
Я вам говорю, скоро он их обоих подожмёт
Ну и раз уж мы снова про Ruff, то надо зафиксировать график. Он уже подобрался совсем близко и щекочет там снизу пяточки pylint'у.

Думаю, что дальше популярность Ruff будет прирастать ещё быстрее, учитывая какую деятельность они развели, а теперь ещё и дают какие-никакие гарантии стабильности. Ведь дальше Ruff будет забирать аудиторию не только у линтеров, но и у форматтеров. Такая вот нехитрая ночная табуреточная аналитика (я на табуретке, а не на диване).

Кстати, интересно, что разрыв между pylint и flake8 будто бы сократился. Это почему, как думаете?
Питонические атаки
FastAPI перегнал Django по количеству скачиваний? 🤔 Твит
Что-то модно, что-то вышло из моды, а что-то вечно...

Спустя почти год, FastAPI окончательно перегнал Django по количеству скачиваний. Только Flask сдаваться, похоже, не собирается.

Всё равно какой-то диссонанс. Кажется, что Django — это прям база. Не верится, что он может вот так взять и сдуться. Господи, даже tornado скачивают в два раза больше, чем джанго. Но кто вообще знает, что такое торнадо? Поставьте хотдог, пересчитаем вас. Человек пять должно набраться. А про джанго точно слышали все. Джангисты, расскажите, может вы как-то на флешках или CD-RW болванках передаёте фреймворк по офису? Должно быть какое-то объяснение!
Я провёл исследование российского рынка найма (методом поиска по хедхантеру), и вот сколько вакансий нашлось с упоминанием разных веб-фреймворков:

* Django — 352 вакансии;
* FastAPI — 291 вакансия;
* Flask — 214 вакансий;
* aiohttp — 96 вакансий;
* Tornado — 12 вакансий.

Это вообще никак не матчится с количеством скачиваний этих пакетов из PyPI, но оно, наверное, и не должно. Здесь Django явно (пока?) чувствует себя хорошо, но FastAPI всё равно подступает. Похоже, пользователи Tornado просто предпочитают не афишировать себя.

Даже не знаю, какие тут можно сделать выводы. Для меня утверждение, что новичкам-питонистам обязательно нужно учить джанго, чтобы найти работу, точно не выглядит таким уж однозначно правильным. Вообще, лучше инвестировать время не в изучение конкретных фреймворков и библиотек, а в изучение основ языка или вообще основ computer science. Ну, или можно вообще взять data science. Всего лишь нужно изучить математику (это всегда полезно), и вы будете очень востребованы. Для сравнения, pandas упоминается в 413 вакансиях. А с FastAPI и Flask вы всегда разберётесь и на ходу, без отдельного изучения.
Pablo Galindo и Łukasz Langa запустили подкаст. Легендарные чуваки. Первый эпизод про core dev sprint, который недавно имел место быть в Чехии.

Люблю подкасты! Хотя тут вряд ли расслабишься, приходится активно думать, чтобы распарсить акцент Пабло.

Можно слушать на Spotify или Apple Podcasts.
Вы наверняка видели чувака с вот такой аватаркой, как на скриншоте. Не знаю как вы, а я постоянно натыкаюсь на его ответы на StackOverflow. Всегда по делу, максимально полезно, исчерпывающе. Мартин — один из восьми (на данный момент) юзеров на StackOverflow с репутацией больше миллиона. По тэгу Python он тупо первый, с отрывом от второго места больше, чем в два раза. Почти 20 тысяч ответов. Чувак просто легенда.

Собственно, недавно Мартина наградили почётным званием PSF Fellow за его огромный вклад в коммьюнити. Вообще, удивительно, что его не наградили раньше. Горжусь, потому что это я его номинировал :)

Новость
Astral официально анонсирует ruff format

График со скоростью работы я сначала неправильно считал, не заметил ruff. А он там вверху, просто полосочка очень мелкая.

Еще интересное заявление про статус форматтера:

While this is a Beta release, we consider the Ruff formatter production-ready. We’ve been using it in production for a while now, as have our alpha users from GitHub and Discord — including Dagster, whose monorepo contains over 50 Python packages and 500,000 lines of code.

Ну что, переезжаем с Black на Ruff?

P.S.: Кстати, я, кажется, начинаю понимать, почему Astral. Как-то связано с AST? Но ведь и линтер, и форматтер работают над CST! Кстрал должно быть!
Пока я спал, руководящий совет языка принял PEP 703 (Making the Global Interpreter Lock Optional in CPython).

Кратко о том, о чём говорится в посте:

1. Руководящему совету ясно, что несмотря на все проблемы и недостатки потоков, nogil будет полезен для Python, так как позволит находить более масштабируемые решения.
2. В то же время, они не уверены, получится ли убрать GIL не сломав при этом обратную совместимость - всё же не хотелось бы терять десятилетия развития базы пакетов. Существующая пакетная экосистема - это одна из сильных сторон языка, как и простая интеграция библиотек на C c CPython.
3. Оценить влияние nogil без реализации сложно, поэтому nogil должен выпускаться в составе регулярных релизов и не обязательно он там должен быть по-умолчанию.
4. Это всё ещё не гарантированная история. Если что-то пойдет не так - от изменений откажутся. Развёртывание должно быть постепенным и наиболее плавным.
5. Выкатка будет происходить в 3 фазы, которые возможно изменятся:
- В первой фазе nogil сделают возможным таргетом при сборке, чтобы разработчики могли тестировать свои пакеты.
- Во второй фазе, когда изменения в API и ABI будут сформированы, а поддержка nogil от сообщества будет достаточной, nogil-сборку добавлят как "поддерживаемую, но не по умолчанию".
- В третьей фазе nogil-сборку сделают сборкой "по-умолчанию", а от gil-сборки будут отказываться.
6. При успешной реализации nogil, ожидается падение производительности на 10-15% в худшем случае.

#pep
Moscow Python проводит митап вот прямо сейчас: https://www.youtube.com/watch?v=B_HprPoVoig
Вышел второй выпуск подкаста core.py от двух кор-разработчиков CPython. В этот раз про PEP 703 и выпиливание GIL — тема, которая волнует многих. Уже во всех радиоприемниках страны!

Кстати, я будто бы уже привык к акценту Пабло. Почти нормально слушается.

https://podcasters.spotify.com/pod/show/corepy/episodes/Episode-2---PEP-703-Removing-the-GIL-e2b8egi

P.S.: Да, для прослушивания этого подкаста, вероятно, потребуется включенный VPN. По крайней мере, в Apple Podcasts с российским айпишником он не включается.