LINUX.ORG.RU

Выпуск Python 3.12

 


0

7

2 октября 2023 года вышла новая стабильная версия популярного языка программирования Python 3.12.

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

Последняя стабильная версия Python 3.12 предлагает множество изменений в языке и стандартной библиотеке. Изменения в библиотеке направлены на очистку устаревших API, улучшение удобства использования и пр. Отметим, что пакет distutils был удалён из стандартной библиотеки (вместо него следует использовать setuptools). Поддержка файловой системы в os и pathlib претерпела ряд улучшений, некоторые модули стали работать лучше.

Среди множества изменений и улучшений можно выделить следующие:

  • Более гибкий анализ форматированных f-строк, позволяющий многое из того, что ранее было невозможно (PEP 701).
  • Улучшенный синтаксис для указания параметров типа при объявлении универсального (generic) класса, функции или псевдонима (alias) типа. (PEP 695).
  • Новый API для профилировщиков, отладчиков и других инструментов для мониторинга событий в CPython (PEP 669).
  • Поддержка изолированных субинтерпретаторов с отдельными глобальными блокировками интерпретатора GIL (PEP 684). Программы, написанные с использованием субинтерпретаторов, могут использовать преимущества многоядерного параллелизма, который был ранее невозможен из-за GIL.
  • Улучшенные сообщения об ошибках. В случае ошибок, вызванных потенциальными опечатками, предлагаются варианты исправления.
  • Поддержка профилировщика производительности Linux perf для передачи названий функций Python в трассировщик.
  • Множество крупных и мелких улучшений производительности (например, см. PEP 709, касающийся улучшения производительности генератора списка list comprehension, поддержка двоичного оптимизатора BOLT и др.), обеспечивающих общее повышение производительности примерно на 5%.

Анонс релиза

Небольшой поэтический позитивчик от редакторов выпуска и Brian Bilston :)

They have no need of our help
So do not tell me
These haggard faces could belong to you or me
Should life have dealt a different hand
We need to see them for who they really are
Chancers and scroungers
Layabouts and loungers
With bombs up their sleeves
Cut-throats and thieves
They are not
Welcome here
We should make them
Go back to where they came from
They cannot
Share our food
Share our homes
Share our countries
Instead let us
Build a wall to keep them out
It is not okay to say
These are people just like us
A place should only belong to those who are born there
Do not be so stupid to think that
The world can be looked at another way

(now read from bottom to top)

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

★★★★☆

Проверено: hobbit ()
Последнее исправление: Virtuos86 (всего исправлений: 6)

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

Которую из строк PEP20 нарушили на этот раз?

«Более гибкий анализ форматированных f-строк, позволяющий многое из того, что ранее было невозможно» как раз нарушает как минимум второй пункт.

«Explicit is better than implicit.»? Судя по примерам в чейнджлоге, теперь можно вставлять в фигурные скобки выражения, которые раньше были запрещены. Что в них неявного?

question4 ★★★★★
()

А где-то есть сравнение производительности пистона с другими ЯП? Прям интересно, насколько он уступает им, ведь не спроста идёт постоянная оптимизация производительности.

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

хочется всё меньше...

Напишите подробнее.

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

Есть сравнение нативной реализации чего-либо и например реализации через C API, разница может достигать порядка (10 раз).

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

Что в них неявного?

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

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

Так-то оно да, питон всё же запускалка сишных библиотек, но интересно сравнение с более высокоуровневыми языками. Скажем JavaScript, который всё-таки интерпретируемый (пусть можно и скомпилировать, питон тоже можно канпелять) и в каждом сайте затычка. Или пэхапэ. С джавой не сравниваю, она компилируется и сиииильно оптимизируется, да и там столько тех же сборщиков мусора и опций запуска, что любой тест можно опротестовать.

Irben ★★★
()

поэтический позитивчик

не реализует PEP8, переделывайте!🤡

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

Такое ощущение что люди никогда не работали с шаблонами.

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

Если у тебя зависимость от sunau, то ты по-любому уже наслаждаешься и весьма давно.

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

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

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

