Ang Perl 7 ay walang putol na magpapatuloy sa pagbuo ng Perl 5 nang hindi sinisira ang backward compatibility

Ang Perl Project Governing Council ay nagbalangkas ng mga plano para sa karagdagang pagpapaunlad ng Perl 5 branch at ang paglikha ng isang Perl 7 branch. Sa panahon ng mga talakayan, ang Governing Council ay sumang-ayon na hindi katanggap-tanggap na sirain ang pagkakatugma sa code na nakasulat na para sa Perl 5, maliban kung masira compatibility ay kinakailangan upang ayusin ang mga kahinaan. Napagpasyahan din ng Konseho na ang wika ay dapat umunlad at ang mga bagong tampok ay dapat na mas masinsinang isulong, habang ginagawang mas madaling ma-access ang mga umuusbong na inobasyon at hinihikayat ang pag-aampon.

Hindi tulad ng mga orihinal na intensyon na payagan ang mga pagbabago na sumisira sa backward compatibility na maisama bilang default sa Perl 7 branch, ang bagong plano ay unti-unting ilipat ang Perl 5 branch sa Perl 7 nang hindi sinisira ang backward compatibility sa umiiral na code. Ang paglabas ng Perl 7.0 ay hindi naiiba sa konsepto mula sa susunod na sangay ng Perl 5.xx.

Ang pagbuo ng mga bagong release ng Perl 5 ay magpapatuloy tulad ng dati - ang mga bagong feature na idinagdag sa branch na hindi tugma sa lumang code ay, tulad ng dati, ay isasama lamang kung ang "use version" o "use feature feature" pragma ay tahasang tinukoy sa code. Halimbawa, ang Perl 5.010 ay nagpakilala ng bagong keyword na "sabihin", ngunit dahil ang umiiral na code ay maaaring gumamit ng mga function na pinangalanang "sabihin", ang suporta para sa bagong keyword ay pinagana lamang sa pamamagitan ng tahasang pagtukoy sa "gamitin ang tampok na 'sabihin'" na pragma.

Ang bagong syntax na idinagdag sa wika, na kapag naproseso sa mga nakaraang release ay humantong sa isang error, ay nagiging available kaagad nang hindi nangangailangan ng mga espesyal na pragma. Halimbawa, ang Perl 5.36 ay magpapasimula ng isang pinasimpleng syntax para sa pagproseso ng maramihang mga halaga ng listahan nang sabay-sabay (β€œforeach my ($key, $value) (%hash) {”) na agad na magiging available, kahit na sa code na walang β€œuse v5.36” pragma.

Sa kasalukuyang anyo nito, ang Perl 5.36 ay gumagamit ng "use v5.36" pragma upang paganahin ang 13 interoperability-breaking feature ('sabihin', 'estado', 'current_sub', 'fc', 'lexical_subs', 'signatures', 'isa ', ' bareword_filehandles', 'bitwise', 'evalbytes', 'postderef_qq', 'unicode_eval' at 'unicode_strings'), paganahin ang mga mode na "gamitin ang mahigpit" at "gamitin ang mga babala" bilang default at huwag paganahin ang suporta para sa legacy na hindi direktang notasyon para sa pagtawag ng mga bagay (kapag sa halip na β€œ- >" ay gumagamit ng puwang) at Perl 4 na istilong multidimensional na mga array at hashes ("$hash{1, 2}").

Kapag sapat na ang mga pagbabagong naipon, sa halip na ang susunod na release ng Perl 5.x, isang bersyon ng Perl 7.0 ang bubuo, na magiging isang uri ng state snapshot, ngunit mananatiling ganap na backward compatible sa Perl 5. Upang paganahin ang mga pagbabago at setting na break compatibility, kakailanganin mong tahasang idagdag ang "use v7" pragma sa code. . Yung. code na may "use v7" pragma ay maaaring ituring bilang "modernong Perl", kung saan available ang mga pagbabago sa wikang lumalabag sa compatibility, at walang - "konserbatibong Perl", na mananatiling ganap na pabalik na katugma sa mga nakaraang release.

Pinagmulan: opennet.ru

Magdagdag ng komento