После годину дана развоја, објављено је значајно издање програмског језика Питхон 3.12. Нова грана ће бити подржана годину и по, након чега ће се још три и по године генерисати поправке за њу како би се отклониле рањивости.
Истовремено је почело алфа тестирање гране Питхон 3.13, која је увела ЦПитхон буилд мод без глобалног закључавања тумача (ГИЛ, Глобал Интерпретер Лоцк). Грана Питхон 3.13 ће бити у алфа издању седам месеци, током којих ће се додавати нове функције и исправљати грешке (у складу са новим распоредом развоја, рад на новој грани почиње пет месеци пре објављивања претходне гране и до време следећег издања достиже фазу алфа тестирања). Након тога, бета верзије ће бити тестиране три месеца, током којих ће додавање нових функција бити забрањено и сва пажња ће бити посвећена исправљању грешака. Последња два месеца пре пуштања на слободу, грана ће бити у фази кандидата за ослобађање, у којој ће бити извршена коначна стабилизација.
Нови додаци за Питхон 3.12 укључују:
- Флексибилност рашчлањивања ф-стрингова (форматираних литерала са префиксом 'ф') је повећана, што нам омогућава да се ослободимо многих ограничења. На пример, ф-стрингови сада могу да садрже било који Питхон важећи израз, укључујући вишелинијске изразе, коментаре, обрнуте косе црте и Уницоде излазне секвенце. Поред тога, унутрашњи стринг сада дозвољава да се исти наводници поново користе као окружујући ф-стринг (тј. двоструки наводники сада могу да се поново користе унутра без потребе за пребацивањем на једноструке наводнике). Повећан је информативни садржај порука о грешци у ф-редовима, у којима је сада назначено тачно место у реду које је изазвало грешку.
На пример, у Питхон-у 3.12 су дозвољене следеће конструкције: принт(ф"Ово је листа песама: {"\н".јоин(сонгс)}") принт(ф"Ово је листа песама: {"\Н{ЦРНО СРЦЕ ОДЕЛО}". јоин(песме)}") принт(ф"Ово је листа песама: {", ".јоин([ … 'Врати ме у Еден', # Боже, моје, те очи као ватра... 'Алкалине' , # Ни кисело ни алкално ... 'Асцензионизам' # Узмите коначно у сломљено небо ... ])}")
- Да би се повећала ефикасност коришћења ресурса на системима са више језгара, имплементирана је подршка за изоловане подтумаче и одвојена глобална закључавања (ГИЛ, Глобал Интерпретер Лоцк) за различите тумаче у оквиру процеса (ЦПитхон вам омогућава да покренете неколико тумача одједном у један процес). У свом тренутном облику, ова функција је тренутно доступна само преко Ц-АПИ-а (подршка за Питхон АПИ ће се појавити у следећој значајној грани).
- Питхон коду је додата могућност коришћења бафер протокола. Класе које обезбеђују метод "__буффер__()" сада се могу користити као типови који директно раде на бинарним подацима у меморији.
- Модул сис.мониторинг је предложен за отклањање грешака и профилисање, који вам омогућава да надгледате догађаје у ЦПитхон-у као што су позиви, враћање функција, извршавање произвољних линија кода, изузеци и прелази са минималним трошковима.
- Интерпретатор имплементира подршку за подсистем Линук перф кернела, који вам омогућава да одредите имена Питхон функција током профилисања помоћу услужног програма перф (раније су само имена Ц функција одређивана у траговима).
- Повећан је информативни садржај порука о грешци, а распон изузетака је проширен, нудећи препоруке за отклањање грешака у куцању. На пример, сада су приказане препоруке за увоз заборављених модула стандардне библиотеке, а приказани су и савети за додавање префикса „селф“. у методама је дефинисано писање „импорт к фром и” уместо „фром и импорт к” итд. сис.версион_инфо НамеЕррор: име 'сис' није дефинисано. Да ли сте заборавили да увезете 'сис'? сометхин = блецх НамеЕррор: име 'блецх' није дефинисано. Да ли сте мислили: 'селф.блецх'? импорт аиз фром биз СинтакЕррор: Да ли сте хтели да користите 'фром … импорт …' уместо тога? фром цоллецтионс импорт цхаинмап ИмпортЕррор: не могу увести име 'цхаинмап' из 'цоллецтионс'. Да ли сте мислили: 'ЦхаинМап'?
- Настављен је рад на оптимизацији перформанси. Укупан добитак учинка као резултат додатних оптимизација је процењен на 5%.
- Експериментална подршка за БОЛТ бинарни оптимизатор је додата у процес изградње, повећавајући перформансе за 1-5%.
- Имплементирана је инлине примена укључивања листе (разумевања), што је убрзало рад са укључењима листа до два пута (за код који активно користи укључивање листе, тестирање је показало укупни пораст перформанси од 11%).
- Величина Уницоде објеката је смањена за 8-16 бајтова.
- Операције са регуларним изразима ре.суб(), ре.субн() и ре.Паттерн су убрзане.
- Извршавање исинстанце() провера за неке протоколе је убрзано са 2 на 20 пута.
- Перформансе асинцио пакета су значајно побољшане (неки тестови показују убрзање од 75%).
- Креирање класе асинцио.Таск је убрзано.
- Значајно (у неким тестовима за 64%) функције токенизе.токенизе() и токенизе.генерате_токенс() су убрзане.
- Учитавање атрибута и позивање супер() методе су убрзани.
- Предложена је нова, компактнија синтакса за означавање типа за генеричке класе и функције. деф мак[Т](аргс: Итерабле[Т]) -> Т: ... листа класа[Т]: деф __гетитем__(селф, индек: инт, /) -> Т: ... деф аппенд(селф, елемент : Т) - >Ништа: ...
- Обезбеђен је нови начин за дефинисање псеудонима типа користећи израз "тип" тип Тачка = тупле[флоат, флоат] тип Тачка[Т] = тупле[Т, Т]
- Нови @оверриде декоратер је додат у модул за куцање да информише системе за проверу типа да је метода у поткласи намењена да замени метод или атрибут у суперкласи. Декоратор се може користити за хватање грешака узрокованих методом која је намењена да буде замењена не извршавањем дате радње. цласс Басе: деф лог_статус(селф) -> Ништа: … цласс Суб(Басе): @оверриде деф лог_статус(селф) -> Ништа: # Ок, замењује Басе.лог_статус … @оверриде деф доне(селф) -> Ништа: # Систем за проверу типа ће открити грешку...
- У циљу побољшања безбедности, уграђене имплементације СХА1, СХА3, СХА2-384, СХА2-512 и МД5 алгоритама у хасхлиб-у замењене су формално верификованим опцијама из ХАЦЛ* пројекта (користе се само уграђене имплементације ако ОпенССЛ није доступан).
- Питхон имплементира заштиту од преливања стека.
- Класа патхлиб.Патх подржава подкласу.
- ОС модул је проширио подршку за Виндовс платформу. На пример, када радите на Виндовс-у, додата је подршка за методе ос.листдривес(), ос.листволумес() и ос.листмоунтс(), а такође је повећана и тачност ос.стат() и ос.лстат() је побољшан.
- Додати интерфејси командне линије у модуле склите3 и ууид („питхон -м склите3“ и „питхон -м ууид“).
- Ц-АПИ је додао подршку за „бесмртне“ објекте за које се не примењује бројање референци.
- Имплементиран је концепт нестабилног Ц АПИ нивоа, намењен за употребу у дебагерима, ЈИТ компајлерима и другим алатима ниског нивоа.
- Очишћене су застареле функције.
- Модули асинцхат, асинцоре, смтпд, имп и дистутилс су уклоњени (модул дистутилс се може користити из пакета сетуптоолс).
- Својства встр и встр_ленгтх су уклоњена из Ц имплементације уницоде објеката.
- Уклоњене су застареле методе у модулу униттест.
- Уклоњене су застареле или нефункционалне функције, класе и методе, укључујући locale.format(), io.OpenWrapper, ссл.RAND_pseudo_bytes(), ElementTree.Element.copy(), hashlib.pbkdf2_hmac(), gzip.GzipFile, итд.
- Модул веб претраживача више не подржава старије претраживаче, укључујући Граил, Мосаиц, Нетсцапе, Галеон, Скипстоне, Ицеапе, Фиребирд и Фирефок до верзије 36.
- У припреми за будуће оптимизације, интерна репрезентација целих бројева је промењена.
Извор: опеннет.ру
