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

Переводчик Google

Candellmans

Ветеран
Сообщения
2,868
Реакции
2,350
Релиз языка программирования Perl 5.32.0

22.06.20
После 13 месяцев разработки состоялся релиз новой стабильной ветки языка программирования Perl - 5.32. При подготовке нового выпуска было изменено около 220 тыс. строк кода, изменения затронули 1800 файлов, в разработке приняли участие 89 разработчиков. Одновременно объявлено о переводе разработки Perl и отслеживания ошибок на платформу GitHub.

1592808855774.webp

Ветка 5.32 выпущена в соответствии с утверждённым семь лет назад фиксированным графиком разработки, подразумевающим выпуск новых стабильных веток раз в год и корректирующих релизов - раз в три месяца. Примерно через месяц планируется выпустить первый корректирующий релиз Perl 5.32.1, в котором будут исправлены наиболее значительные ошибки, выявленные в процессе внедрения Perl 5.32.0. Одновременно с выходом Perl 5.32 прекращена поддержка ветки 5.28, для которой в будущем могут быть выпущены обновления только в случае выявления критических проблем с безопасностью. Также начался процесс разработки экспериментальной ветки 5.33, на базе которой в июне 2021 года будет сформирован стабильный релиз Perl 5.34.

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

  • Добавлен инфиксный оператор "isa" для проверки того, является ли объект экземпляром указанного класса или классом, производным от него. Например "if( $obj isa Package::Name ) { ... }". Оператор пока помечен как экспериментальный.
  • Предоставлена возможность объединения операторов сравнения в цепочки, позволяющие разом сравнить несколько значений, при условии использования операторов с равным приоритетом. Например цепочка "if ( $x < $y <= $z ) {...}" эквивалентна раздельному указанию "if ( $x < $y && $y <= $z ) {...}".
  • Поддержка спецификации Unicode обновлена до версии 13.0. Добавлены новые свойства Unicode - Identifier_Status и Identifier_Type, которые могут применяться для проверки типа Unicode-символа (нетипичный, устаревший, игнорируемый, исключаемый, специализированный и т.п.) и его статуса в контексте безопасности (разрешённые и ограниченные символы).
  • В регулярных выражениях разрешено использование Unicode-свойства Name (именованные символы) вместо "\N{...}", в том числе в шаблонах, например "qr!\p{name=/(SMILING|GRINNING) FACE/}!".
  • Обеспечена работа функций POSIX::mblen(), mbtowc и wctomb с изменяющими своё состояние локалями и в многопоточных приложениях.
  • Убран признак экспериментальной возможности с символьных синонимов операторов регулярных выражений. Например, вместо "(?<=...)" теперь можно указать "(*plb:...)" или "(*positive_lookbehind:...)", что значительно проще запомнить.
  • В регулярных выражениях убран признак экспериментальной возможности со средств для выявления смешивания различных классов Unicode-символов в строке, например, когда в слове используются символы кириллицы и латиницы. Для ограничения области значений только одним типом символов можно использовать выражения вида "qr/(*script_run: \d+ \b )/x" или "qr/(*sr: \b \w+ \b )/x".
  • В константах запрещено применять изменяемые переменные, например "my $var; $sub = sub () { $var };" теперь вызовет ошибку, для избежания которой нужно писать "my $var; $sub = sub () { return $var };".
  • Строка "0" теперь воспринимается как число при указании в операторах определения диапазонов. Например, раньше конструкция '"0" .. "-1"' приводила к генерации диапазона строк от "0" до "99", а теперь будет приводить к генерации пустого списка, как при указании "0 .. -1". Аналогично '"0" .. "9"' приведёт к генерации списка чисел от 0 до 9 , а не строк.
  • Проведена оптимизация производительности: Заметно увеличена производительность сортировки при использовании конструкций вида "sort {$a <=> $b}" и "sort {$b <=> $a}". Реализация my_strnlen ускорена для систем без собственной реализации strnlen. Ускорена работа функций grok_bin_oct_hex, grok_bin, grok_oct, grok_hex и grok_number_flags.
  • В состав включена утилита streamzip для создания zip-файла из входного потока, поставляемая вместе с новым выпуском модуля IO::Compress::Base.
  • Обновлены версии модулей, входящих в базовую поставку. Из основного состава удалён модуль "Pod::Parser".
  • Устранены три уязвимости (CVE-2020-10543, CVE-2020-10878 и CVE-2020-12723), которые могут привести к переполнению буфера или целочисленному переполнению при обработке специально оформленных регулярных выражений. Уязвимости представляют опасность для программ, в которых при построении регулярных выражений используются непроверенные внешние данные (когда внешние данные формируют регулярные выражения, а не используются при проверке).


OpenNet
 
Назад
Сверху Снизу