Po roku prac rozwojowych opublikowano релиз новой стабильной ветки языка программирования Perl — 5.44. Podczas przygotowywania нового выпуска было изменено около 270 тысяч строк кода (без документации и автоматически сгенерированного кода — 110 тысяч), изменения затронули 860 файлов, в разработке принял участие 71 разработчик.
Ветка 5.44 выпущена в соответствии с утверждённым тринадцать лет назад фиксированным графиком разработки, подразумевающим выпуск новых стабильных веток раз в год и корректирующих релизов — раз в три месяца. Примерно через месяц планируется выпустить первый корректирующий релиз Perl 5.44.1, в котором будут исправлены наиболее значительные ошибки, выявленные в процессе внедрения Perl 5.44.0. Одновременно с выходом Perl 5.44 прекращена поддержка ветки 5.40, для которой обновления могут быть выпущены в будущем только в случае выявления критических проблем с безопасностью. Rozpoczęto proces rozwoju eksperymentalnej wersji 5.45, na podstawie której w pierwszej połowie 2027 roku zostanie stworzona stabilna wersja Perl 5.46, o ile nie zapadnie decyzja o przejściu na numerację 7.x.
Kluczowe zmiany:
- Dodano eksperymentalna możliwość używania nazwanych parametrów w sygnaturach funkcji, definiujących listę przekazywanych do funkcji zmiennych nie w treści funkcji, a podczas jej deklaracji. Nowa możliwość pozwala na przekazywanie parametrów w dowolnej kolejności za pomocą par klucz/wartość oraz składni, jak przy przypisywaniu elementów w hashach:
- старый синтаксис: 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 при единовременном извлечением сразу нескольких значений в одной итерации цикла. Например, можно сформировать алиас для элемента хэша c массивом при переборе разом ключей и значений хэша: use v5.44; use feature qw( refaliasing declared_refs ); my %hash = ( one => [1], two => [2, 2], ); foreach my ( $key, @items ) ( %hash ) { say "The $key array contains: @items"; } # До версии 5.44 потребовалось бы выполнять разыменование: foreach my ( $key, $var ) ( %hash ) { say "The $key array contains: @$var"; } # Без экспериментальных возможностей refaliasing и declared_refs: foreach my $key (keys %hash) { say "The $key array contains: @{$hash{$key}}"; }
- В регулярных выражениях реализован экспериментальный режим ‘enhanced_xx’, позволяющий использовать модификатор /xx с классами символов в квадратных скобках ([a-zA-Z]) для их разделения на несколько строк или подстановки комментариев. Например, условие if ($text =~ m/[a-zA-Z]/){ можно оформить так: if ($text =~ m/[ a-z # строчные буквы A-Z # заглавные буквы ]/xx) {
- W generatorze pseudolosowych liczb do pozyskiwania entropii używane jest wywołanie systemowe getentropy() w systemach, które je obsługują (Linux, BSD, macOS). W pozostałych systemach entropię pozyskuje się poprzez odczyt z urządzenia /dev/urandom lub użycie hasza z czasu, identyfikatora procesu oraz wartości wskaźnika.
- Dodano wsparcie dla specyfikacji Unicode 17.0.
- Zagwarantowano ścisłe przestrzeganie zasad Unicode dotyczących nazw identyfikatorów oraz grup wyrażeń regularnych, w których teraz zabronione jest używanie około 160 znaków Unicode, które wcześniej należały do klasy w. Na przykład, z działania klasy w, obejmującej wszystkie litery, cyfry i znak podkreślenia, wykluczono litery łacińskie w kółkach, które przypominają rzeczywiste litery, ale nimi nie są. Zmiana ta dotyczy tylko programów korzystających z trybu use utf8.
- Usunięto podatności spowodowane przepełnieniami bufora w funkcjach Perl_study_chunk (CVE-2026-8376, występuje w 32-bitowych wersjach) oraz S_measure_struct (CVE-2026-57432), a także przepełnienie 16-bitowego licznika w silniku Regex (CVE-2026-13221), co może prowadzić do błędnego działania wyrażenia regularnego.
- Użycie operatora goto do przechodzenia do pozycji wewnątrz pętli oraz konstrukcji blokowych jest zabronione. Możliwość ta została uznana za przestarzałą w 2010 roku.
- Wprowadzono optymalizacje wydajności, które przyspieszyły operacje dodawania, odejmowania i mnożenia liczb całkowitych, przetwarzanie sygnatur funkcji oraz wypełnianie haseł z list w formacie klucz/wartość z ustalonymi w czasie kompilacji kluczami w postaci stringów.
Źródło: linux.org.ru
