LINUX.ORG.RU

Python 3.13

 , ,


1

5

После года разработки вышла новая стабильная версия интерпретируемого языка программирования Python 3.13. Релиз включает изменения в собственно языке и его стандартной библиотеке. К важнейшим изменениям относятся использование нового интерактивного интерпретатора по умолчанию, экспериментальная поддержка работы в режиме free-threaded (т. е. с отключением global interpreter lock) (PEP 703), и JIT-компилятор (PEP 744).

С этого релиза осуществлён переход на новый цикл релизов Python (Annual Release Cycle for Python, PEP 602), в связи со стремлением расширить период «полной поддержки» новых выпусков:

  • Python 3.9–3.12 имеют полтора года полной поддержки, за ними следует три с половиной года исправления брешей в безопасности.
  • Python 3.13 и более поздние релизы будут иметь два года полной поддержки и три года исправлений уязвимостей.

Продолжается работа по усовершенствованию сообщений об ошибках. Теперь traceback’и по умолчанию подсвечиваются цветом. Встроенная функция locals() теперь имеет определённую семантику для изменения возвращаемого меппинга (PEP 667), а параметры типов (typing.TypeVar, typing.ParamSpec, typing.TypeVarTuple) поддерживают значения по умолчанию (PEP 696).

Изменения стандартной библиотеки включают удаление устаревших API и модулей (aifc, audioop, cgi, cgitb, chunk, crypt, imghdr, mailcap, msilib, nis, nntplib, ossaudiodev, pipes, sndhdr, spwd, sunau, telnetlib, uu и xdrlib), а также привычные улучшения в области дружелюбия к пользователю и корректности. Несколько модулей исключены из поставки в связи с объявлением их устаревшими в Python 3.11 (PEP 594), в том числе инструмент и библиотека 2to3.

Из улучшений безопасности стоит отметить, что ssl.create_default_context() устанавливает флагами по умолчанию ssl.VERIFY_X509_PARTIAL_CHAIN и ssl.VERIFY_X509_STRICT.

Добавлена поддержка платформ: Apple iOS и Android теперь официально поддерживаемые платформы (tier 3) (PEP 730, 738). wasm32-wasi поддерживается на уровне tier 2, прекращена официальная поддержка wasm32-emscripten.

Для более основательного ознакомления с нововведениями релиза, обращайтесь к официальной документации (по библиотеке, по языку). Руководствуйтесь статьей «Переход на Python 3.13» для обновления своих проектов на новую версию языка. Также см. changelog.

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



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

тебя куда-то не туда понесло

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

второй раз повторяю: внутреннее представление строки в питоне зависит от версии самого питона и от символов самой строки.

За это отвечает биндинг.

это не так, раз ты пишешь, что в питон у тебя возвращаются bytes и ты потом зовешь decode(). если бы «биндинг отвечал» были бы строки, а не байты

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

Вообще то типовые варианты представления строк можно пересчитать по пальцам одной руки и даже останутся свободные пальцы

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

это даже мне - человеку который на С программировал самую малость, а про С++ только слышал - и то понятно

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

Хотите прикрутить поверх еще че то - да пожалуйста, только старое оставьте как есть.

Тебе и оставили твой питон курильщика, а для нормальных людей сделали третий - питон скриптобогов… Твои проблемы просто никто не понимает… Даже уродливая джанга и та перешла на питон 3 в 2013 году еще, и то что она тормозила с переходом позволило приобрести популярность всяким bottle, cherrypy, tornado… Ты как из криокамеры вылез

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

Кстати, Джанга и с переходом на асинхронщину до последнего брыкалась… Тоже на 5 лет переход затянули… Хотя вебсокеты как стандарт давно прижились

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

асинхронщину

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

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

то что она тормозила с переходом позволило приобрести популярность всяким bottle, cherrypy, tornado… Ты как из криокамеры вылез

CherryPy старше Django. А Tornado и bottle — продукты из других категорий.

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

Это сахарок над генераторами и неблокирующими сокетами, которые слушаются в цикле (asyncio.run() запускает этот цикл). Никакой ошибки нет, есть более рациональное использование имеющихся ресурсов при наличии факта неопределенности в виде GIL, который был введен чтобы потоки не могли попытаться одновременно изменить значение глобальной переменной… Для борьбы с GIL ввели и multiprocessing… Выпиливание GIL не делает асинхронщину бесполезной и не дает тредам преимуществ над однопотоком хоть и ускоряет их

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

И что? Они раньше перешли на прекрасный Python 3 с его замечательными строками!

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

GIL, который был введен чтобы потоки не могли попытаться одновременно изменить значение глобальной переменной… Для борьбы с GIL ввели и multiprocessing…

это заблуждение. GIL существует не для этого.

GIL не решает проблем конкурентного доступа в многопоточных программах на питоне, не делает доступ «synchronized».

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

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

