Доступен язык программирования Perl 5.40.0

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3248
Зарегистрирован: 20.08.2022

#

Доступен язык программирования Perl 5.40.0
Дата публикации:Mon, 10 Jun 2024 12:34:16 +0300




После 11 месяцев разработки опубликован релиз новой стабильной ветки языка программирования Perl - 5.40. При подготовке нового выпуска было изменено около 160 тыс. строк кода (без документации и автоматически сгенерированного кода - 110 тысяч), изменения затронули 1500 файлов, в разработке приняли участие 75 разработчиков.




Ветка 5.40 выпущена в соответствии с утверждённым одиннадцать лет назад фиксированным графиком разработки, подразумевающим выпуск новых стабильных веток раз в год и корректирующих релизов - раз в три месяца. Примерно через месяц планируется выпустить первый корректирующий релиз Perl 5.40.1, в котором будут исправлены наиболее значительные ошибки, выявленные в процессе внедрения Perl 5.40.0. Одновременно с выходом Perl 5.40 прекращена поддержка ветки 5.36, для которой обновления могут быть выпущены в будущем только в случае выявления критических проблем с безопасностью. 20 июня начнётся процесс разработки экспериментальной ветки 5.41, на базе которой в мае или июне 2025 года будет сформирован стабильный релиз Perl 5.42, если не будет принято решение перейти к нумерации 7.x.





Ключевые изменения:
  • Расширены возможности, связанные с появившемся в прошлой версии экспериментальным синтаксисом для создания классов. Добавлено новое ключевое слово "__CLASS__", которое при вызове из методов, блоков ADJUST или при инициализации полей возвращает имя текущего класса по аналогии с тем как ключевое слово __PACKAGE__ возвращает имя пакета. В отличие от выражения ref($self) ключевое слово __CLASS__ может применяться при инициализации полей для доступа к методам класса на этапе до завершения создания экземпляра класса. Для базового класса значение __CLASS__ идентично значению __PACKAGE__, но будет отличаться при создании подклассов.


    use feature 'class';
    class Example1 {
    field $f = __CLASS__->default_f;
    sub default_f { 10 }
    }


    Для определяемых внутри класса полей реализован атрибут ":reader", применяемый для автоматического создания метода, возвращающего значение переменной из поля в текущем экземпляре класса.
    Например, указание ":reader" после определения поля "field $s;" эквивалентно созданию метода "method s () { return $s; }". При необходимости можно задать не совпадающее имя метода при помощи конструкции вида "field $name :reader(get_name);".

    Объявлен стабильным синтаксис обработки исключений try/catch, который можно использовать вместо не очевидных манипуляций с "eval". Блок "try" включает блок с выполняемым кодом, а блок "catch" с кодом для обработки любого исключения, которое может возникнуть при выполнении первого блока. В "catch" определяется переменная, содержащая данные, переданные при формировании исключения (например, при срабатывании исключения на вызов "die" будет передана указанная в качестве аргумента строка). Внутри блоков "try" и "catch" разрешены операторы переходов, включая return, goto, next, last и redo.


    try {
    my $x = call_a_function();
    $x < 100 or die "Too big";
    send_output($x);
    }
    catch ($e) {
    warn "Unable to output a value; $e";
    }
    print "Finished\n";


    Стабилизирован синтаксис "for my (VAR, VAR) (LIST)" и "foreach my (VAR, VAR) (LIST)", применяемый для перебора списков с единовременным извлечением сразу нескольких значений в одной итерации цикла. Например, теперь можно указывать:

    foreach my ($key, $value) (%hash) { ... }
    for my ($left, $right, $gripping) (@moties) { ... }


    Объявлен стабильным модуль builtin, включающий всегда доступные функции, встроенные в интерпретатор. В настоящее время в модуле предложены функции true, false, weaken, unweaken, is_weak, blessed, refaddr, reftype, ceil, floor, is_tainted, trim и indexed.

    Добавлены новые экспериментальные встроенные функции inf и nan, доступные в пространстве имён "builtin::" ("builtin::inf" и "builtin::nan"). Данные функции можно использовать в качестве констант, определяющих бесконечность и нечисловое значение.

    Добавлен новый логический оператор "^^", соответствующий операции XOR и дополняющий битовый оператор "^" (в Perl предоставляет три базовых битовых оператора "&", "|" и "^", соответствующих операциям AND, OR и XOR, но для логических операций до сих пор были доступны только варианты AND ("&&") и OR ("||")). Логическое выражение "$x ^^ $y" вернёт TRUE, когда либо "x", либо "y" имеют значение TRUE, но не одновременно.


    Прекращена поддержка симуляции версий до 5.11. Использование директивы "use номер_версии", отключающей дополнительные возможности, добавленные в интерпретаторе после указанной версии, с номером версии меньше 5.11 (например, "use v5.8") теперь будет приводить к выводу ошибки, а не предупреждения. Аналогично добавлен вывод предупреждения при использовании в "use" версии меньше 5.39 (предупреждения будут заменены на ошибку в выпуске 5.44).

    Разрешено использование пробела между опцией командной строки "-M" и именем модуля, например "perl -M Data::Dumper=Dumper -E 'say Dumper [1,2,3]'" (раньше нужно было писать "perl -MData::Dumper...").

    Объявлено устаревшим использование оператора "goto" для перехода из внешней области видимости во внутреннюю. Поддержка данной возможности будет прекращена в версии Perl 5.42.

    В основной состав включены модули Term::Table и Test2::Suite, предназначенные для создания unit-тестов. Обновлены версии модулей Archive::Tar, Compress::Raw::Bzip2, Compress::Raw::Zlib, Data::Dumper,
    DB_File, File::Compare, File::Find, Getopt::Long, Hash::Util, HTTP::Tiny, IO, Math::BigInt, PerlIO::encoding, Tie::File, Time::HiRes и т.п.

    Добавлена поддержка операционной системы Serenity OS.


    Устранены две уязвимости:

    CVE-2023-47038 - запись за границу буфера при обработке некорректных Unicode-свойств, определённых пользователем. Проблема может привести к переполнению буфера на 1 байт при обработке специально оформленных регулярных выражений.
    CVE-2023-47039 - возможность подмены исполняемого файла на платформе Windows из-за поиска cmd.exe в путях с использованием переменной окружения PATH, в которой текущий рабочий каталог является более приоритетным, чем системный каталог с исполняемым файлом cmd.exe.







Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=61343

Жизнь за Нер'зула!

Ответить