LINUX.ORG.RU

Сообщения Olegymous

 

Perl 5.20

Группа Open Source

Несколько часов назад состоялся релиз новой мажорной версии языка программирования Perl. Разработка Perl 5.20.0 заняла примерно 12 месяцев с момента выпуска Perl 5.18.0 и содержит около 470 000 строк изменений в 2 900 файлах от 124 авторов.

В этой версии достаточно много новшеств:

  • Subroutine signatures
    То, чего многие так ждали, а другие возражали привычным «ненужно»
    sub foo($bar, $baz) {
      print "\$bar=$bar, \$baz=$baz"
    }
    
    Таким образом теперь можно определять параметры функции в скобках после её имени. Есть и возможность задать значение по умолчанию
    sub bar($foo, $baz=10) {
      print '$foo+$baz=', $foo+$baz
    }
    
    О других особенностях новой экспериментальной возможности можно прочитать в perldoc perlsub. Стоит отметить, что старый механизм получения параметров функции из @_ также остаётся в силе.
  • Новый синтаксис для получения среза ключей-значений/индексов-значений для хешей/массивов
    %hash{...} и %array[...] соответственно
    %h = (blonk => 2, foo => 3, squink => 5, bar => 8);
    %subset = %h{'foo', 'bar'}; # срез ключ-значения для хеша
    # %subset теперь (foo => 3, bar => 8)
    
    @a = "a".."z";
    @list = %a[3,4,6]; # срез индекс-значения для массива
    # @list теперь (3, "d", 4, "e", 6, "g")
    
  • Постфиксное разыменовывание
    К старому доброму разыменовыванию ссылок, навроде @$foo и %$bar, был добавлен вариант постфиксного разыменовывания: $foo->@* и $bar->%* соответственно. Синтаксис для других типов ссылок можно посмотреть в perldoc perlref
  • Механизм копирования при записи (copy-on-write) для строк
    Теперь при присвоении переменной значения другой строковой переменной не создаётся копии буфера вплоть до тех пор, пока значение одной из переменных не будет изменено. Это увеличивает скорость присвоения и снижает потребление памяти. Теперь не потребуется передавать в функцию строковую переменную по ссылке, чтобы увеличить производительность.

>>> Подробности

 ,

Olegymous
()

Perl 5.18

Группа Open Source

Сегодня 05.18 состоялся релиз Perl 5.18. Разработка заняла год с момента выпуска предыдущей стабильной версии, при участии 113 авторов.
Из видимых изменений можно отметить следующие:

  • Новый механизм для экспериментальных возможностей (features)
    Начиная с этого выпуска при использовании какой-либо экспериментальной возможности будет выдаваться предупреждение, избавиться от которого можно с помощью стандартного механизма «no warnings» (для чего была добавлена категория experimental)
    no warnings "experimental::feature_name";
    Также стоит отметить, что некоторые из уже привычных возможностей были перенесены в категорию экспериментальных, например оператор smartmatch. Полный список экспериментальных возможностей можно посмотреть в perlexperiment
  • Более строгая рандомизация хешей
    Отдельное внимание было уделено проблеме. известной как Hash Collision Complexity Attack. Несмотря на то, что возможность данной атаки была сведена к нулю начиная с perl 5.8.1 (25-е сентября 2003-го), разработчики пошли дальше (возможно, в связи с недавними событиями вокруг некоторых известных языков, применяемых в веб-разработке) и усовершенствовали механизм рандомизации хешей. Теперь порядок вывода одного и того же хеша отличается от запуска к запуску. Помимо этого каждый хеш имеет свой собственный порядок итерирования, поэтому порядок вывода двух хешей с одинаковыми значениями может отличаться. Также был добавлен ряд новых хеширующих функций, а выбрать конкретную можно на этапе компиляции интерпретатора perl.
  • Бинарные операции над символьными классами в регулярных выражениях
    Это экспериментальная возможность, позволяющая применять к символьным классам бинарные операторы, такие как: & (пересечение), + или | (объединение), - (вычитание), ^ (симметрическая разность). Так, например, можно получить все цифры Тайского или Лаосского написания:
    /(?[ ( \p{Thai} + \p{Lao} ) & \p{Digit} ])/
    
  • Подпрограммы с лексической областью видимости
    Появилась экспериментальная возможность создавать подпрограммы с лексической областью видимости (my sub foo {} или state sub foo {}) и алиасы с лексической областью видимости на подпрограммы текущего пакета (our sub foo {}).