async/await и GIL явления никак не связанные, у тебя какая-то каша.

async/await не решает проблему GIL.

повсеместное внедрение async/await - это ошибка, она возможно будет признана позднее.

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

Тогда уж давайте чтобы быть последовательными начнём с начала. Строка это вектор из байт + его длина на уровне битов и байтов, но также это информация о том, что это именно строка символов (на это намекает сам тип). И тут мы подходим к вопросу отображения. Если бы речь шла об отображении байтов, то строго говоря логичнее всего было бы отображать численные значения этих байтов (ведь не факт, что за последовательностью байтов прячутся именно символы ascii или другой кодировки). Т.к. кодировок более одной, весьма логично для преобразования чисел в символы и обратно имеются методы encode и decode в 3м питоне. В чём тут проблема решительно не понятно. Простите за банальность, но каждый символ это байт(или несколько), но не каждый байт это символ. И разделение на символы и байты, очевидно, должно быть.

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

Решают. Нам потоки не нужны, а значит и GIL не будет мешать. Правда придется через всякие uwsgi запускть множество инстансов… Но это для апишек всяких

rtxtxtrx ★★
()
Ответ на: комментарий от alt-tab-let

Тебе только в этой теме несколько человек намекнули, что набор байтов и строка это в питоне разные вещи. У тебя синдром утёнка и ты не приемлишь decode? Хочешь свой родной str()? Так используй str(b, encoding="utf-8"). Серьёзно, ты пробовал документацию открывать?

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

Нам потоки не нужны

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

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

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

При работе нескольких потоков GIL обеспечивает атомарность операций. В момент любой времени N выполняется лишь один опкод. Что грустно в плане производительности…

А вот есть всякие Go, где нет тредов, асинхронности, тебя избавили от необходимости управлять этим — лишь запускай горутины через go doStuff(), но там нет GIL, поэтому нужно пользоваться мьютексом, а в питоне у тебя есть куча thread-safe операций (она для этого должна занимать один опкод)…

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

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

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

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

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

Тебе только в этой теме несколько человек намекнули, что набор байтов и строка это в питоне разные вещи.

нахрена это сто раз писать если это очевидно? вопрос не в этом. str возвращает строку. не набор байт, не класс ProektirovshikDebil, а именно строку.

alt-tab-let ★★
()
Ответ на: комментарий от alt-tab-let

В Java, JS, PHP, C# и тд есть волшебные методы toString/ToString, которые возвращают текстовое представление объекта, приведение объекта к строе в них приводит к вызову этого метода. В Питоне точно так же как в остальных языках. Прекращай уже…

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

Мне это вообще неинтересно. Я только про один факт - добавлять b" это неадекватность, разработчики неадекватны. Это всё, что я сказал. Я не знаю, зачем вы с этим спорите какими-то явами. Тут только доступ к медицинской карте может что-то показать.

str не должен добавлять b". во всех языках, как бы приведение байт к строкам не вызывалось, оно не корёжит данные. если бы функции str вообще бы не было, и были только другие способы, это можно было бы принять. но она есть, и от этого не отвертеться. и она делает не то, что должна. хотя в py2 отлично работала и выполняла свою функцию. всё. какие явы? где в яве функция «покорёжь мне строку»? оно или переводит в строку, или нет. «перевести в строку но при этом покорёжить» там есть?

alt-tab-let ★★
()
Ответ на: комментарий от rtxtxtrx

У нас есть один поток. В нем есть основной цикл, который работает с неблокирующими сокетами, и дергает тот или иной обработчик по мере того как сокет готов для чтения/записи… Или что непонятно?

ты некомпетентен и пытаешься умничать.

разберись для себя что такое многопоточность и зачем она нужна, потом разберись как работает GIL, тогда тебе станет понятно, что async/await проблему GIL не решает.

При работе нескольких потоков GIL обеспечивает атомарность операций

сообщением выше ты же пишешь:

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

запутался что ли?

питоне у тебя есть куча thread-safe операций

погуглил? молодец. но есть нюансы:

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

  2. дефиниция этих гарантий расплывчата: operations … that “look atomic” really are. программы не пишут на основе таких спецификаций, для практического использования это не годится

но там нет GIL, поэтому нужно пользоваться мьютексом, а в питоне у тебя есть куча thread-safe операций

  1. гарантировано атомарные операции есть много в каких языках при этом без всякого GIL, и есть даже операции гарантирующие hb, видимость. поэтому этот твой аргумент он странный весьма.

но там нет GIL, поэтому нужно пользоваться мьютексом

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

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

В C23 вот K&R-style декларации убрали, сломали же ж, ужас.

Синтаксис объявления функций K&R объявили устаревшими в самом первом черновике стандарта в 1988-ом году. Компиляторы на этот синтаксис выдают предупреждение с самого появления стандарта, но продолжают собирать этот код под настоящее время.

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

