Pärast aasta töötamist avaldati uus stabiilse haru versioon Perl 5.36. Uue väljaande ettevalmistamisel muudeti umbes 250 000 koodirida, muudatused hõlmasid 2000 faili ning arenduses osales 82 arendajat.
Haru 5.36 vabastati üheksa aastat tagasi kinnitatud arenduskava kohaselt, mis näeb ette uute stabiilsete harude väljaandmist kord aastas ja paranduste väljaandeid — iga kolme kuu tagant. Umbes kuu jooksul on plaanis välja anda esimene paranduste versioon Perl 5.36.1, milles kõrvaldatakse kõige olulisemad vead, mis avastati Perl 5.36.0 rakendamise käigus. Samal ajal, kui Perl 5.36 välja antakse, lõpetatakse haru 5.32 tugi, millele võivad tulevikus välja anda uuendusi, ainult juhul kui avastatakse kriitilisi turvaprobleeme. Samuti on alanud eksperimenteerimise haru 5.37 arendamise protsess, mille põhjal plaanitakse mais või juunis 2023 luua stabiilne versioon Perl 5.38, kui otsust ei tehta 7.x numbrimisele üle minna.
Olulised muudatused:
- Stabiliseeritud ja nüüd saadaval pragma kasutamisega 'use v5.36' funktsioonide signatuuride toetamine, mis võimaldab selgelt määratleda funktsioonis kasutatavaid muutujaid ning automatiseerida kontrollimis- ja väärtuste määramise operatsioone saadud parameetrite massiivist. Näiteks varem kasutatud kood: sub foo { die 'Liigne argumentide arv subroutine' kui @_ >= 2; die 'Liigne vähe argumente subroutine' kui @_ <= 2; my($left, $right) = @_; return $left + $right; }
signatuuride kasutamisel võib olla asendatud:
sub foo ($left, $right) { return $left + $right; }
Funktsiooni foo kutsumisel, kui argumentide arv ei ole kaks, väljastab interpreter vea. Nimekirjas toetatakse ka erilist muutujat '$', mis võimaldab osa argumente ignoreerida, näiteks 'sub foo ($left, $, $right)' võimaldab kopeerida muutujaid ainult esimese ja kolmanda argumendiga, nõudes samas, et funktsioonile tuleb edastada täpselt kolm argumenti.
Синтаксис сигнатур также позволяет указывать необязательные аргументы и задавать значения, используемые по умолчанию в случае отсутствия аргумента. Например, указав «sub foo ($left, $right = 0)» второй аргумент становится необязательным и при его отсутствии передаётся значение 0. В операции присваивания можно указать произвольное выражения, в том числе с использованием других переменных из списка или глобальных переменных. Указание вместо переменной хэша или массива (например, «sub foo ($left, @right)») приведёт к возможности передачи одного и более аргументов.
- В функциях, объявленных с использованием сигнатур, поддержка дополнительного присвоения параметров из массива «@_» объявлена экспериментальной и будет приводить к выводу предупреждения (предупреждение выводится только если @_ используется в функциях, объявленных при помощи нового синтаксиса). Например, предупреждение будет выведено для функции: use v5.36; sub f ($x, $y = 123) { say «The first argument is $_[0]»; }
- Стабилизирован и доступен при указании прагмы «use v5.36» инфиксный оператор «isa» для проверки того, является ли объект экземпляром указанного класса или классом, производным от него. Например: if( $obj isa Package::Name ) { … }
- При указании прагмы «use v5.36» включена обработка предупреждений (активирован режим «use warnings»).
- При указании прагмы «use v5.36» отключена поддержка косвенной нотации вызова объектов («feature indirect») — устаревшего способа вызова объектов, при котором вместо «->» используется пробел («method $object @param» вместо «$object->$method(@param)»). Например, вместо «my $cgi = new CGI» нужно использовать «my $cgi = CGI->new».
- При указании прагмы «use v5.36» отключена поддержка эмуляции многомерных массивов и хэшей в стиле Perl 4 («feature multidimensional»), позволяющих транслировать указание нескольких ключей в промежуточный массив (например, «$hash{1, 2}») преобразовывалось в «$hash{join($;, 1, 2)}»).
- Pragma 'use v5.36' määramisel keelatakse eksperimentaalse harude mehhanismi ('feature switch') tugi, mis on sarnane switch- ja case-operatsioonidega (Perlis kasutatakse võtmesõnu given ja when). Selle võimaluse kasutamiseks alates Perl 5.36 tuleb selgelt märkida 'use feature «switch»', ja kui on märgitud 'use versioon', siis ei aktiveeru see enam automaatselt.
- Stabiliseeritud ja vaikimisi saadaval täiendavate sümbolklasside tugi ruuduliste sulgude sees regulaarsetes väljendites. See võimalus võimaldab sobitamist laienenud ühis-, eraldi- ja sümbolite kogumite reeglitega. Näiteks '[A-Z — W]' — sümbolid A-st Z-ni, välja arvatud W.
- Osaliselt stabiliseeritud ja vaikimisi saadaval operatsioonide '(?', '( )', '{ }' ja '[ ]' tugi, mille sees võivad olla sümbolid '« »', '“ ”' jne. Näiteks 'qr«pat»'.
- Funktsiooni sort kutset ilma argumentideta on keelatud, mis toob nüüd kaasa veateate. @a = sort @empty; # jätkab tööd @a = sort; # kuvatakse veateade @a = sort (); # kuvatakse veateade
- Pakutakse välja uus käsurea lipp „-g”, mis aktiveerib kogu faili laadimise režiimi, mitte ridade kaupa. Lipp toimib sama loomulikult kui „-0777”.
- Unicode spetsifikatsiooni tugi on uuendatud versioonile 14.0.
- Tagatud on kohene erandite töötlemine, mis on seotud ujuva koma arvutustega (SIGFPE), sarnane muude kriitiliste signaalide töötlemisega, nagu SIGSEGV, mis võimaldab siduda oma töötlejad SIGFPE signaali jaoks kaudu $SIG{FPE}, näiteks, et väljastada rida, kus probleem tekkis.
- Põhivarustusse kuuluvate moodulite versioonid on värskendatud.
- Lisatud on jõudluse optimeerimisi. Pakutakse võimalust tõhusamalt salvestada suurte räsikoodide võtmeid ilma jagatud ridade tabeliteta. Uute skalaari väärtuste loomise jõudlus on oluliselt paranenud, näiteks järgmine kood töötab nüüd 30% kiiremini: $str = „A” x 64; for (0..1_000_000) { @svs = split //, $str }
- Tõlgendi koodis hakati kasutama teatud C99 standardis määratletud konstruktsioone. Perl'i koostamiseks on nüüd vajalik C99 toetamist omav kompilator. Vanade MSVC++ versioonide (enne VC12) koostamise tugi on lõpetatud. Toetuse on saanud koostamine Microsoft Visual Studio 2022 (MSVC++ 14.3).
- Toetuse on lõpetatud platvormidele AT&T UWIN, DOS/DJGPP ja Novell NetWare.
Allikas: opennet.ru
