Gjuha e programimit Perl 5.36.0 e disponueshme

Pas një viti zhvillimi, është publikuar lëshimi i një dege të re të qëndrueshme të gjuhës programuese Perl - 5.36. Në përgatitjen e versionit të ri, rreth 250 mijë rreshta kodi u ndryshuan, ndryshimet prekën 2000 skedarë dhe 82 zhvillues morën pjesë në zhvillim.

Dega 5.36 u lëshua në përputhje me planin fiks të zhvillimit të miratuar nëntë vjet më parë, që nënkupton lëshimin e degëve të reja të qëndrueshme një herë në vit dhe lëshimet korrigjuese çdo tre muaj. Në rreth një muaj, është planifikuar të lëshohet versioni i parë korrigjues i Perl 5.36.1, i cili do të korrigjojë gabimet më të rëndësishme të identifikuara gjatë zbatimit të Perl 5.36.0. Së bashku me lëshimin e Perl 5.36, mbështetja për degën 5.32 u ndërpre, për të cilën përditësimet e ardhshme mund të lëshohen vetëm nëse identifikohen probleme kritike të sigurisë. Ka filluar gjithashtu procesi i zhvillimit të degës eksperimentale 5.37, mbi bazën e së cilës do të formohet një lëshim i qëndrueshëm i Perl 2023 në maj ose qershor 5.38, përveç nëse merret një vendim për të kaluar në numërimin 7.x.

