Представлен релиз языка программирования Perl 5.22.0

Представлен релиз языка программирования Perl 5.22.0

После года разработки представлена новая стабильная ветка языка программирования Perl - 5.22. При подготовке нового выпуска было изменено около 590 тыс. строк кода, изменения затронули 2400 файлов, в разработке приняли участие 94 разработчика.

Ветка 5.22 выпущена в соответствии с утверждённым четыре года назад фиксированным графиком разработки, подразумевающим выпуск новых стабильных веток раз в год и корректирующих релизов - раз в три месяца. Примерно через месяц планируется выпустить первый корректирующий релиз Perl 5.22.1, в котором будут исправлены наиболее значительные ошибки, выявленные в процессе внедрения Perl 5.22.0. Одновременно с выходом Perl 5.22 прекращена поддержка ветки 5.18, для которой в будущем могут быть выпущены обновления только в случае выявления критических проблем с безопасностью. Также начался процесс разработки экспериментальной ветки 5.23, на базе которой в мае 2016 года будет сформирован стабильный релиз Perl 5.24.

Ключевыеулучшения, добавленные в Perl 5.22:

  • Модули CGI и Module::Build исключены из стандартной поставки и более не поставляются вместе с интерпретатором perl в базовой стандартной сборке. Они могут быть установлены из CPAN в случае необходимости.
  • Новый двойной ромбовидный оператор: "<<>>", работает как "<>" с той лишь разницей, что использует трёхаргументный вызов функции open() для открытия файлов из массива @ARGV, т.е. не обрабатывает спецсимволы в именах файлов. Новый оператор позволят блокировать возможные атаки, связанные с обработкой спецсимволов в именах файлах, например, указание "|foo" не приведёт к открытию неименованного потока и запуску программы "foo";
  • Новая экспериментальная возможность задания алиасов для переменных и подпрограмм через указатели указателей: \$c = \$d и \&x = \&y. В том числе можно сразу создать алиас в цикле foreach, например, после указания "foreach \%hash (@array_of_hash_refs){" хэши можно перебирать через "foreach my $key ( keys %hash )". Варианты использования и детали в perlref, секция "Assigning to References".
  • Новый модификатор регулярного выражения "/n" отключает переопределение и заполнение позиционных скаляров $1, $2 и т.п., но при этом сохраняет возможность отрицания на групповой оператор, и сохраняется именованное заполнение. Например, указание "/(hi|hello)/n" не приведёт к заполнению $1. Детали о модификаторе "/n" в perlre.
  • Введен обсуждаемый ранее новый атрибут ":const", который может быть применен к анонимным функциям, что приведёт к немедленному выполнению подпрограммы в месте её определения с последующей подстановкой сохранённого результата в моменты обращений к ней в коде. Атрибут имеет экспериментальный статус. Детали perlsub, секция "Constant Functions".
  • Схема с оператором повторения "x" ("(...) x ...") может быть использована в присвоениях к списку. Например, конструкция "(undef,undef,$foo) = that_function()" теперь может быть задана в форме "((undef)x2, $foo) = that_function()". Особенно полезно использование данной возможности при заполнении переменных оператором split, например, вместо серии undef можно написать "my(undef, $card_num, (undef)x3, $count) = split /:/;"
  • Новые экспериментальные битовые операторы для работы со строками по аналогии работы с числами: "&." "|." "^." "~." "&=" "|=" "^=" "&.=" "|.=" "^.=". Детали доступны в документации perlop секции "Bitwise String Operators";
  • Новые операторы "\b" регулярных выражений: "qr/\b{gcb}/" , "qr/\b{wb}/" , "qr/\b{sb}/", определяющие границу между последовательностями символов (которые выглядят как один символ), словами (например, содержащими апостроф) и предложениями. Детали доступны в описании регулярных масок "\b{}", "\b", "\B{}", "\B" в perlrebackslash.
  • Новая директива "use re 'strict'", которая применяет более строгие правила для компиляции регулярного выражения в текущей области видимости.
  • Поддержка Unicode 7.0.
  • Директиве "use locale" теперь можно передать параметр для выборочного задания категорий локализации, на которые будут отражаться свойства локали. Детали в perllocale.
  • В возвращаемых значениях вызова POSIX::localeconv() появились новые поля int_p_cs_precedes, int_p_sep_by_space, int_n_cs_precedes, int_n_sep_by_space, int_p_sign_posn, int_n_sign_posn, реализованные в соответствии с POSIX.1-2008;
  • Улучшен эвристический анализатор для обнаружения UTF-8 в текущей локали. Эвристика работает на платформах, которые не реализуют ни один из стандартов (С99 и/или POSIX 2001).
  • Закрыта проблема, связанная с вызовом prototype() без параметра. Теперь используется скаляр $_;
  • Вызов fileno() теперь работает с дескрипторами директорий. Поведение filen на дескрипторе директории зависит от операционной системы. Детали доступны в описании вызова по perldoc -f fileno.
  • Для платформы Win32 завершена реализация формы организации неименованного канала через вызовы open my $fh, "-|", "program", @arguments'.
  • Дробные числа теперь могут хранить специальные значения неопределенностей: бесконечность, отрицательную бесконечность и значение "не число" NaN. Детали в perldata.
  • Доработаны вывод и разбор дробных чисел. Добавлена поддержка hex-форм в виде "0x1.23p-4" и введен формат "%a" для printf. Подробности в perldata, секция "Scalar value constructors".
  • Упаковка беконечностей (Inf) и "не чисел" (NaN) в символ (вызовами pack, "chr" и printf "%c") теперь завершается ошибкой.
  • Появилась новая опция сборки usecbacktrace (./Configure -Dusecbacktrace) которая позволяет из perl-кода выполнить трассировку стека и получить си-фреймы из perl-кода, путем использования API уровня Си-кода. Работает на платформах Linux и OS X, возможна работа на *BSD. Детали в perlhacktips, секция "C backtrace".
  • Безопасность:
    • Perl по умолчанию собирается с -fstack-protector-strong если это возможно.
    • Модуль Safe обновлен до версии 2.38, которая закрывает критическую уязвимость, позволяющую заменить внешнее пространство имен.
    • Perl по умолчанию собирается с -D_FORTIFY_SOURCE=2 если это возможно.
  • Несовместимые изменения:
    • Изменен позиционный порядок введенной в v5.20 экспериментальной возможности определения сигнатуры подпрограммы. Теперь сигнатура может быть задана до атрибутов (в v5.20 сигнатуры можно определить лишь после атрибутов).
    • Прототипы "&" и "\&" теперь принимают только анонимные функции (sub {...}).
    • По уровню действия директива "use encoding" теперь является лексической.
    • Срез списка теперь может вернуть пустой список только в случае если исходный список был пустым;
    • Ранее объявленная устаревшей (в v5.18) форма записи "\N{}" с последовательностью из множества пробелов теперь приводит к ошибке: "\N{TOO MANY SPACES}" or "\N{TRAILING SPACE}.
    • Ранее объявленная устаревшей (в v5.12) возможность импорта функции через use UNIVERSAL '...' теперь приводит к ошибке. Форма поведения "use UNIVERSAL" без аргументов осталась неизменной.
    • Символы "X" в двойных кавычках в форме "\cX" теперь должны быть печатными ASCII-символами (printable ASCII character). Ранее допускались непечатаемые символы, но с выводом предупреждения.
    • Ранее объявленная устаревшей (в v5.18) возможность разделения управляющих конструкции "(?" и "(*" регулярного выражения теперь приводит к фатальной ошибке.
    • Под модификатором "/x" в регулярном выражении в комментариях теперь игнорируются все Unicode-побелы, включая U+0085, U+200E, U+200F, U+2028 и U+2029. !!!!! Начиная с v5.18 данное поведение было объявлено устаревшим, и задание в регулярном выражении этих символов без экранирования вне квадратных скобок приводило к выводу предупреждения.
    • Изменение поведения введенной в v5.18 экспериментальной формы "(?[...])" которая позволяет задать форматирование в регулярном выражении (сходно с действием модификатора "/x"). Теперь конец строки коментария ("#-строка") определяется исключительно по символу "\n" (ранее qr[\R]).
    • В введенной в v5.18 экспериментальной форме регулярного выражения "(?[...])", которая позволяет записать выражение для выполнения операции над множествами (бинарные &,+,|,-,^ и унарный !), изменен приоритет операторов, и теперь он следует совпадает с системой приоритетов принятой в perl (man perlop). Детали в секции "Extended Bracketed Character Classes" в документации perlrecharclass.
    • Ранее объявленное устаревшим (в v5.000, 1994 год) поведение, позволявшее пропускать спецификаторы "%" в именах хэшей и "@" в именах массивов, в некоторых случаях более не допускается.
    • Текст переменной "$!" теперь сохраняется на английском языке если в текущей области видимости не задействована директива "use local". Отказ от ранее принятой более сложная эвристической схемы произошел из-за того что в некоторых случах пользователь могу получить нечитаемый текст.
    • Строки "$!" и $^E теперь будут содержать установленный флаг UTF-8 в случаях когда текст не является ASCII UTF-8 [perl #112208].
    • Ранее объявленная устаревшей (в v5.14.0) альтернативная форма конструкции "m?PATTERN?" в виде "?PATTERN?" теперь приводит к синтаксической ошибке.
    • Ранее объявленные устаревшей (в v5.6.1, 2000 год) конструкции "defined(@array)" and "defined(%hash)" теперь также приводит к ошибке;
    • Ранее объявленные устаревшими (в v5.8, 2002 год) формы косвенной адресации через хэши и массивы (например %foo->{"bar"}) теперь приводят к ошибке компиляции.
    • Изменение поведения "*" в прототипе функции когда присутствует неоднозначность: форма вызова с функцией теперь является более приоритетной, в остальных случаях прежнее поведение сохраняется.
  • Устаревшие и нежелательные формы использования и конструкции (deprecations):
    • Использование введенной в v5.8.2 переменной "${^ENCODING}".
    • Использование непечатаемых (non-graphic, invisible) символов в именах переменных длиной в один символ.
    • Инлайнинг (inlining) переменных анонимных функции, имеющих пустой прототип ("sub ()") в замыканиях. Конструкция при которой происходит встраивание (inlining) переменной, которая является потенциально изменяемой, приводит к выводу предупреждения.
    • Множественное задание модификатора "/x" в регулярном выражении (qr/foo/xx, use re qw(/amxx), ..).
    • Использование "NO-BREAK SPACE" в форме "\N{...}".
    • Анонсированное в v5.16 литеральное использование "{" в регулярном выражении теперь следует либо записывать в экранированной форме "\\{", либо заключить в квадратные скобки "[{]", либо использовать в теле оператора экранирования "\\Q" нелитеральных символов. В противном случае будет выдано предупреждение.
    • Не рекомендуется к использованию форма "use warnings FATAL => ''all''".
  • Производительность:
    • Известные имена классов и методы на фазе компиляции приводят к более быстрому исполнению кода. Составные формы вызова, такие как SUPER::new, аналогичным образом обрабатываются на фазе компиляции если это возможно.
    • Значительное ускорение обращения к массивам и хэшам (особенно к вложенным формам) в случаях когда в качестве ключа используется простая переменная или константа.
    • Конструкции "(...)x1", "("constant")x0" и "($scalar)x0 оптимизированы для исполнения в списочном контексте.
    • Оптимизация 4-х аргументной (с присвоением) формы вызова "substr".
    • Ускорение исполнения "\\L...", "\\Q...", и т.п. (the extra "stringify" op)
    • Присвоение на пустой список теперь может завершиться быстрее в некоторых случаях.
    • Повышение производительности до 20% на вызовах "length" в некоторых случаях при обращении к связанным (tied) переменным.
    • Уменьшение потребления памяти скаляра на хранение 64-битных чисел в вещественной форме.
    • Оптимизировано исполнение "@array = split".
    • Вызов "join" может быть оптимизирован (свернут, folding) за счет вычисления на фазе компиляции.
    • Реализована возможность ускоренния исполнения конструкции "qq(@array)".
    • Выражения "our $var" и "our ($s,@a,%h )" более не обрабатываются на фазе исполнения. Аналогичным образотм пропускается обработка последовательностей "our $foo". Оптимизация также применена и по отношению к статическим (state) переменным.
    • Многие внутренние функции переработаны с целью улучшения производительности и уменьшения потребления памяти.
    • Ускорена работа файлтест-вызовов "-T" и "-B" на пустом файле.
    • Реализована более быстрая схема поиска в хэше если в качестве ключа используется константа.
    • Функции с пустым прототипом и телом, содержащим лишь "undef", теперь могут быть свернуты.
    • Оптимизировано потребление памяти на содержание функции в его скомпилированной форме.
    • Оптимизация исполнения utf8::native_to_unicode() и utf8::unicode_to_native() (модуль utf8) на ASCII-платформах.
    • Win32 perl теперь использует на 8KB меньше памяти на процесс за счет маппинга данных с дисковой памяти двоичного exe-образа perl на оперативную с ее последующим разделением (sharing) между процессами.
  • Обновление модулей и директив. Полный список обновленных модулей и их актуальные версии поставляемые вместе с perl обновленные с версии v5.20.0 к выпуску версии v5.22.0 можно получить, выполнив команду "corelist --diff 5.20.0 5.22.0"
    • Модуль attributes обновлён до версии 0.27. Закрыты проблемы с использованием memEQs в XS-подсистеме и возможностью чтения данных за границей буфера.
    • Обновлен бэкенд компилятора perl - модуль B до версии 1.58 и связанные с ним модули: B::Concise => 0.996, B::Deparse => 1.35, добавлен B::Op_private. Исправлено множество ошибок в модуле B::Deparse.
    • Модуль constant обновлён до версии 1.33. Начиная с версии 1.32 при объявлении констант можно задавать полностью квалифицированное имя константы, что позволяет оперировать константами вне текущего пакета. Кроме того, имена констант начинающиеся с двойных символов подчеркивания заявлены как зарезервированные и не рекомендуются к использованию. Объявление таких констант приведет к выводу предупреждения на фазе компиляции если установлен соответствующий режим исполнения.
    • Data::Dumper обновлён до версии 2.158. Закрыта уязвимость CVE-2014-4330.
    • Модуль Fcntl обновлён до версии 1.13. Реализована возможность взаимодействия с каналами в Linux (операции над pipe, команды F_SETPIPE_SZ и F_GETPIPE_SZ).
    • HTTP::Tiny обновлен до версии 0.054. Использование keep_alive теперь безопасно для работы с fork и потоками (fork-safe, thread-safe).
    • Коллекция модулей libnet обновлена до версии 3.05. Поддержаны IPv6 и SSL для "Net::FTP", "Net::NNTP", "Net::POP3" and "Net::SMTP". Усовершенствована "Net::SMTP" аутентификация.
    • Модуль POSIX обновлен до версии 1.53. Поддержаны математические функции и константы стандарта С99 (такие как "acosh", "isinf", "isnan", "round", "trunc"; "M_E", "M_SQRT2", "M_PI"). Вызов POSIX::tmpnam() теперь выводит предупреждение о том что его использование объявлено устеревшей (deprecation warning).
    • Обновлен модуль Win32. Вызов GetOSName() теперь поддерживает Windows 8.1. Обеспечена возможность сборки модуля в режиме C++.
    • Модуль Win32API::File обновлен до версии 0.1202. Обеспечена возможность сборки модуля в режиме C++.
    • XSLoader обновлен до версии 0.20. Появилась возможность загрузки модулей из разных пространств имён.
  • Изменения утилит perl:
    • Исключение директории "x2p/" из perl привело к удалению утилит find2perl, s2p and a2p. Данные утилиты теперь развиваются как отдельные приложения доступные из CPAN "App::find2perl", "App::s2p", "App::a2p".
    • Утилита h2ph теперь может обрабатывать hex-константы в макросах, задаваемых компилятору
    • Утилита encguess более не зависит от модулей не входящих в стандартную поставку perl (non-core)
  • Поддержка платформ:
    • Восстановлена работоспособность perl в ОС IRIX, Tru64 и z/OS.
    • Прекращена поддержка unix-подобной платформы NeXTSTEP/OPENSTEP в связи с их историчностью (последний выпуск NeXTSTEP был в 1995 году)
    • Cущественные улучшение процесса сборки на платформах: EBCDIC, HP-UX, Android (кросс-сборка), VMS, Win32, OpenBSD и Solaris.
  • Обновлена и дополнена pod-документация, система диагностики (директива diagnostics) и система предупреждении (warnings). Добавлены новые опции для конфигурирования и сборки perl, доработана и дополнена система тестирования.
  • Известно, что выход perl v5.22.0 привел к тому, что сборка некоторых модулей стала невозможной из-за ошибок на этапе тестирования. В связи с этим ожидается обновление следующих модулей:
    • B::Generate => 1.50
    • B::Utils => 0.25
    • Coro => 6.42
    • Dancer => 1.3130
    • Data::Alias => 1.18
    • Data::Dump::Streamer => 2.38
    • Data::Util => 0.63
    • Devel::Spy => 0.07
    • invoker => 0.34
    • Lexical::Var => 0.009
    • LWP::ConsoleLogger => 0.000018
    • Mason => 2.22
    • NgxQueue => 0.02
    • Padre => 1.00
    • Parse::Keyword 0.08

Некролог. 8 мая 2015 года сообщество perl лишилось одного из активных участников Brian McCauley. Он был одним из активных публицистов в Usenet, Perl Monks и других тематических форумах, посвященных языку программирования perl. Он опубликовал ряд своих работ под псеводнимом NOBULL в хранилище CPAN, принял участие в развитии Perl FAQ. Он посещал большинство конференции YAPC::Europe, и помог в организации YAPC::Europe 2006 и QA Hackathon 2009. Perl-сообщество скорбит в связи с потерей талантливого активиста.

OpenNET

Ваш комментарий

imageВиртуальные серверы FirstVDS
Надежные VDS от 199р/мес.
Выгодная аренда хостинга.
Новости мира IT:Архив новостей

image

Последние комментарии:

Loading

Подробнее: http://citforum.ru/news/33878/

Читать комменты и комментировать

Добавить комментарий / отзыв



Защитный код
Обновить

Представлен релиз языка программирования Perl 5.22.0 | | 2015-06-04 10:11:00 | | Технологии и новости мира IT | | Представлен релиз языка программирования Perl 5.22.004.06.2015 После года разработки представлена новая стабильная ветка языка программирования Perl - 5.22. При подготовке нового выпуска было изменено около 590 тыс. строк кода, изменения затронули 2400 файлов | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: