Код
#новости

Вышел Perl 5.36.0 — после года разработки

Для нового релиза команда Perl изменила 250 тысяч строк кода и 2 тысячи файлов.

На сайте Perl 28 мая вышел пресс-релиз для новой версии языка — 5.36. Из нововведений — поддержка сигнатур функций, инфиксный оператор isa, обработка предупреждений, Unicode 14.0, стабильный regex и многое другое. Одновременно с этим разработчики Perl прекратили поддержку ветки 5.32 и создали экспериментальную ветку — 5.37, на основе которой в мае или июне 2023 года выйдет стабильный релиз Perl 5.38.

Все новые функции можно использовать, указав прагму «use v5.36». Рассмотрим основные изменения.

Сигнатуры функций. Разработчики добавили сигнатуры функций, которые позволяют явно определять перечень переменных и автоматизировать проверку и присвоение значений из массива входящих параметров.

Например, у нас есть код ниже:

sub foo {
        die "Слишком много аргументов для корутины" unless @_ >= 2;
        die "Слишком мало аргументов для корутины" unless @_ <= 2;
        my($left, $right) = @_;
        return $left + $right;
    }

С помощью сигнатур его можно переписать следующим образом:

sub foo ($left, $right) {
        return $left + $right;
    }

Сигнатуры также добавляют возможность указывать необязательные аргументы и задавать им значения по умолчанию. А ещё при вызове функций с числом аргументов, отличных от заданных в сигнатуре, интерпретатор выведет ошибку.

В функциях, объявленных как сигнатуры, присвоение через «@_» теперь объявлено как экспериментальное и будет приводить к выводу предупреждения.

Оператор isa. Разработчики доработали инфиксный оператор isa, который нужен для проверки объекта на экземпляр класса или класса, производного от него.

if( $obj isa Package::Name ) { ... }

Builtin-функции. Интерпретатор Perl теперь имеет набор встроенных функций, который документирован в модуле builtin. Указываются они через префикс «builtin::», а для сокращённого использования можно указать прагму «use» — например, «use builtin ‘reftype’».

Список некоторых встроенных функций:

  • builtin::trim — чистка граничных пробелов;
  • builtin::indexed — нумерация элементов списка;
  • builtin::true, builtin::false — булевые выражения нуля и единицы;
  • builtin::is_bool — проверка на булевую переменную;
  • builtin::ceil, builtin::floor — округление вниз, вверх.

Отложенные блоки. Разработчики добавили defer-блоки, которые позволяют запускать фрагменты кода после выхода из поля видимости. Если блок defer встретился во время выполнения, он пропускается и вызывается только на стадии выхода. Например:

use feature 'defer';
   {
      say "Первый";
      defer { say "Последний"; }
      say "Второй";
   }

Ключевое слово finally. Для обработчика исключений try/catch добавили поддержку третьего ключевого слова — finally, которое выполняет блок с кодом в самом конце конструкции try/catch, даже если обработчик будет прерван исключением или оператором перехода.

try {
       attempt();
       print "Удача\n";
   }
   catch ($e) {
       print "Неудача\n";
   }
   finally {
       print "Это выполнится в любом случае\n";
   } 

Новые символы для разделителей. В операторах экранирования текста — например, qr — добавили возможность использовать символы не только формата ASCII в качестве парных разделителей. Например, вместо < >, (), { } и [] можно использовать символы « » и “ ".

Новый флаг -g. Он позволяет включать режим загрузки файла целиком, а не построчно. Его действие аналогично «-0777».

Оптимизация производительности. Разработчики добавили возможность хранить ключи хэшей большего размера — без использования разделяемых таблиц строк. Ещё значительно повышена производительность создания новых скалярных значений. Например, следующий код теперь выполняется на 30% быстрее:

$str = "A" x 64;
   for (0..1_000_000) {
       @svs = split //, $str
   }

Что ещё? При указании прагмы «use v5.36» теперь по умолчанию включён режим предупреждений — «use warnings», также добавили поддержку Unicode 14.0, отключили поддержку экспериментального механизма ветвления — «feature switch», запретили вызов функции sort без аргументов, а также прекратили поддержку платформ AT& T UWIN, DOS/DJGPP и Novell NetWare.

Подробнее обо всех изменениях можно прочитать на сайте Perl.


Нейросети для работы и творчества!
Хотите разобраться, как их использовать? Смотрите конференцию: четыре топ-эксперта, кейсы и практика. Онлайн, бесплатно. Кликните для подробностей.
Смотреть программу
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована