Выпущен Perl 5.30

Вчера, 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 года.

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

  • Функции Perl API C sv_utf8_downgrade и sv_utf8_decode больше не считаются экспериментальными.

  • Реализована экспериментальная поддержка выражений просмотра назад переменной длины, таких как «(?<=foo?)" and "(?
  • Максимальное значение спецификатора размера ("n") в блоках регулярных выражений "{m,n}" увеличено с 32767 до 65534.
  • Поддержка Юникод 12.1.
  • Добавлена ограниченная поддержка подстановочных знаков в спецификациях значений свойств Unicode (не знаю, как правильно перевести).

    Например, выражение «qr! \p{nv= /(Эx) \A [0-5] \z / }!» позволяет выбрать все символы Юникода, определяющие числа от 0 до 5, включая тайское или бенгальское написание чисел.

  • Реализована поддержка qr'\N{name}' (именные символы внутри регулярных выражений, разделенные одинарными кавычками; ранее такое регулярное выражение приводило к ошибке).

  • Теперь можно скомпилировать Perl, используя только потокобезопасные операции локали (-Accflags='-DUSE_THREAD_SAFE_LOCALE').

  • Комбинация флагов «-Dv» (расширенный вывод отладки) и «-Dr» (отладка регулярных выражений) теперь приводит к включению всех возможных режимов отладки регулярных выражений.

  • В функцию package() добавлена защита от возврата неверных последовательностей Юникода.

Удаление функций и несовместимые изменения:
  • Присвоение ненулевого значения специальной переменной $[ (индекс первого элемента массива) теперь приводит к фатальной ошибке.

  • Единственными символами, которые можно использовать в качестве разделителей строк и подстановочных знаков, теперь являются графемы .

    (составные символы Юникода не допускаются).

  • Некоторые ранее нерекомендовавшиеся варианты использования неэкранированной левой скобки "{" в шаблонах регулярных выражений теперь запрещены.

  • Вызов sysread(), syswrite(), send() или Recv() во время обработки дескриптора :utf8 теперь является фатальной ошибкой.

  • Запрещается использовать «my» в тождественно ложных условных операторах (например, «my $x if 0»).

  • Удалена поддержка специальной переменной.

    $* (многострочный поиск).

    Допустимые альтернативы: «/s» и «/m».

  • Удалена поддержка специальной переменной.

    $# (вывод форматированного числа).

  • Имя функции dump() теперь должно быть указано явно (CORE::dump).

  • Функция File::Glob::glob была удалена (вам следует использовать File::Glob::bsd_glob).

  • Планировалось прекратить поддержку использования макросов, выполняющих операции с UTF-8 в XS-коде (блоках C), но затем было решено отложить это до версии 5.32.
Улучшения производительности:
  • Перевести UTF-8 в кодовые точки (не знаю как перевести) теперь реализован как конечный автомат, что также приводит к увеличению производительности — например, ord("\x7fff") теперь требует на 12% меньше инструкций.

    Проверка правильности последовательностей символов UTF-8 также реализована как конечный автомат и выполняется быстрее.

  • Рекурсивные вызовы были удалены из Finalize_op().

  • Сделаны незначительные оптимизации кода для свертывания одинаковых символов и определения классов символов в регулярных выражениях.

  • Оптимизировано преобразование определений знакового типа в беззнаковый (IV в UV).

  • Алгоритм преобразования целых чисел в строку был ускорен за счет обработки сразу двух цифр вместо одной.

  • Улучшения внесены по результатам анализа LGTM.
  • Оптимизирован код в файлах regcomp.c, regcomp.h и regexec.c.
  • Сопоставление регулярных выражений, таких как "qr/[^a]/", происходит значительно быстрее в случаях, когда "a" является символом ASCII (случаи, отличные от ASCII "a", также могут показывать повышение производительности, но при определенных условиях).

Теги: #открытый исходный код #perl #perl5
Вместе с данным постом часто просматривают: