Релиз языка программирования Perl 5.32.0
21 июня 2020 года
После 13 месяцев разработки состоялся релиз новой стабильной ветки языка программирования Perl - 5.32. При подготовке нового выпуска было изменено около 220 тыс. строк кода, изменения затронули 1800 файлов, в разработке приняли участие 89 разработчиков. Одновременно объявлено о переводе разработки Perl и отслеживания ошибок на платформу GitHub.
Ветка 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
- Поддержка спецификации 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), которые могут привести к переполнению буфера или целочисленному переполнению при обработке специально оформленных регулярных выражений. Уязвимости представляют опасность для программ, в которых при построении регулярных выражений используются непроверенные внешние данные (когда внешние данные формируют регулярные выражения, а не используются при проверке).
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.