Поехали.

  • При переходе с 3.11 на 3.12 сделали так, что asyncio.wait() принимает только Future. Об этом предупреждали, но это было изменение ради пуризма, которое поломало много кода и сделало использование wait() и wait_for() более многословным. А еще постоянно отрывают аргумент loop у разных классов и функций.

  • Релиз 3.9.3 вообще был сломан на 32 битах, что было болезненно для армов.

  • В первом релизе 3.9 удалили asyncio.Task.all_tasks() и внезапно перестал работать хук signal(SIGINT, SIG_IGN), который я делал для подпроцессов на спауне, уже правда не помню почему, но пришлось заменить на setpgrp().

  • В 3.8 asyncio.CancelledError стал подклассом BaseException. Хорошо, но изменение всё же ломающее.

И это я только бегло погрепал лог по своему большому проекту. Я не хейтер, я очень люблю питон, но грешков по обратной совместимости за ним хоть отбавляй. Мне еще вспоминается разброд и шатания со стримридерами всякими, транспортами xmlrpc и прочим. Постоянно что-то ломалось от релиза к релизу. Каждый релиз мне приходится внимательно проверять.

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

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

Проблема в том, что в мире питона по старой доброй традиции сначала делается реализация, а потом к ней создается спецификация API. И тогда, естественно, оказывается, что спецификацией API должна быть ВСЯ РЕАЛИЗАЦИЯ. Тогда (с позволения сказать) архитекторы питона в пятисотый раз начинают подозревать, что так делать не нужно было, и начинают ограничивать поверхность API, вырезая из нее наиболее трешовые фичи — вроде скрытого оборачивание корутин в asyncio.Task, после которого юзер с круглыми глазами прибегает и орет «чиво я ему передал корутину, а оно мне вернуло таску?».

По моим ощущениям оно перетрясли половину asyncio, вся дока завалена записями «New in Version» и «Deprecated since». Напоминаю, что asyncio и async/await вообще появилось только к 3.4.

При всем моем неуважении к питону, вырезание фич является позитивным процессом.

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

«Если у вас нет паранойи, это еще не значит, что за вами никто не следит.» — древняя народная мудрость.

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

Смотря с какой стороны посмотреть. Если с позиции, что python лучше не использовать для больших проектов, наверное да. В противном случае такое отношение очень сильно бьет по поддержке. Дополнительно ситуацию усугубляет то, что питон интерпретируемый, полного покрытия тестами в большинстве случаев нет, и ошибки сыпятся в рантайме. Самому приходится писать на python под зоопарк версий от 2.7 до 3.11 и подход разрабов: «ну в новой версии мы поменяли ряд api, удачи найти, что у вас теперь не будет работать знатно раздражает».

И аргументы, ну теперь это «современно» или «мы решили, что это больше не нужно» совсем не помогают смотреть на это по другому.

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

Что тебе непонятно? Твой редактор не подсвечивает синтаксис внутри f-строк? И кто тебе доктор?

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

Самому приходится писать на python под зоопарк версий от 2.7 до 3.11 и подход разрабов: «ну в новой версии мы поменяли ряд api, удачи найти, что у вас теперь не будет работать знатно раздражает».

Мы пишем под 3.8+, и если бить по рукам за использование deprecated фич и примеров со stackoverflow для 3.5, то, в принципе, получается сносно. Поддерживать одновременно более 6 версий тройки я бы не рискнул, и судя по наблюдениям — много кто не рискует (тем более, поддержка 3.6 остановлена в 2021, даже на пред-предыдущем стабильном дебиане 3.7). Даже Mercurial перестала поддерживать двойку, хотя годами ее просто-напросто не могли портировать на тройку.

С чем у вас связано применение 2.7? Энтерпрайз лапша, которую никто не может обновить до актуальной версии? Я имел опыт миграции дельфового милионника на новые платформы, буквально за месяц-другой всё решилось — что там должно быть на питоне, чтобы оно встало поперёк, как кобол?

byko3y ★★★★
()

Негусто, хоть PEP 695 и PEP 684 удобные. Ждём 3.13 с оптимизациями

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

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

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

Я вообще считаю, что питон ниспослан нам свыше провидением как испытание, чтобы мы поняли наши заблуждения и вернулись к православному perl'у.

Smacker ★★★★
()

вложенность f-string

+1 способ писать на питоне без табов кстати

f=lambda n:f'{n}{('' if n<1 else f(n-1))*n}'

print(f'{(x:=1)} {(y:=x+1)}{
    print('Hello from f-world')
    
    
    , 'what?'
,  ' No one is wonna code like this'
                                    ,100500,
                        x+y,
                f(4)
    
    
    
    }')
qulinxao3
()
Последнее исправление: qulinxao3 (всего исправлений: 4)
Ответ на: комментарий от PhysShell

