Pärast 11 kuu arendust on avaldatud uus stabiilne Perl programmeerimiskeele versioon — 5.40. Uue versiooni ettevalmistamisel muudeti umbes 160 tuhat koodirida (ilma dokumentatsiooni ja automaatse genereeritud koodita — 110 tuhat), muudatused puudutasid 1500 faili, arenduses osales 75 arendajat.
Versioon 5.40 on välja antud vastavalt 11 aastat tagasi kinnitatud fikseeritud arendusgraafikule, mis näeb ette uute stabiilsete versioonide väljalaskmist kord aastas ja paranduste väljalaskmist iga kolme kuu tagant. Umbes kuu pärast plaanitakse avaldada esimene parandustöötamine Perl 5.40.1, milles kõrvaldatakse kõige olulisemad vead, mis ilmnesid Perl 5.40.0 juurutamise käigus. Samuti lõpetatakse Perl 5.36 toetamine koos Perl 5.40 väljalaskmisega; uuendusi antakse välja ainult juhul, kui tuvastatakse kriitilised turvaprobleemid. 20. juunil algab eksperimentaalse versiooni 5.41 arendusprotsess, mille alusel oleks plaanis mai või juuni 2025 stabiliseeritud Perl 5.42 versioon, kui ei otsustata liikuda 7.x numbrimisele.
Olulised muudatused:
- Laienevad võimalused, mis on seotud eelmisel versioonil ilmunud katse süntaksiga klasside loomiseks. Lisatud on uus märksõna «__CLASS__», mis kutsete korral meetoditest, ADJUST-blokist või väljade initsialiseerimisel tagastab hetkel töötava klassi nime, sarnaselt sellele, kuidas märksõna __PACKAGE__ tagastab paketi nime. Erinevalt väljendist ref($self) saab märksõna __CLASS__ kasutada väljade initsialiseerimisel klassi meetodite juurde pääsemiseks klassi eksemplari loomise etapis. Põhiklassi jaoks on __CLASS__ väärtus identne __PACKAGE__ väärtusega, kuid alamsklasside loomisel erineda.
use feature 'class';
class Example1 {
field $f = __CLASS__->default_f;
sub default_f { 10 }
} - Klassi sees määratletud väljade jaoks on rakendatud atribuut «:reader», mida kasutatakse automaatselt meetodi loomiseks, mis tagastab muutuja väärtuse praeguses klassi eksemplaris.
Näiteks «:reader» märkimine pärast välja määratlemist «field $s;» on samaväärne meetodi loomisega «method s () { return $s; }». Vajadusel saab meetodi nime määrata, kasutades konstruktsiooni «field $name :reader(get_name);». - On kinnitatud try/catch erandi töötlemise süntaks, mida saab kasutada hoopis vähem arusaadavate "eval" manipuleerimiste asemel. "try" plokk sisaldab koodi, mida tuleb käivitada, ja "catch" plokk sisaldab koodi, mis tegeleb kõikide eranditega, mis võivad tekkida esimese ploki täitmise ajal. "catch" plokis määratakse muutujat, milles on andmed, mis edastatakse erandi loomise ajal (näiteks, kui erand tekib „die” kutsel, siis edastatakse antud argument stringina). "try" ja "catch" plokkides on lubatud hüppelised operaatorid, sealhulgas return, goto, next, last ja redo.
try {
my $x = call_a_function();
$x < 100 or die "Liigne suur"; send_output($x); } catch ($e) { warn "Väärtuse väljund ei õnnestunud; $e"; } print "Lõppenud\n"; - On stabiliseeritud süntaks «for my (VAR, VAR) (LIST)» ja «foreach my (VAR, VAR) (LIST)», mida kasutatakse nimekirjade läbikäimiseks, et korraga saada mitu väärtust ühe tsükli iteratsiooni jooksul. Näiteks on nüüd võimalik määrata:
foreach my ($key, $value) (%hash) { … }
for my ($left, $right, $gripping) (@moties) { … } - Töötav mudel builtin, mis sisaldab alati saadaval olevaid funktsioone, mis on sisseehitatud tõlgendusse. Praegu on mudelis saadaval järgmised funktsioonid: true, false, weaken, unweaken, is_weak, blessed, refaddr, reftype, ceil, floor, is_tainted, trim ja indexed.
- Uued eksperimentealsed sisseehitatud funktsioonid inf ja nan on lisatud, ja need on saadaval nimesp ära „builtin::” („builtin::inf” ja „builtin::nan”). Nende funktsioonide kaudu saab kasutada lõpmatust ja mitte-arvulist väärtust defineerivaid konstandte.
- Uus loogiline operaator „^^” on lisatud, mis vastab XOR-операtsioonile ning täiendav bititootmistor „^”. Perl pakub kolme põhilist bititootmist: „&”, „|” ja „^”, mis vastavad AND, OR ja XOR operatsioonidele, kuid loogilised operatsioonid on varem saanud kasutada ainult AND („&&”) ja OR („||”) variante. Loogiline väljend „$x ^^ $y” tagastab TRUE, kui kas „x” või „y” on TRUE, kuid mitte üheaegselt.
- Toetatakse versiooni simuleerimise lõpetamine kuni 5.11. Direktiivi «use номер_версии», mis keelab lisafunktsioonid, mis on tõlgendajasse lisatud pärast määratud versiooni, kasutamine, mille versioon on väiksem kui 5.11 (näiteks «use v5.8»), toob nüüd kaasa veateate, mitte hoiatuse. Samamoodi on lisatud hoiatuse väljastamine, kui kasutatakse «use» versiooniga, mis on väiksem kui 5.39 (hoiatuste asemel antakse veateade välja versioonis 5.44).
- Käskude rida «-M» ja mooduli nime vahel on lubatud tühik, näiteks «perl -M Data::Dumper=Dumper -E ‘say Dumper [1,2,3]'» (varem pidi kirjutama «perl -MData::Dumper…»).
- Operatori «goto» kasutamine välisest ulatusest siseulatusse liikumiseks on kuulutatud vananenuks. Selle võimaluse toetamine lõpetatakse Perl 5.42 versioonis.
- Peamisse koosseisu on lisatud moodulid Term::Table ja Test2::Suite, mis on mõeldud unit-testide loomiseks. Uuendatud on järgmiste moodulite versioone: Archive::Tar, Compress::Raw::Bzip2, Compress::Raw::Zlib, Data::Dumper,
DB_File, File::Compare, File::Find, Getopt::Long, Hash::Util, HTTP::Tiny, IO, Math::BigInt, PerlIO::encoding, Tie::File, Time::HiRes jne. - Lisatud toetus operatsioonisüsteemile Serenity OS.
- Kaks haavatavust on parandatud:
- CVE-2023-47038 — bufi ületimi, kullanıcı tanımlı hatalı Unicode özelliklerinin işlenmesi sırasında oluşur. Bu sorun, özel olarak hazırlanmış düzenli ifadelerin işlenmesi sırasında 1 baytlık bir bellek taşmasına yol açabilir.
- CVE-2023-47039 — Windows platformunda cmd.exe dosyasının değiştirilmesi olasılığı, PATH ortam değişkenindeki mevcut çalışma dizininin, cmd.exe dosyasını içeren sistem dizininden daha öncelikli olması nedeniyle ortaya çıkmaktadır.
Allikas: opennet.ru
