Домой Новости Софт и сервисы Релиз языка программирования Perl 5.44

Релиз языка программирования Perl 5.44

Опубликован стабильный релиз языка программирования Perl 5.44 с новыми функциями и исправлениями безопасности

Обновление и релиз Perl 5.44
Выход новой стабильной версии Perl 5.44 Источник: linux.org.ru

После года активной разработки состоялся релиз новой стабильной ветки популярного языка программирования Perl под номером 5.44. В процессе подготовки этого масштабного обновления разработчики изменили около 270 тысяч строк программного кода, если не учитывать документацию и автоматически сгенерированные файлы. Изменения затронули 860 различных файлов, а непосредственное участие в создании новой версии приняли 71 программист.

Выход ветки 5.44 полностью соответствует строгому графику, который поддерживается сообществом уже на протяжении тринадцати лет. Данный план предполагает выпуск новых стабильных веток ровно раз в год, а корректирующих релизов — каждые три месяца. Примерно через месяц создатели планируют представить первый патч Perl 5.44.1, призванный исправить наиболее заметные недочёты, которые могут выявиться на этапе массового внедрения. Одновременно с этим официальная поддержка предыдущей ветки 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, содержащих сразу несколько переменных. Данная функция позволяет создавать полноценный алиас прямо во время обработки цикла при одновременном извлечении нескольких значений за одну итерацию. Например, можно легко сформировать указатель для элемента хэша, содержащего массив, при параллельном переборе ключей и значений:
    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) {

  • Для сбора энтропии во встроенном генераторе псевдослучайных чисел теперь задействуется системный вызов 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-разрядного счётчика в самом движке регулярных выражений (CVE-2026–13221), чьё срабатывание могло приводить к некорректной работе регулярных выражений.
  • Окончательно запрещён переход на внутренние позиции циклов и блочных конструкций с помощью классического оператора goto. Соответствующая возможность была переведена в статус устаревших ещё в 2010 году.
  • Проведены масштабные внутренние оптимизации производительности. Они позволили заметно ускорить базовые арифметические операции сложения, вычитания и умножения целых чисел, повысить скорость обработки сигнатур функций, а также ускорить процедуру заполнения хэшей из списков формата ключ/значение, если сами ключи известны компилятору ещё на этапе компиляции.
Источник: https://www.linux.org.ru