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