[recovery mode] Вышел Perl 5.30

habr.png

Вчера, 23 мая, состоялся релиз Perl 5.30.0. Новость была объявлена в Usenet-группе perl.perl5.porters одним из ключевых разработчиков Perl — Sawyer X.

По сравнению с предыдущим стабильным релизом, 5.28.0, вышедшим около 11 месяцев назад, было изменено около 620.000 строк кода, изменения затронули 1300 файлов, в разработке приняли участие 58 авторов. Изменения непосредственно исходного кода (только .pm, .t, .c и .h файлы) оцениваются в ~510.000 строк и 750 файлов.

Открыта разработка следующей ветки 5.31. Выпуск следующего стабильного релиза запланирован на май 2020 года.

Ключевые изменения:


  • C-функции Perl API sv_utf8_downgrade и sv_utf8_decode более не считаются экспериментальными (experimental).
  • Реализована экспериментальная поддержка lookbehind-выражений переменной длины, таких как например »(? <=foo?)" и "(?
  • Максимальное значение спецификатора размера («n») в блоках »{m, n}» регулярных выражений увеличено с 32767 до 65534.
  • Поддержка Unicode 12.1.
  • Добавлена ограниченная поддержка масок (wildcards) в Unicode property value specifications (не знаю как перевести правильно). Например, выражение «qr! \p{nv= /(? x) \A [0–5] \z / }!» позволяет выделить все Unicode-символы, определяющие цифры от 0 до 5, включая тайские или бенгальские варианты написания цифр.
  • Реализована поддержка qr'\N{name}' (именованных символов внутри регулярных выражений, ограниченных одинарными кавычками; ранее такой регексп приводил к ошибке).
  • Теперь можно скомпилировать Perl с использованием только thread-safe операций с локалями (-Accflags='-DUSE_THREAD_SAFE_LOCALE').
  • Сочетание флагов »-Dv» (расширенный отладочный вывод) и »-Dr» (отладка регулярных выражений) теперь приводит к включению всех возможных режимов отладки регулярных выражений.
  • В pack () добавлена защита от возврата некорректных последовательностей Unicode.

Удаления фич и несовместимые изменения:


  • Присвоение ненулевого значения спецпеременной $[ (индекс первого элемента массива) теперь приводит к фатальной ошибке.
  • В качестве символов-разделителей строк и шаблонов теперь допускается использование только графем. (запрещены составные символы Unicode).
  • Некоторые ранее устаревшие способы использования неэкранированной левой скобки »{» в шаблонах регулярных выражений теперь запрещены.
  • Вызов sysread (), syswrite (), send () или recv () при обработке дескриптора : utf8 теперь является фатальной ошибкой.
  • Запрещено использование «my» в тождественно ложных условных операторах (например, «my $x if 0»).
  • Удалена поддержка спецпеременной $* (многострочный поиск). Корректной альтернативой являются »/s» и »/m».
  • Удалена поддержка спецпеременной $# (форматированный вывод чисел).
  • Имя функции dump () теперь нужно явно квалифицировать (CORE: dump).
  • Удалена функция File: Glob: glob (нужно использовать File: Glob: bsd_glob).
  • Планировалось прекращение поддержки использования в коде XS (блоки на Си) макросов, выполняющих операции с UTF-8, но затем было решено это отложить до версии 5.32.

Улучшения производительности:


  • Трансляция UTF-8 в code points (не знаю как перевести) теперь реализована в виде конечного автомата, что в том числе ведёт к повышению производительности — например, ord (»\x7fff») теперь требует на 12% меньше инструкций. Проверка корректности последовательностей символов UTF-8 также реализована в виде конечного автомата и происходит быстрее.
  • Из finalize_op () убраны рекурсивные вызовы.
  • Внесены небольшие оптимизации в код сворачивания идентичных символов и определения классов символов в регулярных выражениях.
  • Оптимизированы преобразования знаковых определителей типа в беззнаковые (IV в UV).
  • Ускорен алгоритм преобразования целых чисел в строку за счёт обработки разом двух цифр вместо одной.
  • Внесены улучшения, подготовленные по результатам анализа компанией LGTM.
  • Оптимизирован код в файлах regcomp.c, regcomp.h и regexec.c.
  • Матчинг регулярных выражений вида «qr/[^a]/» значительно ускорен для случаев, когда «a» — ASCII символ (случаи не-ASCII «a» также могут показывать увеличение производительности, но при определённых условиях).

© Habrahabr.ru