LINUX.ORG.RU

Python 3.9.0

 , ,


2

4

Вышел новый стабильный релиз популярного языка программирования Python.

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

Python – стабильный и распространённый язык. Он используется во многих проектах и в различных качествах: как основной язык программирования или для создания расширений и интеграции приложений. Основные области применения: веб-разработка, машинное обучение и анализ данных, автоматизация и системное администрирование. В настоящий момент Python занимает третье место в рейтинге TIOBE.

Основные изменения:

Новый высокопроизводительный синтаксический анализатор на базе грамматик PEG.

В новой версии текущий парсер Python на основе грамматик LL(1)(КС-грамматика) заменён на новый высокопроизводительный и стабильный синтаксический анализатор на базе PEG (РВ-грамматика). Анализаторы для языков, представленных КС-грамматиками, такие как LR-анализаторы, требуют особого шага лексического анализа, который разбивает входные данные в соответствии с пробелами, пунктуацией и так далее. Это необходимо, так как эти анализаторы используют предварительный анализ для обработки некоторых КС-грамматик в линейное время. РВ-грамматики не требуют отдельного шага лексического анализа, а правила для него могут быть заложены вместе с другими правилами грамматики.

Новые операторы и функции

Во встроенный класс dict добавлены два новых оператора, | для слияния словарей и |= для обновления.

В класс str добавлены две новые функции: str.removeprefix(префикс) и str.removesuffix(суффикс).

Аннотация типа для встроенных коллекций

В этом релизе включена поддержка синтаксиса обощённых типов во всех стандартных коллекциях, доступных в настоящее время.

def read_blog_tags(tags: list[str]) -> None:
    for tag in tags:
        print("Tag Name", tag)

Другие изменения

  • PEP 573 Доступ к состоянию модуля с помощью методов расширения C

  • PEP 593 Гибкие функции и переменные аннотации

  • PEP 602 Python переходит на ежегодные стабильные релизы

  • PEP 614 Смягчающие грамматические ограничения на декораторы

  • PEP 615 Поддержка базы данных IANA по часовым поясам в стандартной библиотеке

  • BPO 38379 сборка мусора не блокируется на восстановленных объектах

  • BPO 38692 os.pidfd_open, для управления процессами без гонок и сигналов;

  • BPO 39926 поддержка Unicode обновлена до версии 13.0.0

  • BPO 1635741, при многократной инициализации Python в одном и том же процессе, больше не происходит утечка памяти

  • Коллекции Python (range, tuple, set, frozenset, list, dict) ускорены с помощью векторного вызова PEP 590

  • Некоторые модули Python (_abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, ресурс, time, _weakref) теперь используют многофазную инициализацию, как определено в PEP 489

  • Ряд стандартных модулей библиотек (audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib) теперь используют стабильный ABI, определенный PEP 384.

>>> Подробности

★★

Проверено: Shaman007 ()

Ответ на: комментарий от anonymous

Сообщаю, хинты вносят еще и для оптимизаций (на счет питона не знаю).

Для оптимизаций под виртуальной машиной давно придумали JIT. А Mypy и прочии анализаторы кода ты почему-то пропустил. А ведь их не от хорошей жизни с динамической типизацией придумали. Не удивлюсь, если со временем Python начнёт поддерживать ещё и статическую типизацию.

Баги с типизацией: в основном из-за дырявой архитектуры.

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

bbk123 ★★★★★ ()
Ответ на: комментарий от anonymous

А как без статики избавиться от проверки типов в рантайме? Вот хинты и анализаторы уже подвезли, так зачем же проверять типы в рантайме и проседать в производительности? Давным давно умные люди изобрели обобщённое программирование со статической типизацией, а эти динамитчики всё равно лезут со своим quick and dirty.

bbk123 ★★★★★ ()
Ответ на: комментарий от bbk123

избавиться от проверки типов в рантайме? Не проверять?) Я слабовато представляю себе устройство cpython, но может дойдут руки и сделаю патч, который отключает проверки. Посмотрим что будет со скоростью.

Кстати, что можешь сказать с идеей если переписать код с питона на c-api? Насколько изменится производительность? А-ля:

print((1, 2, 'three'))
#include <python3.7/Python.h>

int main() {
	Py_Initialize();
	PyObject *t = PyTuple_New(3);
	PyTuple_SetItem(t, 0, PyLong_FromLong(1L));
	PyTuple_SetItem(t, 1, PyLong_FromLong(2L));
	PyTuple_SetItem(t, 2, PyUnicode_FromString("three"));
	PyObject_Print(t, stdout, Py_PRINT_RAW);
	PyObject_Print(PyUnicode_FromString("\n"), stdout, Py_PRINT_RAW);
	return 0;
}
anonymous ()
Ответ на: комментарий от bbk123

