3

След година разработка беше публикуван ново стабилно издание на програмен език Perl — 5.44. При подготовката на новото издание бяха променени около 270 хиляди реда код (без документация и автоматично генериран код — 110 хиляди), промените обхванаха 860 файла, в разработката участваха 71 разработчик.

Версия 5.44 беше пусната в съответствие с одобрен график за разработка, създаден преди тринайсет години, който предвижда издаване на нови стабилни версии веднъж годишно и коригиращи издания — на всеки три месеца. Около месец след пускането се планира да бъде издадено първото коригиращо издание Perl 5.44.1, в което ще бъдат поправени най-сериозните грешки, открити по време на внедряването на Perl 5.44.0. В същото време с излизането на Perl 5.44 спира поддръжката на версия 5.40, за която бъдещи актуализации могат да бъдат издадени само в случай на откритие на критични проблеми със сигурността. Започна процесът на разработка на експерименталната версия 5.45, на базата на която в първата половина на 2027 година ще бъде формиран стабилен релиз Perl 5.46, освен ако не бъде взето решение да премине за номерация 7.x.

Ключови промени:

  • Добавена е експерименталната функция за използване на имени параметри в сигнатурите на функции, които определят списъка с променливи, предавани на функцията, не в тялото на функцията, а при нейното обявяване. Новата функция позволява да се предават параметри не в строг ред, а в произволен ред, използвайки двойки ключ/стойност и синтаксис, подобен на задаването на елементи в хешове:
    • стар синтаксис: sub f { my ($x, $y) = @_; …} f(1, 2);
    • сигнатури: sub f ($x, $y) { … } f(1, 2);
    • сигнатури с имени параметри: sub f (:$x, :$y) { … } f(y => 2, x => 1);
  • Добавена експериментална възможност за използване на алиаси (указатели на указатели) в цикли foreach с множество променливи. Реализираната функция позволява създаването на алиас в цикъл foreach чрез едновременно извличане на няколко стойности в една итерация на цикъла. Например, може да се формулира алиас за елемент на хеш с масив при перебиране на ключовете и стойностите на хеша: use v5.44; use feature qw( refaliasing declared_refs ); my %hash = ( one => [1], two => [2, 2], ); foreach my ( $key, @items ) ( %hash ) { say "Масивът $key съдържа: @items"; } # Преди версия 5.44 би било необходимо да се извърши разыменоване: foreach my ( $key, $var ) ( %hash ) { say "Масивът $key съдържа: @$var"; } # Без експерименталните функции refaliasing и declared_refs: foreach my $key (keys %hash) { say "Масивът $key съдържа: @{$hash{$key}}"; }
  • В регулярните изрази е реализиран експерименталният режим 'enhanced_xx', позволяващ използването на модификатора /xx с класове символи в квадратни скоби ([a-zA-Z]) за разделянето им на няколко реда или за вмъкването на коментари. Например, условието if ($text =~ m/[a-zA-Z]/) може да се формулира така: if ($text =~ m/[ a-z # малки букви A-Z # главни букви ]/xx) {
  • В генератора на псевдослучайни числа за получаване на ентропия е задействан системният повик getentropy() на системи с поддръжка (Linux, BSD, macOS). На останалите системи за получаване на ентропия се извършва прочит от устройството /dev/urandom или се използва хеш от времето, идентификатора на процеса и стойността на указателя.
  • Добавена е поддръжка за спецификация Unicode 17.0.
  • Осигурено е строго спазване на правилата на Unicode за имена на идентификатори и групи в регулярните изрази, в които сега е забранено използването на около 160 Unicode символа, които по-рано попадаха под класа w. Например, от действието на класа w, обхващащо всички букви, цифри и символа подчертаване, са изключени латински букви в кръгове, които наподобяват реални букви, но не са такива. Промяната на поведението засяга само програми, използващи режима use utf8.
  • Премахнати са уязвимости, причинени от препълвания на буфера в функциите Perl_study_chunk (CVE-2026-8376, проявяваща се в 32-битови компилации) и S_measure_struct (CVE-2026-57432), както и препълване на 16-битовия брояч в Regex двигателя (CVE-2026-13221), което може да доведе до неправилно сработване на регулярния израз.
  • Забранено е да се използва операторът goto за прехвърляне на позиции вътре в цикли и блокови конструкции. Тази възможност беше обявена за остаряла през 2010 година.
  • Извършени са оптимизации на производителността, които ускориха операциите за събиране, изваждане и умножение на цели числа, обработката на сигнатури на функции и запълването на хешове от списъци във формат ключ/стойност с известни по време на компилация стрингови ключове.

Източник: linux.org.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster