The OpenNET Project / Index page

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

Релиз Perl 5.14

15.05.2011 09:20

После года разработки представлена новая стабильная ветка языка программирования - 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 и т.д.


  1. Главная ссылка к новости (http://news.perlfoundation.org...)
  2. OpenNews: Корректирующий релиз Perl 5.12.3
  3. OpenNews: Релиз Parrot 3.0.0, виртуальной машины для Perl 6
  4. OpenNews: Увидел свет Rakudo Star, первый готовый к использованию дистрибутив Perl 6
  5. OpenNews: Вышел Perl 5.12.0
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/30562-perl
Ключевые слова: perl
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (35) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, szh (ok), 11:36, 15/05/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    # Uses less memory and CPU than previous releases

    было бы интереснее узнать подробнее.

     
     
  • 2.21, szh (ok), 21:52, 15/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    http://search.cpan.org/dist/perl-5.14.0-RC1/pod/perldelta.pod#Performance_Enh

    > В движке регулярных выражений увеличена производительность операций сравнения строк и компиляции регулярных выражений.

    живут на тормозном движке в то время как гугл уже оплатил решение проблемы: http://blog.chromium.org/2009/02/irregexp-google-chromes-new-regexp.html
    http://swtch.com/~rsc/regexp/regexp1.html

     
     
  • 3.25, anonymous (??), 07:21, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > живут на тормозном движке в то время как гугл уже оплатил решение

    ага. только ты про ограничения почитай ещё, а не только там, где про скорость пишут. в итоге придётся тянуть с собой два движка, и оба тестировать.

     
     
  • 4.33, szh (ok), 15:22, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    в irregexp этих ограничений насколько я понимаяю нет.
    В хроме regexp быстрее в 10 раз чем на перле 5.10 в моих тестах с большими регекспами.
     
     
  • 5.37, Аноним (-), 21:32, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Ты почитай сначала, а то твоему "пониманию" грошь цена.

    У Яндекса есть pire, который рвёт и гугловскую поделку, но также со своими ограничениями. Замены перловым регуляркам с теми же возможностями и большей производительностью нет.

     
     
  • 6.41, szh (ok), 13:37, 17/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Ты путаешь Irregexp c RE2, так что иди почитай сначала.

    Мои сложные regexp'ы в javascript Chromium в 10 раз быстрее чем в perl 5.10, при почти или полной совместимости.

     

  • 1.8, Kai (?), 13:49, 15/05/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Подскажите, есть ли простой способ бороться с кодировкой в скрипте который должен работать и в linux и в windows? А то есть проблемы с кодировкой путей к файлам.  В Linux они в utf8 в винде в cp1251. Есть что нибудь простое решение на эту тему?
     
     
  • 2.10, Vitold S (?), 14:08, 15/05/2011 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Самый простой способ написать свой декоратор для классав. Я в Perl уже давно не практикуюсь(по идеологических соображениям), но думаю идея понятна...
     
     
  • 3.16, Я не забыл заполнить поле Имя (?), 21:20, 15/05/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Самый простой способ написать свой декоратор для классав.

    ) Тонкий вброс питониста. Декораторы классов в perl.

     
     
  • 4.42, Аноним (-), 13:39, 17/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Простите, штоу? http://perldesignpatterns.com/?DecoratorPattern

    А если вы про декораторы как в гвидобейсике, то они тоже есть: http://search.cpan.org/perldoc?Python::Decorator

     
     
  • 5.43, Я не забыл заполнить поле Имя (?), 21:52, 18/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Базару нет! Ты умнее меня.  
    Только второе не является декоратором классов, хоть и работает именно так каким было предложение, а первое хоть все слова совпали, но совсем о другом, по сути это замена субклассов.

    >гвидобейсик

    Не осилил бедняга.

     
  • 2.15, angra (ok), 17:59, 15/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Любопытно было бы глянуть на пример проблемного кода. У меня все работает без дополнительных телодвижений.
     
     
  • 3.23, Kai (?), 00:14, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Проблема начинается когда под виндой хранишь пути к файлам в UTF8 хранилище. Их надо конвертировать в cp1251 иначе не находит эти пути. Т.е. в базе оно в нормальном виде, в скрипте тоже нормально (в юникоде) а как только передаешь в функции типа open или readdir - не работает.
     
     
  • 4.27, letsmac (ok), 08:46, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    А использовать  прямо unicode-версии API-функций не выходит? Запросто винда может считать приложение на perl не unicode и посылать по умолчанию на неюникод.
     
     
  • 5.35, Kai (?), 17:33, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Это как? Вместо родного readdir юзать что-то из Windows32:: ?
     
  • 2.19, Аноним (-), 21:39, 15/05/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ршения нет, так как такой проблемы не существует.
     
     
  • 3.24, Kai (?), 00:14, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Ршения нет, так как такой проблемы не существует.

    У меня существует.

     
  • 2.29, petr999 (ok), 12:29, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Есть жизнь на Марс^WMs-windows, но только в скафандре (марки cygwin). Там вам и locale и perl.
     
  • 2.31, fi (ok), 13:51, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > в винде в cp1251.

    Это не совсем правда, там utf-16 для ntfs и cp866 для старого fat.

     
     
  • 3.34, brother anon (?), 16:50, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Не путай кодировку в которой хранятся имена в ФС и кодировку в которой предоставлется API для работы с файлами
     

  • 1.9, Vitold S (?), 14:05, 15/05/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • –8 +/
    Опять буджт конфликт в FreeBSD. Постоянно будут пакеты требовать Perl 5.14. Скорее бы уже BSD-шники придумали как без него обойтись в портах...
     
     
  • 2.12, kibab (?), 16:51, 15/05/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Задать PERL_VERSION в make.conf, не?
     
  • 2.17, Аноним (-), 21:39, 15/05/2011 [^] [^^] [^^^] [ответить]  
  • +3 +/
    FreeBSD - единственная система, где это по-человечески решено. Во-первых, в make.conf указывается версия, во-вторых, есть perl-after-update, который быстро и безпроблемно обновляет все модули.
     
     
  • 3.26, fsck (??), 08:22, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    В Gentoo проще, make.conf трогать не нужно.
     
     
  • 4.36, Клыкастый (?), 17:48, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    в FreeBSD тоже. Есть портапгрейд.

    Но попутно - а что make.conf так сложно устроен, так страшно вызвать vi /etc/make.conf?

     
  • 4.38, Аноним (-), 21:35, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > В Gentoo проще, make.conf трогать не нужно.

    Зато нужен какой-нибудь eselect, что то же самое.

     
  • 2.30, Papa (?), 12:50, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Толсто
     

  • 1.14, vadiml (ok), 17:59, 15/05/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Похоже наконец-таки довели до ума работу с utf8 -- такое поведение надо было реализовывать изначально.
     
     
  • 2.18, szh (ok), 21:39, 15/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    ага, не сразу я узнал что вот это:
    y/[A-Z]ÄäËëÖöÜüßÇçÉéÊêÈèÁáÂâÀàÚúÛûÙùÏïŸÿ/[a-z]aaeeoouubcceeeeeeaaaaaauuuuuuiiyy/;
    работает не так, как я думал.
     
     
  • 3.20, Аноним (-), 21:41, 15/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > работает не так, как я думал.

    .../a же.

     
     
  • 4.22, szh (ok), 22:27, 15/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    y/../../a  ???  perl 5.10: Execution of aborted due to compilation errors.
     
     
  • 5.39, Аноним (-), 21:35, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > y/../../a  ???  perl 5.10: Execution of aborted due to compilation
    > errors.

    Заголовок новости читал?

     

  • 1.28, KOL (ok), 10:06, 16/05/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >В экспериментальном режиме все оперирующие с массивами и хэшами функции теперь поддерживают указание ссылки на переменную

    Не знаю, хорошо это или плохо. Вроде бы удобнее и быстрее писать, но потом пойди разберись где у тебя ссылки, а где скаляры.

     
     
  • 2.32, 21343431 (?), 14:05, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Это же пока для стандартных функций, вы же и так знаете, что они принимают в качестве параметров, так что тут ничего страшного.
     
  • 2.40, Аноним (-), 21:41, 16/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Не знаю, хорошо это или плохо. Вроде бы удобнее и быстрее писать,
    > но потом пойди разберись где у тебя ссылки, а где скаляры.

    Зачем разбираться? Ни одна из функций push/pop/shift/each/keys/..., которые это затронуло, не принимает скаляр. Зато конструкции типа push @{return_some_arref()} становятся гораздо читабельнее.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



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

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