The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Релиз языка программирования Perl 5.26.0"
Отправлено opennews, 31-Май-17 09:37 
После года разработки состоялся (http://www.nntp.perl.org/group/perl.perl5.porters/2017/05/ms...) релиз новой стабильной ветки языка программирования Perl - 5.26 (https://metacpan.org/release/perl). При подготовке нового выпуска было изменено около 360 тыс. строк кода, изменения затронули 2600 файлов, в разработке приняли участие 86 разработчиков.

Ветка 5.26 выпущена в соответствии с утверждённым пять лет назад фиксированным графиком разработки, подразумевающим выпуск новых стабильных веток раз в год и корректирующих релизов - раз в три месяца. Примерно через месяц планируется выпустить первый корректирующий релиз Perl 5.26.1, в котором будут исправлены наиболее значительные ошибки, выявленные в процессе внедрения Perl 5.24.0. Одновременно с выходом Perl 5.26 прекращена поддержка ветки 5.22, для которой в будущем могут быть выпущены обновления только в случае выявления критических проблем с безопасностью. Также начался процесс разработки экспериментальной ветки 5.27, на базе которой в апреле или мае 2018 года будет сформирован стабильный релиз Perl 5.28.


Новый выпуск включает в себя три существенных изменения, на которые следует обратить внимание в первую очередь:

-  Из соображении безопасности текущая директория "." по умолчанию больше не дополняется в виде последнего элемента в @INC. Такое поведение в отношении @INC теперь аналогично тому как если бы ранее был активирован режим "Taint" (ключ запуска "-T"). Данная схема может создать проблемы при сборке, тестировании, установке модулей и исполнении скриптов. Существует несколько простых способов вернуть прежнее поведение perl:


-  Схема отключения реализована через включение по умолчанию опции "-Udefault_inc_excludes_dot" для Configure. Поэтому если можно аннулировать значение "-Udefault_inc_excludes_dot" для Configure и пересобрать perl;

-  Perl проверяет переменную окружения PERL_USE_UNSAFE_INC в момент запуска и если переменная определена, то в @INC будет добавлен "." как прежде (как пример: alias perl="env PERL_USE_UNSAFE_INC=1 perl");
-  Если допустимо добавление "." первым элементом в @INC, то можно использовать схему perl -I. (например alias perl="perl -I." в рабочей сессии окружения)

-  Оператор "do" теперь выдает предупреждения на попытку загрузки файла который не нашелся в @INC без ".", но обнаружился в текущей директории. Файл может быть загружен путем явного указания пути: 'do "./file.pl"'. Выполнение с "-I." и использование PERL_USE_UNSAFE_INC не приводит к предупреждениям при использовании do.

-  В регулярных выражениях открывающая фигурная скобка "{" должна быть экранирована или заключена в определитель класса "[{]". Данное нововведение дает возможность для реализации новых конструкции в регулярных выражениях в будущем. В perldiag (http://search.cpan.org/~xsawyerx/perl-5.26.0/pod/perldiag.pod) в секции "Unescaped left brace in regex is deprecated here" можно найти детали, например, о случаях когда "{" может не экранироваться.

Ключевые изменения (http://search.cpan.org/~xsawyerx/perl-5.26.0/pod/perldelta.pod)
:

-  С процедур лексической области видимости введенных в 5.18 снят статус экспериментальной возможности.
Попытка определить лексическую процедуру больше не приведет к ошибкам и предупреждению. Изменения введены таким образом, что сохранена обратная совместимость с ранее использованными схемами через использование "experimental::lexical_subs" и "lexical_subs" из "feature". Включение "lexical_subs" через "feature" не прервет выполнение программы, так как сохранилось в виде бездействующей заглушки и лексические процедуры теперь доступны всегда в областях видимости без их явного включения;

-  Введена поддержка выравнивания встроенных документов (here-documents). Новый модификатор "~", добавленный в синтаксис объявления here-документов, дает понять синтаксическому анализатору, что в коде встроенный документ будет выровнен на величину пробельного символа (символы из группы whitespace). Это позволяет определить в программе следующую конструкцию которая выглядит без нарушения вложенности:


   if (1) {
     print {{~EOF;
       Hello there
       EOF
   }

Обратите внимание на то, что лексический анализатор в процессе поиска лексем будет, во-первых, проверять выравнивание строк, и, во-вторых, удалять с начала строки here-документа такую же подстроку которая предшествует закрывающему элементу here-документа. То есть если в нашем примере перед EOF стоит "\t", то перед 'Hello there' будет попытка удалить "\t". Анализатор сообщит об ошибке выравнивания here-документов если перед "Hello there" не будет "\t". Если будет два или более "\t" перед "Hello there", то удалится только один;


-  Новый модификатор регулярного выражения "/xx" который является своего рода "усиленной формой /x". Работает также как и "/x" с той лишь разницей, что с модификатором "/xx" в регулярном выражении игнорируются неэкранированные символы пробела и табуляции в определителе класса символов "[]".

Пример: выражение " q"=~/^[^1 2]q/x не даст результат того, что кроме 1 и 2 определен пробел в [^1 2]

а выражение " q"=~/^[^1 2]q/xx даст результат, так как пробел в [^1 2] игнорируется и снова выражение " q"!~/^[^1\ 2]q/xx дает результат;


-  Новые переменные "@{^CAPTURE}", "%{^CAPTURE}" и "%{^CAPTURE_ALL}" для захвата результата работы регулярного выражения:


-  "@{^CAPTURE}" - массив включающий в себя $1, $2 и т.д. по порядку; пример: "asdf"=~/a(s)d(f)/o даст 's' и 'f' в массив;
-  "%{^CAPTURE}" - эквивалент "%+", использующийся для именованного захвата;
-  "%{^CAPTURE_ALL}" эквивалент для "%-", использующийся для всех именованных захватов (от автора: мне не удалось установить соответствие "%{^CAPTURE_ALL}" и "%-", похоже, что "%{^CAPTURE}" и "%{^CAPTURE_ALL}" синонимы; не исключено, что это ошибка, требуется перепроверка).

-  Новая экспериментальная конструкция: объявление ссылок на переменную. В Perl 5.22.0 была введена экспериментальная конструкция присваивания к ссылке ("use feature 'refaliasing'"), которая позволяет определить псевдоним. Как логическое продолжение данной идеи теперь реализована возможность объявления ссылки на переменную в виде "my \$x" (эквивалент "\my $x"). Данная возможность включается через "use feature 'declared_refs'" и позволяет использовать схему "my ($foo, \@bar, \%baz)" - эквивалентен записи my $foo, \my(@bar, %baz). Обе схемы работают с my(), state(), our() и local();


-  Поддержана спецификация Unicode 9.0 (http://www.unicode.org/versions/Unicode9.0.0/). Поддержка модулями из core Perl реализована через приведение нормализатора форм Unicode::Normalize к соответствию  стандарту Unicode 9.0;

-  На платформах которые поддерживают UTF-8 по умолчанию для сопоставления данных теперь используется кодировка UTF-8.
Для портируемости рекомендуется использовать Unicode::Collate. Подробности в разделе "Category LC_COLLATE: Collation: Text Comparisons and Sorting" в perllocale (http://search.cpan.org/~xsawyerx/perl-5.26.0/pod/perllocale.pod);


-  Возможность косвенного вызова функции интерпретатора perl для массивов и хэшей. Функции обработки массивов и хешей (keys, each, values, push, pop, shift, unshift и splice) пространства имен CORE могут быть вызваны как через форму с префиксом "&" (&CORE::keys(\%hash)), так и косвенным вызовом (my $k = \&CORE::keys; $k->(\%hash)). До 5.26.0 эти формы приводили к ошибке выполнения;


-  Новый алгоритм хэширования для 64-битных сборок. Для лучшей производительности реализована схема гибридного хэширования: для коротких ключей до 16 бит включительно используется оптимизированный вариант алгоритма "One At A Time Hard", для длинных ключей используется "Siphash 1-3". Данная схема показала значительный прирост в производительности для очень длинных ключей и умеренный прирост для остальных случаев.

Изменения, нарушающие совместимость:

-   Конструкция scalar(%hash) теперь возвращае...

URL: http://www.nntp.perl.org/group/perl.perl5.porters/2017/05/ms...
Новость: http://www.opennet.ru/opennews/art.shtml?num=46628

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру