Perl 5.36.0 программалоо тили жеткиликтүү

После года разработки опубликован релиз новой стабильной ветки языка программирования Perl — 5.36. При подготовке нового выпуска было изменено около 250 тыс. строк кода, изменения затронули 2000 файлов, в разработке приняли участие 82 разработчика.

Ветка 5.36 выпущена в соответствии с утверждённым девять лет назад фиксированным графиком разработки, подразумевающим выпуск новых стабильных веток раз в год и корректирующих релизов — раз в три месяца. Примерно через месяц планируется выпустить первый корректирующий релиз Perl 5.36.1, в котором будут исправлены наиболее значительные ошибки, выявленные в процессе внедрения Perl 5.36.0. Одновременно с выходом Perl 5.36 прекращена поддержка ветки 5.32, для которой в будущем могут быть выпущены обновления только в случае выявления критических проблем с безопасностью. Также начался процесс разработки экспериментальной ветки 5.37, на базе которой в мае или июне 2023 года будет сформирован стабильный релиз Perl 5.38, если не будет принято решение перейти к нумерации 7.x.

Негизги өзгөрүүлөр:

  • Стабилизирована и теперь доступна при указании прагмы «use v5.36» поддержка сигнатур функций, позволяющих явно определить перечень переменных, используемых в функции и автоматизировать операции проверки и присвоения значений из массива входящих параметров. Например, ранее используемый код: sub foo { die «Too many arguments for subroutine» unless @_ >= 2; die «Too few arguments for subroutine» unless @_ <= 2; my($left, $right) = @_; return $left + $right; }

    при использовании сигнатур может быть заменён на:

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

    При вызове foo с числом аргументов, отличным от двух, интерпретатор выведет ошибку. В списке также поддерживается специальная переменная «$», которая позволяет игнорировать часть аргументов, например, «sub foo ($left, $, $right)» позволит выполнить копирование в переменные только первого и третьего аргумента, при этом в функцию необходимо передать ровно три аргумента.

    Синтаксис сигнатур также позволяет указывать необязательные аргументы и задавать значения, используемые по умолчанию в случае отсутствия аргумента. Например, указав «sub foo ($left, $right = 0)» второй аргумент становится необязательным и при его отсутствии передаётся значение 0. В операции присваивания можно указать произвольное выражения, в том числе с использованием других переменных из списка или глобальных переменных. Указание вместо переменной хэша или массива (например, «sub foo ($left, @right)») приведёт к возможности передачи одного и более аргументов.

  • В функциях, объявленных с использованием сигнатур, поддержка дополнительного присвоения параметров из массива «@_» объявлена экспериментальной и будет приводить к выводу предупреждения (предупреждение выводится только если @_ используется в функциях, объявленных при помощи нового синтаксиса). Например, предупреждение будет выведено для функции: use v5.36; sub f ($x, $y = 123) { say «The first argument is $_[0]»; }
  • Стабилизирован и доступен при указании прагмы «use v5.36» инфиксный оператор «isa» для проверки того, является ли объект экземпляром указанного класса или классом, производным от него. Например: if( $obj isa Package::Name ) { … }
  • При указании прагмы «use v5.36» включена обработка предупреждений (активирован режим «use warnings»).
  • При указании прагмы «use v5.36» отключена поддержка косвенной нотации вызова объектов («feature indirect») — устаревшего способа вызова объектов, при котором вместо «->» используется пробел («method $object @param» вместо «$object->$method(@param)»). Например, вместо «my $cgi = new CGI» нужно использовать «my $cgi = CGI->new».
  • При указании прагмы «use v5.36» отключена поддержка эмуляции многомерных массивов и хэшей в стиле Perl 4 («feature multidimensional»), позволяющих транслировать указание нескольких ключей в промежуточный массив (например, «$hash{1, 2}») преобразовывалось в «$hash{join($;, 1, 2)}»).
  • При указании прагмы «use v5.36» отключена поддержка экспериментального механизма ветвления («feature switch»), аналогичного операторам switch и case (в Perl применяются ключевые слова given и when). Для использования данной возможности начиная с Perl 5.36 нужно явно указывать ‘use feature «switch»‘, а при указании «use версия» она больше автоматически включаться не будет.
  • Стабилизирована и доступна по умолчанию поддержка дополнительных классов символов в квадратных скобках внутри регулярных выражений. Возможность позволяет осуществлять сопоставления с использованием расширенных правил пересечения, исключения и объединения множеств символов. Например, ‘[A-Z — W]’ — символы от A до Z за исключением W.
  • Частично стабилизирована и доступна по умолчанию поддержка операций «(?», «( )», «{ }» и «[ ]» можно использовать символы «« »», «“ ”» и т.п. Например, «qr«pat»».
  • Запрещён вызов функции sort без аргументов, который теперь будет приводить к выводу ошибки. @a = sort @empty; # продолжит работу @a = sort; # будет выведена ошибка @a = sort (); # будет выведена ошибка
  • Предложен новый флаг командной строки «-g», включающий режим загрузки всего файла целиком, а не построчно. Действие флага аналогично указанию «-0777».
  • Юникоддун спецификациясын колдоо 14.0 версиясына жаңыртылган.
  • Обеспечена мгновенная обработка исключений, связанных с вычислениями с плавающей запятой (SIGFPE), аналогичная обработке других аварийных сигналов, таких как SIGSEGV, что позволяет привязывать собственные обработчики для сигнала SIGFPE через $SIG{FPE}, например, выводящие номер строки в которой возникла проблема.
  • Обновлены версии модулей, входящих в базовую поставку.
  • Добавлены оптимизации производительности. Предоставлена возможность более эффективного хранения ключей больших хэшей, без использования разделяемых таблиц строк. Значительно повышена производительность создания новых скалярных значений, например, следующий код теперь выполняется на 30% быстрее: $str = «A» x 64; for (0..1_000_000) { @svs = split //, $str }
  • В коде интерпретатора началось использование некоторых конструкций, определённых в стандарте C99. Для сборки Perl теперь требуется компилятор, поддерживающий C99. Прекращена поддержка сборки в старых версиях MSVC++ (до VC12). Добавлена поддержка сборки в Microsoft Visual Studio 2022 (MSVC++ 14.3).
  • Прекращена поддержка платформ AT&T UWIN, DOS/DJGPP и Novell NetWare.

Source: opennet.ru

Комментарий кошуу