Вот примерно так все и говорили Эрнесту Хемингуэю, когда он утверждал, что за ним следит правительство.

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

Ты сам сколько программ написал, что так уверенно про олигофренов рассуждаешь? Причём таких программ, которые приходится сопровождать хотя бы годик?

Самые идиотские ошибки очень часто оказываются самыми тяжёлыми в отлове и исправлении, внезапно. И надёжный ЯП должен помогать программисту, а не путать его.

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

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

уступает им, ведь не спроста идёт постоянная оптимизация производительности

В gcc она тоже постоянно идет. Это значит что си уступает другим ЯП?

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

Я просто маскирую новые версии пока не захочется обновить питон

А вам зачем вообще питон?

Блокируя обновления вы решаете за майнтейнеров дистрибутива, что лучше для системы.

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

А если вы разрабатываете на питон, ну, тут не должно быть уже никаких если.

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

как связаны SJW и выпуск питона?

Ну там к выпуску их стишок прилагается

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

Это конечно прекрасно, но при их методах развития АПИ они ломают совместимость с ПюПю в каждом выпуске.

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

Отказ от операторных скобок в Питоне в этом плане — крайне неудачное решение.

Просто надо пользоваться IDE, как было выяснено ранее. А вот языки со скобками как раз предоставляют отличный способ отстрелить ногу

#define process(x) \
  printf("%d\n", *(x)); \
  (*(x))++; 

...

if (x > 10)
  process(&x);

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

всякие php, python, perl, ruby и так с этим справлялись …

Нет, там все было статично и писалось на jQuery, используя nextjs можно писать на react.

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

Просто надо пользоваться IDE

IDE вообще или одной расово верной IDE? Если первое, то не поможет, если второе, то вендорлок. Да и вообще, какого фига? Сила скриптоты в том, что её можно поправить где угодно.

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

Починил, не благодари. Скобки тут не при чём.

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

ну, представь себе ситуацию: у тебя собрана вся система с python 3.8 , ты решил обновить мир, большинство пакетов поддерживает 3.9, но не 3.10, хотя 3.10 уже появился. Очевидно что имеет смысл замаскировать оба, а когда 3.10 будет поддерживать все нужные ебилды - перейти на него, пропуская ненужную стадию пересборки всего с 3.9 и не держа несколько версий интерпретатора (к тому же, как ты говоришь, для стороннего софта лучше системный не использовать)
На деле же я не припомню, чтобы мне для стороннего софта понадобилось что-то кроме системного интерпретатор. Системных интерпретаторов у меня всегда 2 - труъшный 2.7 и 3.x какой-то версии, которая уже может использоваться для всех py3 пакетов

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

Скобки тут не при чём.

Такое и без макросов делают, не зря по кодстайлу много где запрещены if без скобок. Не было бы скобок, не было бы и такого макроса, так что тут он просто в комплекте. К тому же люди пишут без форматирования типо такого:

if(){
...
if(){
while(){
...
}
...
}
if(){
...
}
}

IDE вообще или одной расово верной IDE?

Ты много IDE знаешь для Python? Я не очень много, в PyCharm и VSCode все норм.

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

Нет, делать сайты на jquery никто не будет, даже с бесплатным смузи.

MOPKOBKA ★★★★
()

Небольшой поэтический позитивчик от редакторов выпуска и Brian Bilston :)

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

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

Можно сразу возвращаться в будущее на raku (угрёбищное название конечно, но терпимо).

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

И чтобы уйти от «слежки» делал вид, что ничего не делает - только попивает пинакаладу. Только увлёкся.

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

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

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

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

Для скриптовой мелочи мне Ruby нравится. На питоне тоже можно, тыкаю веточкой для общего развития, но больше возни и хуже читаемость - смысл? Баш кроме пакетного вызова утилит стараюсь не трогать вообще, чужие баш-портянки править и дебажить - проще застрелиться.

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

Где то писали что есть такое в планах, после выпила GIL.

Про выпиливание GIL я слышу уже лет 5 ;)

Я про это слышу со времен Unladen Swallow, какое там 5 лет 😁

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

Я про это слышу со времен Unladen Swallow, какое там 5 лет

Я имел в виду выпиливание из CPython ;)

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

Если серьёзно, то конец чехарды с вложенными кавычками - это хорошо

Где ж хорошо. Теперь особо умные свяжут это с := и потом строки вообще хрен разберёшь

upcFrost ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.