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

23 мая 2019 года

После 11 месяцев разработки состоялся релиз новой стабильной ветки языка программирования Perl - 5.30. При подготовке нового выпуска было изменено около 620 тыс. строк кода, изменения затронули 1300 файлов, в разработке приняли участие 58 разработчиков.

Ветка 5.30 выпущена в соответствии с утверждённым шесть лет назад фиксированным графиком разработки, подразумевающим выпуск новых стабильных веток раз в год и корректирующих релизов - раз в три месяца. Примерно через месяц планируется выпустить первый корректирующий релиз Perl 5.30.1, в котором будут исправлены наиболее значительные ошибки, выявленные в процессе внедрения Perl 5.30.0. Одновременно с выходом Perl 5.30 прекращена поддержка ветки 5.26, для которой в будущем могут быть выпущены обновления только в случае выявления критических проблем с безопасностью. Также начался процесс разработки экспериментальной ветки 5.31, на базе которой в мае 2020 года будет сформирован стабильный релиз Perl 5.32.

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

  • В регулярные выражения добавлена экспериментальная поддержка операций "(?<!pattern)" и "(?<=pattern)" для ограниченного обращения к ранее обработанным именованным шаблонам. Определение шаблона должно быть в пределах 255 символов от места обращения;
  • До 65534 увеличено максимальное значение спецификатора размера ("n") в блоках "{m,n}" регулярных выражений;
  • Добавлена ограниченная поддержка масок для выделения определённых категорий символов в регулярных выражениях, охватывая разные наборы Unicode. Например, выражение "qr! \p{nv= /(?x) \A [0-5] \z / }!" позволяет выделить все Unicode-символы, определяющие цифры от 0 до 5, включая тайские или бенгальские варианты написания цифр;
  • В регулярных выражениях добавлена поддержка именованных символов

внутри шаблонов, ограниченных одинарными кавычками (qr'\N{name}');

  • Поддержка спецификации Unicode обновлена до версии 12.1. Снят признак экспериментальной разработки с вызовов sv_utf8_downgrade и sv_utf8_decode, используемых при разработке расширений на языке Си;
  • Добавлена возможность сборки perl с реализацией операций с локалью, поддерживающей работу в многопоточном режиме (-Accflags='-DUSE_THREAD_SAFE_LOCALE'). Ранее подобная реализация использовалась только при сборке многопоточного варианта Perl, а теперь может быть включена для любых сборок;
  • Сочетание флагов "-Dv" (расширенный отладочный вывод) и "-Dr" (отладка регулярных выражений) теперь приводит к включению всех возможных режимов отладки регулярных выражений;
  • Удалены возможности, ранее объявленные устаревшими:
  • В качестве символов-разделителей строк и шаблонов теперь допускается использование только графем (запрещены составные символы Unicode).
  • Прекращена поддержка некоторых давно устаревших форм применения в регулярных выражениях символа "{" без его экранирования.
  • Запрещено использование функций sysread(), syswrite(), recv() и send() с обработчиками ":utf8".
  • Запрещено использования определений "my" в изначально ложных условных операторах (например, "my $x if 0").
  • Удалена поддержка спецпеременных "$*" и "$#".

Прекращена поддержка неявного вызова функции dump() (теперь нужно явно указывать CORE::dump()).

  • Удалена функция File::Glob::glob (нужно использовать File::Glob::bsd_glob).
  • В pack() добавлена защита от возврата некорректных последовательностей Unicode.
  • До следующего выпуска отложено прекращение поддержки использования в коде XS (блоки на Си) макросов, выполняющих операции с UTF-8.
  • Оптимизации производительности:
  • Ускорено выполнение операций трансляции UTF-8 в раскладку символов ( code point), например, выполнение операции ord("\x7fff") теперь требует выполнения на 12% меньше инструкций. Также увеличена производительность операций проверки корректности последовательностей символов UTF-8;
  • Исключены рекурсивные вызовы в функции finalize_op();
  • Внесены небольшие оптимизации в код сворачивания идентичных символов и определения классов символов в регулярных выражениях;
  • Оптимизированы преобразования знаковых определителей типа в беззнаковые (IV в UV);
  • Ускорен алгоритм преобразования целых чисел в строку за счёт обработки разом двух цифр вместо одной;
  • Внесены улучшения, подготовленные по результатам анализа компанией LGTM;
  • Оптимизирован код в файлах regcomp.c, regcomp.h и regexec.c;
  • В регулярных выражениях значительно ускорена обработка шаблонов вида "qr/[^a]/" с символами ASCII.
  • Возобновлена поддержка платформы Minix3. Обеспечена возможность сборки с использованием компилятора Microsoft Visual Studio 2019 (Visual C++ 14.2);
  • Обновлены версии модулей, входящих в базовую поставку. Из основного состава удалены модули B::Debug и Locale::Codes.

Источники

править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Релиз языка программирования Perl 5.30.0», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.