Available ang Perl 5.36.0 programming language

Pagkatapos ng isang taon ng pag-unlad, ang paglabas ng isang bagong matatag na sangay ng Perl programming language - 5.36 - ay nai-publish. Sa paghahanda ng bagong release, humigit-kumulang 250 libong linya ng code ang binago, ang mga pagbabago ay nakaapekto sa 2000 na mga file, at 82 mga developer ang nakibahagi sa pag-unlad.

Ang Branch 5.36 ay inilabas alinsunod sa nakapirming iskedyul ng pag-unlad na naaprubahan siyam na taon na ang nakakaraan, na nagpapahiwatig ng pagpapalabas ng mga bagong stable na sangay isang beses sa isang taon at corrective release bawat tatlong buwan. Sa humigit-kumulang isang buwan, pinlano na ilabas ang unang corrective release ng Perl 5.36.1, na magwawasto sa pinakamahalagang error na natukoy sa panahon ng pagpapatupad ng Perl 5.36.0. Kasabay ng paglabas ng Perl 5.36, ang suporta para sa 5.32 na sangay ay hindi na ipinagpatuloy, kung saan ang mga pag-update sa hinaharap ay maaaring ilabas lamang kung matukoy ang mga kritikal na problema sa seguridad. Nagsimula na rin ang proseso ng pag-develop ng experimental branch 5.37, kung saan ang isang stable na release ng Perl 2023 ay bubuo sa Mayo o Hunyo 5.38, maliban kung may ginawang desisyon na lumipat sa numbering 7.x.

Mga pangunahing pagbabago:

  • Ang suporta para sa mga signature ng function ay na-stabilize at magagamit na ngayon kapag tinukoy ang "gamitin ang v5.36" pragma, na nagbibigay-daan sa iyong tahasang tukuyin ang listahan ng mga variable na ginagamit sa function at i-automate ang mga operasyon ng pagsuri at pagtatalaga ng mga halaga mula sa isang hanay ng mga papasok na parameter. Halimbawa, dating ginamit na code: sub foo { die "Masyadong maraming argumento para sa subroutine" maliban kung @_ >= 2; mamatay "Masyadong kakaunti ang mga argumento para sa subroutine" maliban kung @_ <= 2; my($kaliwa, $kanan) = @_; ibalik ang $left + $right; }

    kapag gumagamit ng mga lagda, maaari itong palitan ng:

    sub foo ($kaliwa, $kanan) { return $left + $right; }

    Kung tatawag ka ng foo na may higit sa dalawang argumento, ang interpreter ay maghahagis ng error. Sinusuportahan din ng listahan ang isang espesyal na variable na "$", na nagpapahintulot sa iyo na huwag pansinin ang ilan sa mga argumento, halimbawa, "sub foo ($left, $, $right)" ay magbibigay-daan sa iyo upang kopyahin lamang ang una at ikatlong argumento sa mga variable , habang eksaktong tatlo ang dapat ipasa sa argumento ng function.

    Ang signature syntax ay nagpapahintulot din sa iyo na tukuyin ang mga opsyonal na argumento at tukuyin ang mga default na halaga kung ang isang argumento ay nawawala. Halimbawa, sa pamamagitan ng pagtukoy sa β€œsub foo ($left, $right = 0)” nagiging opsyonal ang pangalawang argumento at kung wala ito, ipinapasa ang value na 0. Sa pagpapatakbo ng pagtatalaga, maaari mong tukuyin ang mga arbitrary na expression, kabilang ang paggamit ng iba pang mga variable mula sa listahan o mga global na variable. Ang pagtukoy ng hash o array sa halip na isang variable (halimbawa, "sub foo ($left, @right)") ay magbibigay-daan sa isa o higit pang argument na maipasa.

  • Sa mga function na idineklara gamit ang mga lagda, ang suporta para sa opsyonal na pagtatalaga ng parameter mula sa array na "@_" ay idineklara na eksperimental at magreresulta sa isang babala (ibibigay lang ang babala kung ang @_ ay ginagamit sa mga function na ipinahayag gamit ang bagong syntax). Halimbawa, may ipapakitang babala para sa function: gumamit ng v5.36; sub f ($x, $y = 123) { sabihin ang "Ang unang argumento ay $_[0]"; }
  • Pinatatag at available kapag tinukoy ang "use v5.36" pragma, ang infix operator na "isa" para sa pagsuri kung ang isang object ay isang instance ng tinukoy na klase o isang klase na nagmula rito. Halimbawa: if( $obj isa Package::Name ) { … }
  • Kapag tinukoy ang "use v5.36" pragma, ang pagpoproseso ng babala ay pinagana (ang "use warnings" mode ay isinaaktibo).
  • Kapag tinukoy ang pragma na "gamitin ang v5.36", ang suporta para sa hindi direktang notasyon para sa pagtawag sa mga bagay ("hindi direktang tampok") ay hindi pinagana - isang hindi napapanahong paraan ng pagtawag sa mga bagay, kung saan ginagamit ang isang puwang sa halip na "->" ("paraan $ object @param” sa halip na β€œ$object-> $method(@param)"). Halimbawa, sa halip na "aking $cgi = bagong CGI" kailangan mong gamitin ang "aking $cgi = CGI->bago".
  • Kapag tinukoy ang "gamitin ang v5.36" pragma, ang suporta para sa pagtulad sa mga multidimensional na array at hash sa Perl 4 na istilo ("feature multidimensional") ay hindi pinagana, na nagpapahintulot sa indikasyon ng ilang key na maisalin sa isang intermediate array (halimbawa, " Ang $hash{1, 2}”) ay na-convert sa "$hash{join($;, 1, 2)}").
  • Kapag tinukoy ang "gamitin ang v5.36" pragma, ang suporta para sa eksperimental na branching mechanism ("feature switch"), katulad ng switch at case statement, ay hindi pinagana (Ginagamit ni Perl ang ibinigay at kapag ang mga keyword). Upang magamit ang tampok na ito, simula sa Perl 5.36, dapat mong tahasang tukuyin ang 'gamitin ang tampok na "switch"', at kung tinukoy mo ang "gamitin ang bersyon", hindi na ito awtomatikong papaganahin.
  • Ang suporta para sa mga karagdagang klase ng character sa mga square bracket sa loob ng mga regular na expression ay na-stabilize at available bilang default. Nagbibigay-daan sa iyo ang feature na magsagawa ng mga tugma gamit ang mga advanced na panuntunan para sa intersection, pagbubukod, at pagsasama-sama ng mga hanay ng mga character. Halimbawa, '[AZ - W]' - mga character mula A hanggang Z hindi kasama ang W.
  • Ang suporta para sa mga operasyong "(?", "( )", "{ }" at "[ ]" ay bahagyang nagpapatatag at available bilang default; maaari mong gamitin ang mga simbolo na "" "", "" "", atbp. Halimbawa. , "qr"pat "".
  • Ang pagtawag sa pag-uuri ng function na walang mga argumento ay ipinagbabawal, na magreresulta na ngayon sa isang error. @a = uri-uriin @walang laman; # ay magpapatuloy @a = sort; # isang error ang ipi-print @a = sort(); # isang error ang ipi-print
  • Ang isang bagong command line flag na "-g" ay iminungkahi, na nagbibigay-daan sa mode ng pag-load ng buong file sa kabuuan, sa halip na linya sa pamamagitan ng linya. Ang pagkilos ng bandila ay katulad ng indikasyon na "-0777".
  • Ang suporta para sa detalye ng Unicode ay na-update sa bersyon 14.0.
  • Nagbibigay ng agarang pangangasiwa ng mga floating point exception (SIGFPE) na katulad ng iba pang mga alarm gaya ng SIGSEGV, na nagbibigay-daan sa iyong itali ang sarili mong mga humahawak para sa SIGFPE sa pamamagitan ng $SIG{FPE}, halimbawa ang pag-output sa numero ng linya kung saan nangyari ang problema.
  • Mga na-update na bersyon ng mga module na kasama sa pangunahing pakete.
  • Nagdagdag ng mga pag-optimize ng pagganap. Ang kakayahang mag-imbak ng malalaking hash key nang mas mahusay nang hindi gumagamit ng mga shared string table ay ibinigay. Ang pagganap ng paglikha ng mga bagong halaga ng scalar ay makabuluhang napabuti, halimbawa ang sumusunod na code ay tumatakbo nang 30% na mas mabilis: $str = "A" x 64; para sa (0..1_000_000) { @svs = split //, $str }
  • Ang interpreter code ay nagsimulang gumamit ng ilan sa mga construct na tinukoy sa pamantayan ng C99. Ang Building Perl ay nangangailangan na ngayon ng isang compiler na sumusuporta sa C99. Ang suporta para sa pagbuo sa mga mas lumang bersyon ng MSVC++ (pre-VC12) ay hindi na ipinagpatuloy. Nagdagdag ng suporta para sa pagbuo sa Microsoft Visual Studio 2022 (MSVC++ 14.3).
  • Ang suporta para sa AT&T UWIN, DOS/DJGPP at Novell NetWare platform ay hindi na ipinagpatuloy.

Pinagmulan: opennet.ru

Magdagdag ng komento