The OpenNET Project / Index page

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



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

Исходное сообщение
"Релиз языка программирования Perl 5.24.0"
Отправлено opennews, 10-Май-16 12:01 
После года разработки состоялся (http://www.nntp.perl.org/group/perl.perl5.porters/2016/05/ms...) релиз новой стабильной ветки языка программирования Perl - 5.24 (https://metacpan.org/release/perl). При подготовке нового выпуска было изменено около 360 тыс. строк кода, изменения затронули 1800 файлов, в разработке приняли участие 77 разработчиков.

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


Ключевые изменения (https://metacpan.org/pod/release/RJBS/perl-5.24.0/pod/perlde...):

-  В разряд стабильных возможностей переведена операция постфиксного разыменования (postderef), которая ранее поставлялась в числе экспериментальных функций и требовала активации специального флага "use feature postderef". Операция постфиксного разыменования "$sref->$*" эквивалентна "${ $sref }", "$aref->@*" эквивалентна "@{ $aref }", а "$href->%{ ... }" - "%$href{ ... }";

-  Добавлена поддержка Unicode 8.0 (http://www.unicode.org/versions/Unicode8.0.0/);

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


-  В регулярных выражениях появился новый оператор "\b{lb}", определяющий место в Unicode-строке, в котором последовательность символов может быть разорвана для того, чтобы вывод уместился в заданную ширину экрана. Ранее возможность поставлялась в виде модуля Unicode::LineBreak (http://search.cpan.org/~nezumi/Unicode-LineBreak-2016.003/li...);

-  Скобки (http://search.cpan.org/~rjbs/perl-5.24.0/pod/perlrecharclass...) "qr/(?[ ])/" c расширенными условиями определения классов символов теперь применимы для включенных через "use locale" локалей  UTF-8. Задаваемые в скобках шаблоны преобразуются в штатные правила Unicode;

-  Более явно определены операции сдвига целых чисел ("<<" и ">>"), которые теперь не зависят от поведения реализации на Си. Например, точно определено поведение при сдвиге отрицательных чисел и при переполнении числа. Сдвиг отрицательного числа  определён как операция сдвига в обратную сторону (операция сдвига отрицательного числа влево приведёт к выполнению сдвига вправо и наоборот). Выходящие за границы сдвигаемые биты воспринимаются как ноль;

-  В printf и sprintf добавлена возможность применения обратного порядка указания аргументов настройки точности, например, вызов "sprintf '|%.*2$d|', 2, 3" вернёт "|002|";
-  Расширено число полей, передаваемых в callback-обработчик sigaction, вызванный с флагом SA_SIGINFO. В число таких полей теперь входят errno, status, uid, pid, addr и band;


-  Расширены правила передачи скрипта в другой интерпретатор. Ранее передача осуществлялась если в заголовке скрипта отсутствовало слово "perl" (например, "#!/bin/sh"). Теперь проброс также осуществляется и при наличии слова perl6 для улучшения совместимости с Perl 6;


-  Несовместимые изменения:


-  Прекращена поддержка экспериментальных переменной "my $_" и функции авторазыменования (autoderef), которые признаны неудачными нововведениями. Переменная "my $_" была добавлена в Perl 5.10 и вызывала больше путаницы, чем пользы. Механизм autoderef позволяющий выполнить push/pop/... для каждого скалярного аргумента также не получил распространения;

-  Прекращена поддержка вложенных выражений определения переменных. Блоки my, our и state теперь не могут пересекаться, например, выражение "my ($x, my($y))" является недопустимым;

-  Некоторые шаблоны регулярных выражении, приводящие к ошибкам во время выполнения, теперь приводят к выводу ошибки во время компиляции выражения (т.е. ошибка выводится сразу, а не через какое-то время работы программы). Например, добавлены предварительные проверки корректности использования шаблонов \p{} и \P{};


-  Ничего не делающее выражение "qr/\N{}/" (пустой "\N{}") теперь недопустимо в режиме "strict";

-  Прекращена поддержка класса символов "/\C/", для оценки отдельных байтов строки UTF8 рекомендуется использовать utf8::encode();
-  Вызов chdir('') теперь не приводит к смене текущего пути на домашнюю директорию, следует использовать chdir();
-  Все ASCII-символы, используемые в именах переменных, должны быть видимыми;
-  В категорию устаревших возможностей переведено использование функций sysread(), syswrite(), recv() и send() с обработчиками :utf8;

-  Производительность:

-  Сокращены накладные расходы при входе и выходе из области видимости, что привело к ускорению вызова подпрограмм, циклов и базовых блоков. Например, вызов пустой функции "sub f{} f()" теперь занимает на треть меньше времени;
-  На платформах с поддержкой оптимизированных реализаций memchr()  в libc значительно ускорено выполнение операций с шаблонами, в которых используются фиксированные строки. Например, на системах с memchr() с оптимизациями для современных x86_64 CPU выражения $s = "a" x 1000 . "wxyz" и $s =~ /wxyz/ for 1..30000 выполняются в 7 раз быстрее, чем при использовании неоптимизированного варианта memchr(). Отмечаются и регрессии для достаточно нетипичных применений, например, "ab" x 1000 =~ /aa/ выполняется в 1.5 раза медленнее;

-  Ускорены операции сложения, деления и умножения 64-разрядных целых чисел за счёт оптимизации проверки пограничных условий;
-  Ускорены операции инкремента и декремента (++i, i++, --i, i--) ха счёт выноса обработчиков разных условий в разные функции;

-  Значительно ускорены операции присвоения списку единственного аргумента, например "($x) = (...)" или "(...) = ($x)";-  Снижено пиковое потребление памяти, наблюдаемое в моменты компиляции шаблонов регулярных выражений;

-  Безопасность:


-  Изменено поведение установки маски прав доступа при создании временных файлов. В 5.22 маска устанавливалась в 0600 до вызова mkstemp(3) и восстанавливалась после вызова, что приводило к появлению файлов с правами 0066 (доступ на запись и чтение) на системах с применяемой по умолчанию маской 0666. В новой версии в качестве значения umask используется 0177;

-  Решены проблемы (CVE-2015-8608 (https://rt.perl.org/Public/Bug/Display.html?id=126755)) с доступом к областям вне границы буфера в коде обработки файловых путей на платформе Win32;

-  Уязвимость в XS File::Spec::canonpath (CVE-2015-8607 (https://rt.perl.org/Public/Bug/Display.html?id=126862));
-  Добавлены дополнительные проверки для защиты от обращения к неинициализированной памяти  при вызове функции crypt() на платформе Win32. В том числе добавлена проверка на использование слишком коротких значений salt или указания некорректных символов в salt;

-  Обеспечено удаление дубликатов переменных окружения в хэше %ENV. Ранее сохранялся последний из дубликатов, в то время как   getenv() возвращал первый, теперь поведение унифицировано. Дубликаты также удалены из environ[], что прикрыло возможные способы атаки (CVE-2016-2381);


-  Обновлены версии модулей, входящих в базовую поставку.-  В состав возвращён порт для платформы AmigaOS. Во FreeBSD задействована (https://rt.perl.org/Ticket/Display.html?id=126847) функция fdclose(). Включена большая порция изменений, связанных  поддержкой работы на платформе Win32;


URL: http://perlnews.org/2016/05/perl-5-24-released/
Новость: http://www.opennet.ru/opennews/art.shtml?num=44394

 

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



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

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