Ndryshimet kryesore:

  • Mbështetja për nënshkrimet e funksionit është stabilizuar dhe tani është e disponueshme kur specifikoni pragmën "përdor v5.36", duke ju lejuar të përcaktoni në mënyrë eksplicite listën e variablave të përdorur në funksion dhe të automatizoni operacionet e kontrollit dhe caktimit të vlerave nga një grup parametrat e hyrjes. Për shembull, kodi i përdorur më parë: sub foo { die "Shumë argumente për nënrutinë" përveç nëse @_ >= 2; die "Shumë pak argumente për nënprogram" përveç nëse @_ <= 2; im ($majtas, $djathtas) = ​​@_; kthej $majtas + $djathtas; }

    kur përdorni nënshkrime, ai mund të zëvendësohet nga:

    subfoo ($majtas, $djathtas) { kthe $majtas + $djathtas; }

    Nëse telefononi foo me më shumë se dy argumente, përkthyesi do të hedhë një gabim. Lista mbështet gjithashtu një variabël të veçantë "$", i cili ju lejon të injoroni disa nga argumentet, për shembull, "sub foo ($left, $, $right)" do t'ju lejojë të kopjoni vetëm argumentet e parë dhe të tretë në variabla. , ndërsa saktësisht tre duhet t'i kalohen argumentit të funksionit.

    Sintaksa e nënshkrimit gjithashtu ju lejon të specifikoni argumente opsionale dhe të specifikoni vlerat e paracaktuara nëse një argument mungon. Për shembull, duke specifikuar "sub foo ($left, $right = 0)" argumenti i dytë bëhet opsional dhe nëse ai mungon, kalohet vlera 0. Në operacionin e caktimit, mund të specifikoni shprehje arbitrare, duke përfshirë përdorimin e variablave të tjerë nga lista ose variablat globale. Specifikimi i një hash ose grupi në vend të një ndryshoreje (për shembull, "sub foo ($left, @right)") do të lejojë që një ose më shumë argumente të kalojnë.

  • Në funksionet e deklaruara duke përdorur nënshkrime, mbështetja për caktimin e parametrave shtesë nga grupi "@_" deklarohet eksperimental dhe do të rezultojë në një paralajmërim (paralajmërimi lëshohet vetëm nëse @_ përdoret në funksionet e deklaruara duke përdorur sintaksën e re). Për shembull, do të shfaqet një paralajmërim për funksionin: use v5.36; nën f ($x, $y = 123) { thuaj "Argumenti i parë është $_[0]"; }
  • I stabilizuar dhe i disponueshëm kur specifikon pragmën "use v5.36", operatori infix "isa" për të kontrolluar nëse një objekt është një shembull i klasës së specifikuar ose një klasë që rrjedh prej saj. Për shembull: if( $obj isa Paketa::Emri ) { … }
  • Kur specifikoni pragmën "përdorni v5.36", aktivizohet përpunimi i paralajmërimit (modaliteti "paralajmërimet e përdorimit" është aktivizuar).
  • Kur specifikoni pragmën "use v5.36", mbështetja për shënimin indirekt për thirrjen e objekteve ("veçori indirekte") është i çaktivizuar - një mënyrë e vjetëruar e thirrjes së objekteve, në të cilën përdoret një hapësirë ​​në vend të "->" ("metoda $ objekt @param” në vend të “$object-> $method(@param)”). Për shembull, në vend të "my $cgi = CGI i ri" ju duhet të përdorni "my $cgi = CGI->i ri".
  • Kur specifikoni pragmën "përdorni v5.36", mbështetja për emulimin e vargjeve dhe hasheve shumëdimensionale në stilin Perl 4 ("veçori shumëdimensionale") është i çaktivizuar, duke lejuar që treguesi i disa çelësave të përkthehet në një grup të ndërmjetëm (për shembull, " $hash{1, 2}”) u konvertua në "$hash{join($;, 1, 2)}").
  • Kur specifikoni pragmën "përdorni v5.36", mbështetja për mekanizmin e degëzimit eksperimental ("çelësi i veçorive"), i ngjashëm me deklaratat e çelësit dhe rastit, është i çaktivizuar (Perl përdor fjalë kyçe të dhëna dhe kur). Për të përdorur këtë veçori, duke filluar me Perl 5.36, duhet të specifikoni në mënyrë eksplicite 'përdorni funksionin "ndërprerës"' dhe nëse specifikoni "përdorni versionin", ai nuk do të aktivizohet më automatikisht.
  • Mbështetja për klasat shtesë të karaktereve në kllapa katrore brenda shprehjeve të rregullta është stabilizuar dhe është e disponueshme si parazgjedhje. Veçoria ju lejon të kryeni ndeshje duke përdorur rregulla të avancuara për kryqëzimin, përjashtimin dhe bashkimin e grupeve të karaktereve. Për shembull, "[AZ - W]" - karaktere nga A në Z duke përjashtuar W.
  • Mbështetja për operacionet "(?", "( )", "{ }" dhe "[ ]" është pjesërisht e stabilizuar dhe e disponueshme si parazgjedhje; ju mund të përdorni simbolet "" "", "" "", etj. Për shembull , "qr"pat "".
  • Ndalohet thirrja e funksionit të renditjes pa argumente, gjë që tani do të rezultojë në një gabim. @a = rendit @bosh; # do të vazhdojë @a = rendit; # do të printohet një gabim @a = sort(); # do të printohet një gabim
  • Është propozuar një flamur i ri i linjës komanduese “-g”, i cili mundëson mënyrën e ngarkimit të të gjithë skedarit në tërësi, në vend të rreshtit pas rreshtit. Veprimi i flamurit është i ngjashëm me treguesin "-0777".
  • Mbështetja për specifikimin Unicode është përditësuar në versionin 14.0.
  • Ofron trajtimin e menjëhershëm të përjashtimeve të pikës lundruese (SIGFPE) të ngjashme me alarmet e tjerë si SIGSEGV, duke ju lejuar të lidhni mbajtësit tuaj për SIGFPE nëpërmjet $SIG{FPE}, për shembull duke nxjerrë numrin e linjës ku ndodhi problemi.
  • Versionet e përditësuara të moduleve të përfshira në paketën bazë.
  • Shtuar optimizime të performancës. Është siguruar aftësia për të ruajtur çelësat e mëdhenj hash në mënyrë më efikase pa përdorur tabela të përbashkëta të vargjeve. Performanca e krijimit të vlerave të reja skalare është përmirësuar ndjeshëm, për shembull kodi i mëposhtëm funksionon tani 30% më shpejt: $str = "A" x 64; për (0..1_000_000) { @svs = ndarje //, $str }
  • Kodi i interpretuesit filloi të përdorte disa nga konstruktet e përcaktuara në standardin C99. Ndërtimi i Perl tani kërkon një përpilues që mbështet C99. Mbështetja për ndërtimin në versionet më të vjetra të MSVC++ (para-VC12) është ndërprerë. Mbështetje e shtuar për ndërtimin në Microsoft Visual Studio 2022 (MSVC++ 14.3).
  • Mbështetja për platformat AT&T UWIN, DOS/DJGPP dhe Novell NetWare është ndërprerë.

Burimi: opennet.ru

Shto një koment