The OpenNET Project / Index page

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

Доступен интерпретатор языка программирования Perl 5.16

22.05.2012 23:17

После года разработки представлена новая стабильная ветка языка программирования - Perl 5.16. В рамках подготовки релиза 5.16 было изменено около 590 тыс. строк кода, изменения затронули 2500 файлов, в разработке приняли участие 139 разработчиков.

Ветка 5.16 выпущена в соответствии с утверждённым два года назад фиксированным графиком разработки, подразумевающим выпуск новых стабильных веток раз в год и корректирующих релизов - раз в три месяца. 20 июня планируется выпустить первый корректирующий релиз Perl 5.16.1, в котором будут исправлены наиболее значительные ошибки, выявленные в процессе внедрения Perl 5.16.0. Одновременно объявлено о прекращении поддержки ветки Perl 5.12, для которой в будущем могут быть выпущены обновления только в случае выявления критических проблем с безопасностью.

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

  • Признак __SUB__ теперь возвращает ссылку на текущую подпрограмму, что позволяет упростить написание рекурсивных подпрограмм (например, можно использовать "__SUB__->(...)" для вызова текущей подпрограммы). Подобное поведение действует только при указании "use feature 'current_sub'" или "use v5.16";
  • Возможность определения нескольких областей с поддержкой разных языковых возможностей в коде через множественное указание директив "use VERSION", например:
    
        use 5.016;
        # включены все новые возможности Perl 5.16
        use 5.014;
        # включены только возможности Perl 5.14
    
  • При указании "use v5.12" или более новой версии по умолчанию включается strict-режим, который можно отменить явно указав "no strict;". При использовании "use v5.16" по умолчанию не поддерживается переменная "$[", для включения которой следует указать "use feature 'array_base'";
  • Более непротиворечивая реализация оператора eval, который теперь не полагается на текущую кодировку для восприятия строкового аргумента как набора байт или символов. Для явного определения типа аргумента введены модификации eval: unicode_eval, который всегда рассматривает входную строку как unicode-последовательность, и evalbytes, который манипулирует входными данными как набором байт;
  • Переработанная реализация функции substr, которая теперь более корректно обрабатывает ситуацию с изменением содежимого строки при вызове функции через указатель. В частности, теперь учитывается новый размер строки. Например:
    
        my $string = "string";
        my $lvalue = \\substr $string, -4, 2;
        print $$lvalue, "\\n"; # выведет "ri"
        $string = "bailing twine";
        print $$lvalue, "\\n"; # в perl 5.16 выведет "wi", 
                              # в прошлых версиях напечатало бы "il", так как смещение вычислялось относительно размера первой строки
    
  • Поддержка стандарта Unicode 6.1 и реализация серии улучшений, связанных с поддержкой Unicode. Например, улучшено использование Unicode-символов в именах модулей, методов и других сущностей. Добавлен новый оператор fc и экранирующий символ \\F для выполнения операции foldcase, осуществляющей корректное приведение символов в верхний регистр для всех языков;
  • Представлен новый внутренний Pad API для манипулирования структурами данных с лексическим представлением подпрограмм;
  • Возможность записи в переменную $$, используемую в контексте "local $$" (запись в $$ была запрещена начиная с Perl 5.8);
  • Переменная $^X теперь преобразуется в абсолютный путь во FreeBSD, Mac OS X и Solaris (ранее преобразование выполнялось только при наличии псевдо-ФС /proc);
  • Из-за потенциальных проблем с безопасностью функция is_utf8_char() объявлена устаревшей, вместо неё следует использовать is_utf8_char_buf(). При использовании is_utf8_char возможны сценарии, когда некорректная входная строка может привести к чтению до 12 байт данных из области за пределами выделенного буфера;
  • Содержимое lib/unicore признано устаревшим, следует использовать Unicode::UCD;
  • Проведена работа по оптимизации производительности операций с Unicode-строками внутри регулярных выражений. При сопоставлении вместо линейного поиска теперь используется бинарный поиск. Значительно увеличена скорость функций substr и glob;
  • В комплект включено новое руководство по созданию объектно-ориентированных программ на Perl и полностью переписано руководство по объектно-ориентированным возможностям языка;
  • В базовую поставку добавлены новые модули: arybase (с реализацией переменной "$[") и PerlIO::mmap;
  • Обновлены версии большого числа входящих в базовую поставку модулей;
  • Отмечается, что в следующей версии из базовой поставки будут исключены модули CPANPLUS, Filter::Simple, PerlIO::mmap, Pod::LaTeX, Pod::Parser, SelfLoader, Text::Soundex и Thread.pm. Также вероятно будет прекращена поддержка платформ BeOS, djgpp, dgux, EPOC, MPE/iX, Rhapsody, UTS, VM/ESA.


  1. Главная ссылка к новости (http://www.nntp.perl.org/group...)
  2. OpenNews: Архиву Perl-модулей CPAN исполнилось 16 лет
  3. OpenNews: Релиз Perl 5.14
  4. OpenNews: Релиз Parrot 3.0.0, виртуальной машины для Perl 6
  5. OpenNews: Вышел Perl 5.12.0
Лицензия: CC-BY
Тип: Программы
Ключевые слова: perl
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (23) Ajax | 1 уровень | Линейный | Раскрыть всё | RSS
  • 1.9, myc (?), 08:50, 23/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Что-то мне поведение substr в ранних реализациях кажется более логичным.
     
  • 1.10, macropas (?), 09:08, 23/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Позвольте, а как же Perl 6?
     
     
  • 2.12, Аноним (-), 09:32, 23/05/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Perl 6 это другой язык
     
     
  • 3.16, Аноним (-), 09:52, 23/05/2012 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Python, со своими тремя не совместимыми версиями, молча завидует.
     
     
  • 4.19, Аноним (-), 10:13, 23/05/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Python, со своими тремя не совместимыми версиями, молча завидует.

    Двумя. И таки пора уже отказываться от ветки 2.x и переходить на 3.x.

     
     
  • 5.25, Аноним (-), 10:52, 23/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Осталось это объяснить библиотекописателям, некоторые из которых чихать хотели на 3.х
     
     
  • 6.26, Аноним (-), 11:16, 23/05/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А на уязвимости, которые перестанут исправлять в ветке 2.х, библиотекопесателям тоже плевать? Какие-то это неправильные библиотекописатели. Что-то мне кажется, что не много мы теряем от того, что их поделий не будет в ветку 3.х. Или они сами собираются заняться поддержкой этого устаревщего чудища только для того, чтобы не переходить на Python 3?
     
     
  • 7.28, dq0s4y71 (??), 12:58, 23/05/2012 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Ну да, это Гвидо правильный. Завтра ему шарахнет в голову Питон 4, послезавтра - Питон 5. А "неправильным" библиотекописателям больше делать нечего, кроме как следить за полётом его мысли.
     
  • 7.32, 1 (??), 14:43, 23/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    в zope так и делают
     
  • 5.29, Рыба (?), 13:03, 23/05/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Двумя, - это какими?
    2.5 и 2.6 ?
    или 2.6 и 3.0 ?
    или 2.7 и 2.8 ?
     

  • 1.13, anonymous (??), 09:33, 23/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    >В базовую поставку добавлены новые модули: ... PerlIO::mmap;
    >в следующей версии из базовой поставки будут исключены модули ... PerlIO::mmap

    А зачем добавляли?

     
  • 1.22, PnD (??), 10:29, 23/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
      Отлично подходит там, где не хватает шелл-скриптов. Например (кусок "дедупликатора" netflow):

    my %hash = ();

    # List files in $fl1 >> hash by mtime
    for my $filename (glob("$fl1/*"))
    {
    next unless -f $filename;
    my $t = int(stat($filename)->mtime/300); # justify mtime to 5-minute interval
    $hash{$t}{'f1'} = $filename;
    $hash{$t}{'s1'} = stat($filename)->size;
    }

      Прозрачная работа с файловой системой, включая при необходимости вызов 'внешней команды' как в шелле + многомерные списки (хэши).
      Короче, для *nix-админа - то, что доктор прописал.  Питон на таких задачах сливает.

     
     
  • 2.27, Аноним (-), 11:20, 23/05/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >   Короче, для *nix-админа - то, что доктор прописал.  Питон
    > на таких задачах сливает.

    Ничего удивительного — perl с самого начала создавался для таких задач, в то время как питон создавался для распределённой операционной системы, которую сейчас никто не использует.

     
  • 2.33, 1 (??), 14:44, 23/05/2012 [^] [^^] [^^^] [ответить]  
  • –6 +/
    вы просто не владеете, ни тем, ни другим
     

  • 1.34, gthkjtl (?), 17:00, 23/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Больше перлов, хороших и разных!
     
  • 1.35, Аноним (-), 19:58, 23/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как там говорят про Perl 6:

    Любой набор символов в любой кодировке является синтаксически правильным Perl 6 кодом.

    :)

     
     
  • 2.39, qwerty (??), 00:10, 25/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >Как там говорят про Perl 6:
    >Любой набор символов в любой кодировке является синтаксически правильным Perl 6 кодом.
    >
    >:)

    Если в конце стоит 1;

     

  • 1.36, vasek (?), 03:05, 24/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    круто блин, __SUB__ -- нормалек
     
  • 1.37, zomg (?), 17:23, 24/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Perl, Python, Ruby, PHP, C, C++, Lua, tcl, javascript and Java comparison
    http://raid6.com.au/~onlyjob/posts/arena/
     
     
  • 2.38, dq0s4y71 (??), 19:42, 24/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Судя по исходникам, ребята, похоже, С от С++ не отличают :)
     
  • 2.41, Аноним (-), 13:18, 25/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    У этого перца вышло, что Perl уделал C по производительности. Впрочем, он и не отрицает, что налажал в сишном тесте, но, черт, все равно приятно :)
     
     
  • 3.42, angra (ok), 04:08, 26/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Если посмотреть исходники, то можно заметить, что для всех языков задача решена в лоб. Никаких хитрых оптимизаций. Выигрыш Perl в скорости(но не потреблении памяти) на строках по сравнению с C не вызывает в таком случае удивления, так как Perl создавался во многом для обработки строк.
     
     
  • 4.43, Аноним (-), 17:56, 26/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Если посмотреть исходники, то можно заметить, что для всех языков задача решена в лоб. Никаких хитрых оптимизаций

    В этом есть свой смысл. Большинство задач, особенно всякая мелочевка, решаются в лоб, наиболее коротким путем, который позволяет язык. Оптимизация штука непростая, трудоемкая и запутывает логику программы, абсолютно везде ее сувать не станешь. По крайней мере, не сразу.

    > Никаких хитрых оптимизаций

    Кое-какие оптимизации он приводит дальше по тексту, заменяя регекспы на алгоритм скользящего окна в Java-исходнике и получив ускорение вроде в 8 раз. Но позицию Java это не изменило, Перл даже без оптимизации сделал ее

     

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



    Спонсоры:
    MIRhosting
    Fornex
    Hosting by Ihor
    Хостинг:

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