>>> Подробности

 ,

Olegymous
()

Perl 5.16

Группа Open Source

Вечером 20 мая, спустя год после публикации версии 5.14, состоялся релиз Perl версии 5.16.
Из изменений можно отметить следующие:

  • Поддерживаемая версия unicode обновлена до 6.1.
  • use VERSION теперь переводит интерпретатор в режим указанной версии. Например, указав use v5.14 в версии 5.16 мы получим поведение perl 5.14, а все features из других версий будут отключены.
  • Новое ключевое слово __SUB__, с помощью которого можно получить ссылку на текущую подпрограмму в области видимости самой подпрограммы. Теперь написание однострочников стало еще проще:
    # вычислим факториал 10 в одну строку
    my $fact = sub { $_[0]>0 ? $_[0] * __SUB__->($_[0]-1) : 1 }->(10)
    
  • Новая функция fc, производящая unicode casefolding над переданной строкой. Если ранее для сравнения не ASCII строк в разном регистре вы применяли lc() или uc(), то вы делали это неверно. Например слово «Reichwaldstraße» в верхнем регистре записывается, как REICHWALDSTRASSE. Что после перевода в нижний регистр обоих вариантов приведет к сравнению «reichwaldstraße» и «reichwaldstrasse». В итоге сравнение закончится неудачей. Именно эту проблему решает функция fc().

>>> Подробности

 ,

Olegymous
()

Perl 5.14

Группа Open Source

14 мая после долгого тестирования и трёх релиз-кандидатов состоялась публикация Perl версии 5.14. Это первый релиз Perl 5 по новому графику, согласно которому выпуск стабильной версии будет происходить раз в 1 год.

В этой версии присутствует множество изменений и улучшений. Вот лишь некоторые из них:

  • Поддержка unicode 6.0 и огромное число улучшений связанных с работой unicode.
    Ниже представлен пример тестирования строки регулярным выражением, который не находит соответствия в предыдущих версиях Perl, но отрабатывает корректно в Perl 5.14
    use utf8;
    'Тестовая строка' =~ /^[а-я ]+$/i
        or die 'regexp failed';
    

  • Улучшения в поддержке IPv6.
    В модуле Socket появились константы и функции с соответствующим функционалом.

  • Значительно упростилась конфигурация клиента CPAN
    Всё ещё сложно? На CPAN доступен альтернативный клиент cpanminus, который и вовсе не требует предварительной конфигурации.

  • Новый модификатор /r производящий замену s/// не модифицируя исходную переменную
    my $old = "cat";
    my $new = $old =~ s/cat/dog/r;
    # $old по прежнему "cat", а $new теперь "dog"
    

  • Новые модификаторы регулярных выражений /a и /u позволяющие указать, что выражение нужно компилировать как ASCII или Unicode соответственно.
    Например класс \w с модификатором /a гораздо менее обширен, чем он же с модификатором /u

  • Новый синтаксис объявления пакетов «package Foo { }»
    В предыдущих версиях область видимости пакета продолжалась до конца файла, блока, eval или до объявления нового пакета. Новый синтаксис позволяет определить область видимости пакета в более логичной форме.
    package Foo {
      ...
    }
    # эквивалентно
    {
      package Foo;
      ...
    }
    

  • Меньшее потребление памяти и CPU, чем в предыдущих версиях
  • Множество исправлений ошибок, в том числе очень серьёзных

Обо всех остальных изменениях можно узнать ознакомившись с perl5140delta.

Важно отметить, что с выходом этой версии официально объявлено об окончании поддержки Perl 5.10

Разработка Perl 5.14 заняла 1 год с момента выхода версии Perl 5.12.0 12 апреля прошлого года. 550 тысяч строк кода было добавлено и изменено в трёх тысячах файлов 150-ю авторами и энтузиастами. Авторы благодарят сообщество CPAN, которое помогает Perl процветать, а также всё комьюнити, благодаря которому стал возможен релиз этой версии. Отдельное спасибо авторы выражают Джессу Винсенту (Jesse Vincent), который является координатором и релиз менеджером Perl 5.14.

>>> Подробности

 ,

Olegymous
()

RSS подписка на новые темы