Релиз Perl 5.14
15 мая 2011 года
После года разработки представлена новая стабильная ветка языка программирования - Perl 5.14. Одновременно объявлено о прекращении поддержки ветки Perl 5.10. В рамках подготовки релиза 5.14 было изменено около 550 тыс. строк кода, в разработке приняли участие 150 разработчиков. Ветка 5.14 выпущена в соответствии с принятым в прошлом году новым фиксированным графиком разработки, подразумевающим выпуск новых стабильных веток раз в год и корректирующих релизов - раз в три месяца.
Ключевые улучшения, добавленные в Perl 5.14:
- Поддержка Unicode 6.0 и реализация значительной порции общих улучшений, связанных с поддержкой Unicode. Например, полностью обеспечена поддержка режима "use feature 'unicode_strings'" при котором все строковые операции и регулярные выражения выполняются с использованием Unicode-семантики. Добавлена категория предупреждений "utf8", позволяющая отключить вывод только предупреждений, связанных с проблемами оформления строк utf-8;
- Улучшена поддержка IPv6 в модуле Socket, включая добавление поддержки IPv6 в функции Socket::getaddrinfo() и Socket::getnameinfo();
- Значительно упрощен процесс выполнения автоконфигурации CPAN-клиента (уменьшено число требующих ручных операций диалогов, добавлена поддержка META/MYMETA.json и local::lib, возможность автоматического выбора зеркал);
- Новый синтаксис для определения модулей "package Foo { }" или "package номер_версии Foo { }", при котором с модулем ассоциируется только блок кода внутри фигурных скобок (ранее можно было использовать не совсем очевидную конструкцию "{ package Foo; ... }");
- Регулярные выражения:
- В регулярных выражениях добавлена поддержка флага "/r", при котором операции замены "s///" и трансляции "y///" осуществляются без изменения содержимого рабочей переменной - действие выполняется над копией данных, после чего отдельно возвращается результат. Например, после выполнения "$new = $old =~ s/cat/dog/r;" будет перезаписано только содержимое переменной $new, а переменная $old сохранит прежнее значение;
- Реализован набор флагов (/d, /l, /u, /a), указывающих на то, как следует интерпретировать участвующие в регулярных выражениях строки - в виде последовательности ASCII или Unicode: "/l" - компилирует регулярное выражение как если бы было указано "use locale", '/u' - как если бы использовалась прагма "unicode_strings", "/d" - включает режим по умолчанию, независимо от ранее используемых настроек, "/a" - привязка к ACSII;
- Использование внутри регулярного выражения блока "(?^...)" (когда символ "^" указан за "(?"), теперь приводит к использованию для данного блока модификаторов по умолчанию, т.е. если регулярное выражение вызвано с модификатором "/i" (отключение учета регистра символов), то для указанного бока он применяться не будет;
- Движок выполнения регулярных выражений теперь реентерабелен, т.е. можно без опасения выполнять новые регулярные выражения внутри блоков "(?{...})" и "(??{...})" в другом регулярном выражении;
- В экспериментальном режиме все оперирующие с массивами и хэшами функции теперь поддерживают указание ссылки на переменную, т.е. если раньше для заданного через ссылку хэша нужно было указывать "keys %$hash_ref", то теперь можно использовать "keys $hash_ref" (для массивов вместо "push @$arrayref, @stuff" можно указывать "push $arrayref, @stuff"). Отдельно отмечено, что в будущих версиях подобное поведение может быть изменено;
- Возможность переопределения функций tie, tied и untie;
- Проведена работа по уменьшению потребления памяти и уменьшению нагрузки на CPU в процессе работы. Например, увеличена скорость работы функций shift() и pop(), при их вызове без аргументов (shift() теперь на 5% быстрее, чем shift @_ в однопоточном режиме и на 25% в многопоточном). В движке регулярных выражений увеличена производительность операций сравнения строк и компиляции регулярных выражений. При интенсивном выполнении операций добавления одной строки в конец другой, изменен метод выделения памяти, что например, позволило на платформе Win32 увеличить скорость выполнения данных операций в 100 раз. Увеличена скорость выполнения прямых присвоений значений массивам и хэшам (my @array = ... и my %hash = ...). Уменьшено потребление памяти для автоматически генерируемой для всех функций переменной "@_";
- В базовую поставку добавлены новые модули: CPAN::Meta::YAML, CPAN::Meta, HTTP::Tiny (простой HTTP-клиент), JSON::PP, Module::Metadata, Perl::OSType;
- Обновлены версии модулей: Archive::Extract 0.48, Archive::Tar 1.76, Attribute::Handlers 0.89, B 1.29, Benchmark 1.12, Carp 1.20, CGI 3.52, Compress::Raw::Bzip2 2.033, DB_File 1.821, DBM_Filter 0.04, Digest::MD5 2.51, Digest::SHA 5.61, DynaLoader 1.13, Encode 2.42, File::Copy 2.21, File::Basename 2.82, File::CheckTree 4.41, File::Fetch 0.32, File::Find 1.19, GDBM_File 1.14, MIME::Base64 3.13, POSIX 1.24, Socket 1.94, Storable 2.27 и т.д.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.