LINUX.ORG.RU

Perl 5.44

 ,

Perl 5.44

1

4

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

>>> Источник: OpenNET

★★★★★

Проверено: hobbit ()
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от bread

Я бы сказал иначе. Принцип perl TMTOWTDI сложнее в освоении, чем тот же противоположный питоновский «делай так и только так». Вкатичться сложнее, потому что надо больше запоминать и больше думать, когда читаешь чужой код.

Хотя опять же, если всегда использовать use warnings и use strics, а так же не смешивать разные парадигмы в одной программе, простора для манёвров уже сильно меньше(хоть он всё-равно довольно большой).

А с диагностикой там всё нормально, если обкладывать код тестами, которые пишут легко и просто. И если научиться пользовать встроенным в интерпретатор дебагерром.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

Да не, мне не настолько надо, чтобы маты вычитывать. Думал, что там патч какой делать пришлось, типа эту строчку закомментировал или поменял. В любом случае, обратную совместимость действительно сломали.

ПС. Глянул пакет app-arch/p7zip - там питона всего 0,9%. Малая приблуда.

bbc69
()
Ответ на: комментарий от Gin

Common Lisp: «подержи мое пиво». Код, написанный для cmucl в 1997м году, будет работать в cmucl и в 2027м, если был написан в рамках стандарта. Даже код из 1987го можно запустить после некоторого ревью. Но со многими реализациями Scheme и особенно с Racket не все так однозначно

hedgehog_alex
()
Ответ на: комментарий от powerguy

А так же любой линукс. Ядро и половину системных библиотек без perl не собрать. Хотя, конечным пользователям бинарных дистров это может быть и незаметно. Хотя на серверах, много софта так же требуют perl в зависимостях для вспомогательных утилит. Собственно, для чего perl изначально и разрабатывался.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

много софта так же требуют perl в зависимостях для вспомогательных утилит

Например, git-git — ура! :)

dataman ★★★★★
() автор топика
Ответ на: комментарий от shell-script

Собственно, для чего perl изначально и разрабатывался.

Всегда был уверен, что Ларри просто не хватило sed и awk :)

skiminok1986 ★★★★★
()
Ответ на: комментарий от shell-script

Собственно, для чего perl изначально и разрабатывался

Разве не для создания отчетов и обработки форматов данных?

dmitry237 ★★★★★
()
Ответ на: комментарий от dmitry237

Насколько я помню(где-то читал), Ларри задолбался возиться с awk/sed/grep и т.п. для парсинга логов. И сначала сделал вот такую вот обёртку. А потом, чуть позже, решил пойти дальше и основная идея была в том, что можно брать и просто, быстро писать всякие утилиты, помогающие управлять серверами, что сводилось к работе с текстовыми конфигами, всё тем же парсингом логов, быстрым подключениям к разного рода бд, относительно низкоуровневым взаимодействием с ОС и всяким таким. А это даже сейчас чаще всего сводится к этому же. То, что потом на perl начали писать сайтики через cgi(а это по сути всё та же обработка и формирование текста), это побочный эффект. То, что потом другие люди, посчитавшие perl сложным, сделали php, изначально работавший так же через cgi, тоже побочный эффект. А потом уже пошло-поехало.

shell-script ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.