Доступен язык программирования Perl 5.38.0 с поддержкой классов
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
После 13 месяцев разработки опубликован релиз новой стабильной ветки языка программирования Perl - 5.38. При подготовке нового выпуска было изменено около 290 тыс. строк кода, изменения затронули 1500 файлов, в разработке приняли участие 100 разработчиков.
Ветка 5.38 выпущена в соответствии с утверждённым десять лет назад фиксированным графиком разработки, подразумевающим выпуск новых стабильных веток раз в год и корректирующих релизов - раз в три месяца. Примерно через месяц планируется выпустить первый корректирующий релиз Perl 5.38.1, в котором будут исправлены наиболее значительные ошибки, выявленные в процессе внедрения Perl 5.38.0. Одновременно с выходом Perl 5.38 прекращена поддержка ветки 5.34, для которой в будущем могут быть выпущены обновления только в случае выявления критических проблем с безопасностью. Также начался процесс разработки экспериментальной ветки 5.39, на базе которой в мае или июне 2024 года будет сформирован стабильный релиз Perl 5.40, если не будет принято решение перейти к нумерации 7.x.
Ключевые изменения:
- Предложен новый экспериментальный синтаксис создания классов, в которых могут определяться поля и методы, привязанные к каждому экземпляру класса. Классы расширяют возможности работы с объектами в Perl и позволяют использовать более близкий к другим языкам программирования синтаксис (ранее подобие объектной модели в Perl 5 основывалось на применении иерархии, привязанной к именам пакетов).
Определение классов похоже на создание пакетов при помощи блока "package", за исключением необходимости инициализации класса с запуском конструктора ("my $object = My::Class->new(%arguments);") для создания отдельного экземпляра класса, с которым в последующем ведётся работа. Для выполнения своего кода во время инициализации предложен новый блок "ADJUST", напоминающий блок "BEGIN". Возможно наследование классов, используя атрибут ":isa".
Переменные, определяемые внутри класса при помощи ключевого слова "field", видны только внутри класса - для каждого экземпляра класса создаётся отдельное хранилище полей, не пересекающиеся с другими экземплярами того же класса. Методы позволяют определить работающие в контексте класса функции.
use feature 'class';
class Example::Base {
field $x;
ADJUST {
$x = "Hello, world";
}
method print_message {
say $x;
}
}
class Example::Subclass :isa(Example::Base) {
...
}
Example::Base->new->print_message;
- В предупреждения, выводимые при использовании в коде устаревших возможностей, добавлена привязка к подкатегориями, которые могут отключаться по отдельности. Например, для отключения вывода предупреждения об использовании конструкции goto, но сохранении остальных предупреждений, можно указать "no warnings 'deprecated::goto_construct'".
- Предложен новый служебный хэш "%{^HOOK}", позволяющий создавать функции-обёртки для ключевых слов.
В текущем виде доступны для определения две обёртки - "require__before" и "require__after", позволяющие привязать обработчики, вызываемые на разных стадиях обработки ключевого слова "require".
my $old_hook = ${^HOOK}{require__before};
local ${^HOOK}{require__before} = sub {
my $old_hook_ret;
$old_hook_ret = $old_hook->($name) if $old_hook;
warn "Requiring: $name\n";
...
};
- Добавлена новая переменная окружения PERL_RAND_SEED, через которую можно выставить свою затравку для генератора псевдослучайных чисел (например, для достижения повторяемого поведения во время тестирования).
- Добавлена поддержка операторов "//=" и "||=" для определения значений по умолчанию аргументов функций. Выставленное через оператор "//=" значение применяется, если аргумент не определён (undef), а оператор "||=" применяется, если аргумент содержит логическое значение "false" или отсутствует).
sub foo ($name //= "world") {
print "Hello, $name";
}
sub foo ($x ||= 10) {
return 5 + $x;
}
foo(undef); # будет выведено "Hello, world"
- Поддержка спецификации Unicode обновлена до версии 15.0.
- В некоторых случаях внутри блоков "defer" (отложенные блоки, выполняемые в самом конце) и "finally" (блок с кодом, выполняемый в самом конце конструкции try/catch) разрешено использование оператора "goto". Применение goto допускается только при использовании постоянных меток перехода, которые не выходят за пределы блока.
use feature 'defer';
defer {
goto LABEL;
print "This does not execute\n";
LABEL: print "This does\n";
}
- На стадии компиляции обеспечено выявление недопустимого выхода из блоков defer или finally при помощи операций return или goto. Ранее подобные запрещённые манипуляции выявлялись только в момент выполнения проблемного кода, а теперь ошибка выводится сразу.
- Для выполнения блоков кода внутри regex-шаблона добавлена конструкция "*{ ... }", которая эквивалентна конструкциям "?{ ... }" и "??{ ... }", за исключением того, что её использование не приводит к отключению оптимизации в движке регулярных выражений, из-за чего повышается производительность, но поведение становится менее стабильным.
"good" =~ /g(?:o(*{print "o"}))*d/;
- Размер квантификаторов регулярных выражений (REG_INF) увеличен с 65 536 до 2 147 483 647 (c U16_MAX до I32_MAX), что позволяет использовать конструкции вида "/(?:word){1000000}/".
- Добавлены новые функции optimize_optree и finalize_optree для работы с фрагментами внутренней структуры optree.
- В движке регулярных выражений реализована новая переменная ${^LAST_SUCCESSFUL_PATTERN}, при помощи которой можно получить доступ к последнему успешно выполненному шаблону.
if (m/foo/ || m/bar/) {
s/${^LAST_SUCCESSFUL_PATTERN}/PQR/;
}
- Добавлена поддержка категории локали LC_NAME, которую можно указываться при вызове "setlocale".
- Изменения, нарушающие совместимость: В функции readline() и операторе "<>" после ошибки при обработке потока прекращена очистка флагов, сигнализирующих конец файла или ошибки. Прекращено выполнение блоков INIT после вызова exit() в секции BEGIN.
- Объявлено устаревшим использование символа " ' " в качестве разделителя имён пакетов.
===========
Источник:
OpenNet.RU
===========
Похожие новости
- Главная ссылка к новости (https://www.nntp.perl.org/grou...)
- OpenNews: Доступен язык программирования Perl 5.36.0
- OpenNews: Perl 7 плавно продолжит развитие Perl 5 без нарушения обратной совместимости
- OpenNews: Руководство Perl приостановило работу команды, следящей за соблюдением кодекса поведения
- OpenNews: Анонсирован Perl 7
- OpenNews: Анализ рисков при воплощении в жизнь инициативы Perl 7
Похожие новости:
- Релиз компилятора Rakudo 2023.04 для языка программирования Raku (бывший Perl 6)
- Релиз компилятора Rakudo 2022.12 для языка программирования Raku (бывший Perl 6)
- Релиз компилятора Rakudo 2022.06 для языка программирования Raku (бывший Perl 6)
- Perl 7 плавно продолжит развитие Perl 5 без нарушения обратной совместиости
- Релиз компилятора Rakudo 2022.02 для языка программирования Raku (бывший Perl 6)
- Релиз компилятора Rakudo 2021.12 для языка программирования Raku (бывший Perl 6)
- Релиз компилятора Rakudo 2021.10 для языка программирования Raku (бывший Perl 6)
- Руководство Perl приостановило работу команды, следящей за соблюдением кодекса поведения
- [Perl, Сетевое оборудование] SNMP MIB браузер(продолжение)
- [Perl, Сетевое оборудование] SNMP MIB браузер на Perl и JavaScript
Теги для поиска: #_perl
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 01:55
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
После 13 месяцев разработки опубликован релиз новой стабильной ветки языка программирования Perl - 5.38. При подготовке нового выпуска было изменено около 290 тыс. строк кода, изменения затронули 1500 файлов, в разработке приняли участие 100 разработчиков. Ветка 5.38 выпущена в соответствии с утверждённым десять лет назад фиксированным графиком разработки, подразумевающим выпуск новых стабильных веток раз в год и корректирующих релизов - раз в три месяца. Примерно через месяц планируется выпустить первый корректирующий релиз Perl 5.38.1, в котором будут исправлены наиболее значительные ошибки, выявленные в процессе внедрения Perl 5.38.0. Одновременно с выходом Perl 5.38 прекращена поддержка ветки 5.34, для которой в будущем могут быть выпущены обновления только в случае выявления критических проблем с безопасностью. Также начался процесс разработки экспериментальной ветки 5.39, на базе которой в мае или июне 2024 года будет сформирован стабильный релиз Perl 5.40, если не будет принято решение перейти к нумерации 7.x. Ключевые изменения:
=========== Источник: OpenNet.RU =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 01:55
Часовой пояс: UTC + 5