Ожидаю небольшое ускорение. Потом поэкспериментирую…

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

anonymous ()
Ответ на: комментарий от anonymous

Конечно. Попробуй разгреби это говно без аннотаций. Тут и нейросеть не справится. А статически тмпизированный рефачится за милу душу

anonymous ()
Ответ на: комментарий от bbk123

Не удивлюсь, если со временем Python начнёт поддерживать ещё и статическую типизацию

Врятли. Скорее корпорация добра (MS), вздохнув по своей горькой долюшки спасителя говноязыков, в очередной раз создаст типизированную версию говна (TypepPy, TypeTuby), который транспайлится в динамоговно. Попытки уже [url=https://github.com/microsoft/pyright]делает[/url]. Впрочем, в этот раз запрос сообщества не велик.

..и это не может не радовать. Отбитое питон-комьюнити презирает типы. Я как-то создавал на разных ресурсах вопросы с фрагментами кода, сожержащими тайпхинты. Везде были ответы в духе «ЗОЙЧЕМ ТИПЫ УДОЛИ ТИПЫ». Так что сдается мне, что питон доживает последние деньки и вскоре отправится вслед за руби, и пёрлом и tcl.

anonymous ()
Ответ на: комментарий от anonymous

Врятли. Скорее корпорация добра (MS), вздохнув по своей горькой долюшки спасителя говноязыков, в очередной раз создаст типизированную версию говна (TypepPy, TypeTuby), который транспайлится в динамоговно.

Mypy именно так и появился.

Так что сдается мне, что питон доживает последние деньки и вскоре отправится вслед за руби, и пёрлом и tcl.

Это врядли. Слишком много на нём уже написано и уже где используется. Они могут просто добавить strict режим для тех, кому нужно. А по-умолчанию Python продолжит быть динамическим.

bbk123 ★★★★★ ()
Ответ на: комментарий от anonymous

Так что сдается мне, что питон доживает последние деньки и вскоре отправится вслед за руби, и пёрлом и tcl.

Хорошо было бы, если бы питон мог отправиться туда, где сидит tcl, то есть быть хорошим инструментом для написания различных утилит в одиночку. К сожалению, из Питона пытаются выжать больше чем он способен и этим его убивают. Боюсь, что с tcl ему уже не по пути.

питон-комьюнити презирает типы

И правильно. Зачем из питона делать C# (C++, Java и т.д.), когда эти языки уже есть? Питон плохо подходит для команды. Уж если хочется задействовать его в серьёзной разработке, то можно было бы вначале делать прототип на питоне без лишней писанины одним разработчиком, а затем командой переписывать на язык со статической типизацией, если будет необходимость. Вместо этого зачем-то уродуют питон.

Kogrom ()
Ответ на: комментарий от Kogrom

В этом виноваты разработчики, которые:

  • знают python

  • не знают c#/java/whatever

  • идут в галеру писать тырпрайзы командой.

Поэтому будет так. И да, типы рулят.

x3al ★★★★★ ()
Ответ на: комментарий от bbk123

Это врядли. Слишком много на нём уже написано и уже где используется

Возражение, актуальное для Cи и жс. Для Си потому что можно забиндить в другие ЯП. Для жс исторически, потомучто он уже на всех девайсах. А в нише ИИ (пока) выбор инструментов ничем не ограничен. В устройства питон врят-ли будут внедрять. А на серверах можно разгуляться любыми языками. И посредственная динамическая пукалка с размером рантайма как у джавы вызовет лишь недоумение у контейнероблядков. Тем более, что креативы на питоне не переиспользовать за пределами питона

anonymous ()
Ответ на: комментарий от bbk123

Давным давно умные люди изобрели обобщённое программирование со статической типизацией, а эти динамитчики всё равно лезут со своим quick and dirty.

А толку, если удобные статические ЯП маргинальны и бесперспективны. Ну вот есть на замену руби и питону crystal и nim. Это хорошие языки, но бесполезные, потому что там остаешься один на один с компилятором, а больше ничего нет. И более зрелые языки как D, ocaml находятся в примерно таком же состоянии. Там пустыня. А немаргинальная статика это жава-говны. Спасибо, но лучше уж питонами обмазываться.

bread ()
Ответ на: комментарий от bread

https://cython.readthedocs.io/en/latest/src/quickstart/cythonize.html

Cython is a Python compiler. This means that it can compile normal Python code without changes (with a few obvious exceptions of some as-yet unsupported language features, see Cython limitations). However, for performance critical code, it is often helpful to add static type declarations, as they will allow Cython to step out of the dynamic nature of the Python code and generate simpler and faster C code - sometimes faster by orders of magnitude.

bbk123 ★★★★★ ()
Ответ на: комментарий от future_anonymous

Складывается ощущение, что каждый второй пишет свои компилятор для своего языка.

Конечно пишем. Выбирайте:

  1. 2 языка (минимум) с ключевым словами на кириллице.
  2. Воображаемый язык программирования мета-данных от Владимира.
  3. Метапрог.
Kogrom ()
Ответ на: комментарий от Kogrom

Ты скучный. А как насчет писать императивный код на смеси YAML и jinja-шаблонов?

Цикл for:

script:
  flash_light:
    mode: restart
    sequence:
      - service: light.turn_on
        data:
          entity_id: "light.{{ light }}"
      - repeat:
          count: "{{ count|int * 2 - 1 }}"
          sequence:
            - delay: 2
            - service: light.toggle
              data:
                entity_id: "light.{{ light }}"
  flash_hallway_light:
    sequence:
      - service: script.flash_light
        data:
          light: hallway
          count: 3
anonymous ()
Ответ на: комментарий от screamager

То есть для конъюнкции ты хочешь заменить оператор, а для дизъюнкции оставить как есть?

Господин клоун, я же тебя послал на изучение матчасти. Пока её не выучишь ничего суда не пиши!

Rodegast ★★★★★ ()
Ответ на: комментарий от anonymous

Впечатляет! Я в восторге!

Зашёл на гитхаб по ссылке. Там 34 контрибьютора с нерусскими фамилиями. Ничто не указывает на то, что это сделал анонимус с ЛОРа.

Kogrom ()
Ответ на: комментарий от Kogrom

Питон плохо подходит для команды.

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

Linfan ★★★★★ ()
Ответ на: комментарий от Linfan

Это гробовая аттестация. Самое плохое, что можно было бы сказать про инструмент это то, что бесконечное количество хороших спецов смогут его использовать с пользой.

anonymous ()
Ответ на: комментарий от anonymous

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

Linfan ★★★★★ ()
Ответ на: комментарий от Linfan

Глупости. Простая разница в синтаксисе способна дать ощутимую разницу разве если говорить про языки типа бреинфака.

Экономию человеко-часов в реальном мире на крупных проектах даёт на синтаксис, а фундаментальные особенности языка (та же динамическая типизация) и в данном плане питон не выдержит никакой конкуренции с джавой.

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

anonymous ()
Ответ на: комментарий от anonymous

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

bread ()
Ответ на: комментарий от anonymous

Глупости. Простая разница в синтаксисе способна дать ощутимую разницу разве если говорить про языки типа бреинфака.

Твое мнение. как теоретика безусловно ценно, но практика показывает, что оно глупое. Особенно про «придумали для скриптиков» :) Походу, у тебя жабодеформация мозга. Профессиональное, йопта. Экономия идет и за счет синтаксиса и за счет динамики. И крупные проекты вполне успешно пишутся и функционируют с должным сопровождением. Если бы мнение оналитега-анона из РФ было бы истинным, крупные корпы не выдавливали бы жабку из прода, заменяя питоном. Уж поверь, там бабло умеют считать в отличии от.

