Perl 5.12.0
В рамках подготовки выпуска было изменено возле 750 тыс. строк кода, в создании поучаствовали более 200 девелоперов.
🕛 14.04.2010, 16:03
После 2-х лет разработки объявлено о выходе новой стабильной ветки языка программирования Perl 5.12. В будущем новые релизы будут выходить по фиксированному графику: стабильный релиз - раз в г., корректирующие релизы - каждый квартал.Из ключевых новшеств Perl 5.12. возможно подчеркнуть: существенное улучшение помощи Unicode; добавление экспериментального АПИ для разработки дополнений, расширяющих синтаксис и набор ключевых слов языка; решение в функциях работы с течением времени трудности 2038 г.; поддержку возможности указания номеров версий модулей прямо в операторе "package"; включение изначально вывода уведомлений при использовании устаревших возможностей языка.
Основные новшества Perl 5.12.:
* Нарушения совместимости:
o Изменена Unicode интерпретация спецсимволов \w, \d, \s, и символьных классов POSIX (альфа, upper, word и т.п.). К примеру, строго соответствуя требованию POSIX, \d более не охватывает все цифры, а \w все буквы, описанные в unicode-стандарте.
o В служебном массиве @INC, элементы ARCHLIB и PRIVLIB сейчас следуют после определения версий site_perl и vendor_perl;
o Доводы условных операторов given/when сейчас интерпретируется в логическом контексте, если м/у аргументами применяются связки ".." или "//". К примеру, вместо "when (1..10)" сейчас необходимо писать "when ([1..10])";
o Изменено поведение оператора "умного" сопоставления (smart match) "~~", который прекратил быть коммутативным;
o Метки, применяемые в операторах goto, last, next или redo, сейчас нельзя применять в качестве ключевых слов (к примеру, применяться для именования функции);
o Возле 15 более мелких и узкоспециализированных нарушений совместимости;
* Базовые перемены:
o База Unicode-знаков обновлена до версии 5.2, что дает возможность корректно обрабатывать в perl любые Unicode знаки;
o В регулярных выражениях добавлена помощь последовательности "\N", под которую подпадают все знаки, за исключением окончания строки, независимо от присутствия или отсутствия "/s" ("/s" сводит выборку к одной I-ой строке);
o Применение "use 5.11." автоматически включает режим "strict";
o Помощь параллельного исполнения регрессивных тестов, выполняемых на этапе сборки модулей (вместо "make test", возможно запустить "TEST_JOBS=3 make test_harness");
o Добавлен новый оператор "..." (Yada Yada), для определения кода который будет добавлен позже;
o Встроена помощь системы динамической трассировки DTRACE;
o Функция "each" теперь может оперировать массивами;
o Все функции и структуры связанные с течением времени защищены от трудности 2038 г.;
o Переменная $ сейчас также может оказаться переопределена ч/з tie;
o Вывод предупреждений (-W) сейчас возможно включить ч/з определение в переменной окружения PERL5OPT;
o "delete local" сейчас возможно применять для удаления элементов хэшей;
o Для платформы Линукс добавлена помощь абстрактного пространства имен сетевых сокетов (к примеру, в качестве адреса может оказаться использован массив произвольных знаков).
o Из комплекта исключен suidperl;
o Официально остановлена помощь платформ Windows 95, 98, ME и NT4;
o Применение конструкции "C<:=>" в качестве пустого списка атрибутов объявлено устаревшим.
o Возможность перегрузки реализованных на языке Си операторов, к примеру "qr//";
* Перемены, связанные с модулями и "pragma":
o Модули в основной поставке разделены на 2 части: в директории dist/ сейчас располагаются модули, разработка которых ведется вместе с ядром языка Perl, а в директории cpan/ - модули развиваемые ч/з CPAN;
o Прагма autodie в качестве замены модулю Fatal;
o Новые модули Compress::Raw::Bzip2 и Parse::CPAN::Meta;
o Новые прагмы parent (устанавливает взаимосвязь м/у ISA и базовыми классами) и overloading (определяет включить или отключить возможность переопределения операторов);
o Расширены возможности прагм overloading, attrs, charnames, feature, mro;
o Модули расширений сейчас могут перехватывать обработку функций Perl парсера для обработки новых видов задаваемых ч/з ключевые слова выражений и реализации сложных операторов;
o Добавлен Си АПИ для эксплуатации в XS расширениях низкоуровневых частей лексического анализатора и pad-системы;
o При использовании устаревших конструкций и возможностей языка теперь изначально выводится предупреждение (чтоб избавиться от подобных предупреждений необходимо указать "no warnings 'deprecated';");
o Обновлены версии модулей: Test-Simple .94, Storable 2.21, Pod-Simple 3.08, Parse-CPAN-Meta 1.40, EXTUTILS-Manifest 1.57, EXTUTILS-CBUILDER .260301, CGI.pm 3.48, threads::shared 1.32, EXTUTILS::PARSEXS 2.21, File::Path 2.08, Module::CORELIST 2.20, Object::Accessor .36.
* Усовершенствования производительности:
o Новый внутренний кэш для ускорения исполнения isa();
o Линеризация для классов с единственным наследником выполняется на 40% скорее;
o Связанная с текущей локалью информация сейчас кэшируется ч/з специальных хэш;
o Пустые DESTROY методы более не вызываются;
o Увеличена скорость работы функции Perl_sv_utf8_upgrade();
o Увеличена скорость исполнения оператора "keys" для пустых хэшей.