Выпущен Perl 5.22.0

Темы:

1 июня 2015 года была выпущена новая стабильная версия языка программирования Perl 5.22.0. Разработка велась примерно 12 месяцев, начиная с Perl 5.20.0, и содержит примерно 590 000 изменённых строк среди 2400 файлов от 94 авторов.

Основные изменения, которые появились в новом релизе:

  • Новые битовые операции. Была добавлена новая экспериментальная возможность, которая позволяет четырём стандартным битовым операторам (& | ^ ~) всегда воспринимать свои операнды как числа, а также представляет четыре новых оператора с точкой (&. |. ^. ~.), которые соответственно трактуют операнды как строки.
  • Новый оператор двойной бриллиант <<>>. Он подобен <>, но использует трёхаргументный вызов open для открытия файлов из @ARGV.
  • Псевдонимы через ссылки. Переменным и подпрограммам теперь можно задавать псевдонимы, присваивая к ссылке: \$c = \$d; \&x = \&y;
  • Новый атрибут для анонимных функций :const. С ним функция немедленно исполняется и её значение запоминается и используется для создания новой функции-константы, которая и возвращается.
  • Perl теперь поддерживает получение трассировки вызовов уровня C (также как работают символьные отладчики, например, gdb).
  • Расширенный поиск границ для регулярных выражений:
    • qr/\b{gcb}/gcb (граница кластера графемы). Это свойство Юникода, которое ищет границы между последовательностью символов, которые являются представлением одного символа,
    • qr/\b{wb}/wb (граница слова). Это свойство Юникода, которое ищет границы между словами (полностью совпадает с обычным \b),
    • qr/\b{sb}/sb (граница предложения). Это свойство Юникода, которое помогает при разборе предложений на естественных языках.
  • Флаг регулярных выражений для отключения захвата. Регулярные выражения теперь поддерживают флаг /n, который отключает захват и заполнение переменных $1, $2, и прочих внутри группировки.
  • use re 'strict'. Это выражение включает строгие синтаксические правила к шаблонам регулярных выражений скомпилированные в области видимости данной прагмы.
  • Поддерживается Юникод 7.0 (с корректировками).
  • Появился новый документ perlunicook, который подробно на примерах рассказывает, как правильно «готовить» Юникод в Perl-программах.
  • Теперь появилась возможность передавать параметр в use locale для указания списка категорий локали, для которых будут применяться правила локали, оставляя остальные категории незатронутыми.
  • Текст сообщения об ошибке "$!" будет возвращён в UTF-8, если там содержится не-ASCII текст.

Новый релиз также содержит множество оптимизаций и улучшений в производительности:

  • Если метод или имя класса известны во время компиляции, то предварительно рассчитывается хеш для ускорения поиска методов во время исполнения. Также составные имена методов, такие как SUPER::new, разбираются во время компиляции, что снимает необходимость их обработки во время исполнения.
  • Поиск элемента в массивах и хешах (особенно во вложенных), при котором используется константа или простая переменная в качестве индекса/ключа, теперь работает гораздо быстрее. Например, выражение $a[0]{$k}[$i] теперь требует вместо 10 операций только одну.
  • Присвоение substr в конце подпрограммы (или как аргумент return) теперь оптимизируется в 4-х аргументный substr.
  • Производительность length увеличена на 20%, если применяется к немагическим и несвязанным строкам, или если находится в области видимости прагмы use bytes, или если строка не использует внутри UTF-8.
  • В выражении array = split присвоение может быть оптимизировано так, что split будет записывать непосредственно в массив.
  • Множество внутренних функция было переработано, чтобы улучшить производительность и снизить их потребление памяти.
  • Поиск в хеше по ключу-константе происходит быстрее.

Также исправлено внушительное число ошибок. Подробности изложены в документе perldelta.pod.

Корректирующий релиз Perl 5.22.1 ожидается в течении месяца. А следующий стабильный релиз Perl 5.24.0 должен появиться в мае 2016 года.