Linfan ★★★★★ ()
Ответ на: комментарий от Shadow

Не понятно только, зачем это по ссылке.

По ссылке DSL, управляющий освещением в доме, если я правильно понимаю. То есть там не шаблон для html, а императивный язык программирования.

У меня есть версия зачем это принёс анонимус. Я для себя пишу простенький язык, транслирующийся в C++. Мы обсуждали на форуме это. И этот язык чем-то похож на DSL, о котором рассказал анонимус.

Kogrom ()
Ответ на: комментарий от Linfan

Кул. Бесплатный профессиональный анализ используемых технологий на рынке разработки программного обеспечения от, вне всякого сомнения ведущего специалиста Гугла с дипломом МИТ.

Оценка моего психологического состояния и профессиональных способностей прилагается бонусом. Всего и надо было на Лор зайти.

Страшно, подумать чего там ебаном.ит творится.

anonymous ()

Странное тут обсуждение... Хаскель, паттерн-матчинг, типы, компиляторы... Вы всё проспали.

Питон — это не конкурент плюсам или жаве. Это — скриптовый язык. На нём пишут то, что раньше писали на bash/perl/tcl/etc.

Главный конкурент питона — javascript.

И битву с ним питон откровенно проигрывает. В вебе жаваскрипт уже не победить. И он успешно выбрался на десктоп, и даже на мобилки, на которых питон так и не появился (хотя и мог бы без труда).