Python не имеет спецификации, и определяется реализацией (насколько я понимаю).

а вот насколько я понимаю, питон определен документацией, а вовсе не сипитоном

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

ты некомпетентен и пытаешься умничать.

Пишет эксперт, думающий что асинхронность вся эта не нужна, ее какие-то дурачки придумали и GIL тут непричем. Ясно

гарантировано атомарные операции есть много в каких языках при этом без всякого GIL

Ага запусти 100500 тредов и инкрементируй глобальную переменную в том же C++, потом результат скажешь

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

Набор слов.

пытаешься умничать

И обвиняешь в этом других

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

Строка это вектор из байт + его длина

нет. строка это не «вектор из байт + его длина»

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

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

эксперт, думающий что асинхронность вся эта не нужна, ее какие-то дурачки придумали и GIL

еще раз: async/await проблему GIL не решает, и async/await был добавлен в питон по другим причинам совершенно.

гарантировано атомарные операции есть много в каких языках при этом без всякого GIL

Ага запусти 100500 тредов и инкрементируй глобальную переменную в том же C++, потом результат скажешь

глупенький, атомарные операции есть и в Java и в С++ и везде. думать что атомарные операции есть только в питоне и благодаря GIL - это большая глупость. атомарные операции в тех же java и С++ часть атомарны бесплатно, но не устанавливают HB и не обеспечивают видимость, часть достигаются доп. ключевыми словами и доступны для более широких типов. то что ты не знаешь, что значит атомарная операция и что они есть в других ЯП, говорит только о твоей некомпетентности.

а вот «атомарный инкремент» ты приплел совершенно зря, «операция» инкремент традиционно не атомарна.

кроме того, даже если бы в питоне был атомарный инкремент (а его в питоне нет), никакой полезной многопоточный программы ты на этом написать не смог бы.

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

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

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

Набор слов.

для тебя конечно это бессмысленный набор слов, с твоим-то нулевым уровнем и самомнением

asdpm
()
Ответ на: удаленный комментарий

Ты print не добавил

alt-tab-let ★★
()
Ответ на: комментарий от alt-tab-let

во всех языках, как бы приведение байт к строкам не вызывалось, оно не корёжит данные.

Байты нельзя привести к строкам без знания кодировки. В python2 функция str не работала с некоторыми данными, и это было исправлено.

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

python это lua который (не в roblox) смог среди иследователей

python это (ba|a|da|fi|z|p|..)sh у которого подчищенный In готовый модуль(и) для следующей итерации возведения среды

основной переход 2->3 это как раз таки редизайн модели классов для «более лучшего» содействия программированю_в_большем

как и упрятывание reload

очевидно эволюция python3 это сдвиг по фазе эволюция пятна(распределения) образованности приходящих в.

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

Вообще то типовые варианты представления строк можно пересчитать по пальцам одной руки и даже останутся свободные пальцы (если Вы не фрезеровщик со стажем).

ASCIIZ, Pascal, Haskell, std::string, QString, std::stringstream, std::crope …

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

хм:

есть сети Петри как модель конкурентного(и или параллельного) редукции

чем асинхронщина|распределённость|папалельность|.... выбивается из ряда способов максимизировать выхлоп уменьшая издержки на код?

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

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

a = '3'
b = 3

str(a) и str(b) идентичны. Как будешь в eval отличать строки от чисел?

По этой логике str(a) должно возвращать '3', а не 3.

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

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

rtxtxtrx ★★
()
Ответ на: комментарий от monk
In [1]: def str2(x):
   ...:     return getattr(x, 'decode', lambda: str(x))()
   ...: 

In [2]: str2(b'ko')
Out[2]: 'ko'

In [3]: str2('ko')
Out[3]: 'ko'

In [4]: str2({'ko'})
Out[4]: "{'ko'}"

А вообще это какая-то дурная идея… Странная проблема. Он еще JS не трогал, вот он где высрет кирпичи:

({
    toString() { return super.toString().replace(/object/, 'govno') }
}) + 42
'[govno Object]42'
rtxtxtrx ★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от FishHook

А откуда ты взял второй питон и pip к нему? Я вчера ради эксперимента собрал второй питон из сорцов, в репе 12 дебиана второго питона тупо нет (или я плохо искал)

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

А откуда ты взял второй питон и pip к нему?

Я не знаю, как там в дебиане, в Убунту (если что это Убунту АРМ из репы UTM) я сделал apt install python2

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

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

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

asdf

Спасибо! Не знал про эту штуку. Буду читать доки

hateWin ★☆
()
Ответ на: комментарий от alt-tab-let

постоянное приведение, выведение и сведение типов просто надоело

Python - язык со строгой динамической типизацией. Если не нравится строгая типизация, то зачем писать на языке со строгой типизацией?

Gentooshnik ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.