anonymous ()
Ответ на: комментарий от anonymous

Главный конкурент питона — javascript.

«Конкуренты» есть только у тех, кто работать не любит, а флудить «всегда готов».
У каждого из этих языков программирования имеется определенная
ниша в полезности их использования и вести баталии, какой из них лучше не профессионально.

Владимир

anonymous ()
Ответ на: комментарий от Kogrom

То есть там не шаблон для html, а императивный язык программирования

Именно. Поскольку надмозги не смогли впихнуть выражения в сам YAML они в место выражений пишут однострочники с jinja-шаблонами, чтобы прибавить 1 или обрезать строку, например

Причем запрос на адекватный язык стоит ребром. Поскольку умный дом это история про автоматизацию, про хороший код и хороший ЯП. Но эти наркоманы стали расширять синтаксис своего уродца. Добавили в YAML переменные. Потом будут функции, объекты..

То есть мы видим рождение в муках нового js или sql или ПХП. «А давайте сделаем простенький DSL для наших простеньких задач». А через 5 лет на этом говне написано пол системы и оно умоляет его убить

Если уж делаете простенький язычок, то делайте сразу с аннотациями. Потомучто ЯП это не только интерпретатор. Это еще и подсветка, language server, дебагер и прочие радости жизни. А лучше возьмите готовый. Их есть в глобальной сети https://github.com/dbohdan/embedded-scripting-languages

anonymous ()
Ответ на: комментарий от Linfan

На бакэнде импользуются только наркоманы-стартаперы :)

На бэке тренд в компилируемые ЯП по причине хайлоада и удобства для контейнеров

Однако в нише ЯП с рантаймом, nodejs успешно конкурирует с C# и java. Потомучто единый язык с фронтом, куча типизированных нашлепок, wasm под боком и полно готовых инструментов (для того же ssr)

anonymous ()
Ответ на: комментарий от anonymous

Если уж делаете простенький язычок, то делайте сразу с аннотациями.

Аннотация в языках программирования появились из-за того, что пока еще ни то
не смог реализовать readble синтаксис, предоставляемый не просто возможность создания типов данных и объектов, но и их семантику.

Но использование аннотаций конечно не панацея.

Почему?

Потому, что в них нет «механизма» создания семантики любой сложности, которую понимал бы компилятор и «брал бы» работу с объектами «на себя».
Например Python предоставляет программистам «из коробки» поддержку
самых востребованных объектов, но многое и не умеет.

Почему? Потому что эти вопросы компилятор и не должен решать.
Языки для системного программирования тем и хороши, что они предоставляют возможность программистам реализовать любую архитектуру управления объектами.

Правда разработчики C++ этого однозначно не понимают и «прибили гвоздями» C++ к одной архитектуре для работы с объектами.
Теперь они «героически» создают костыль над костылем для работы с этими объектами.

Владимир

anonymous ()
Ответ на: комментарий от anonymous

На бэке тренд в компилируемые ЯП по причине хайлоада и удобства для контейнеров

Знаем-знаем :) Только вот до хайлоада как до Луны рачки. Поэтому в суровой практике тривиальный LAMP с обещанием перепейсать на гошечку/кресты/раст если вдруг накроет такое счастие.

Однако в нише ЯП с рантаймом, nodejs успешно конкурирует с C# и java

То-то я смотрю, что вакансии по ноде даже не выставляют - видимо надежду потеряли найти этих «неуловимых джо»

Потомучто единый язык с фронтом, куча типизированных нашлепок, wasm под боком

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

Linfan ★★★★★ ()
Последнее исправление: Linfan (всего исправлений: 1)
Ответ на: комментарий от Linfan

То-то я смотрю, что вакансии по ноде даже не выставляют - видимо надежду потеряли найти этих «неуловимых джо»

Как это? Вот, открываю hh.ru, Москва, поиск:
• nodejs = 279 вакансий
• node.js = 523 вакансии
• node = 553 вакансии
Против, например:
• java server = 188 вакансий
• jsp = 62 вакансии

Пусть даже там много ложных срабатываний. Всё равно, это — далеко не «не выставляют».

anonymous ()