Perl 5.34.0

good-penguin.png

С момента выхода Perl 5.32.0 прошло около десяти месяцев. Если исключить документацию, генерируемые автоматически файлы и инструментарий для формирования самого релиза, было изменено 150,000 строк в 1,300 .pm, t, .c и .h файлах.

Выход версии 5.34.0 был омрачён рядом склок, приведших к уходу Sawyer X из сообщества, это последний релиз выпущенный данным pumpking’ом.

Несколько слов в память KENTNL (Kent Fredric)

Кент скончался в феврале 2021 года. Он поддерживал 178 CPAN-модулей, участвовал в разработке Gentoo Linux и самого Perl. Я также благодарен ему за исчерпывающие ответы на глупые вопросы, которые я задавал на заре моей карьеры Perl-разработчика. Земля пухом.

Новый функционал:

  • Добавлена экспериментальная поддержка try/catch.
    use feature 'try';
     
     try {
             a_function();
     }
     catch ($e) {
             warn "An error occurred: $e";
     }
    

    Данный функционал реализовал Paul «LeoNerd» Evans, который в последнее время частенько занимается доработкой интерпретатора. Свежее интервью с LeoNerd’ом можно прочитать здесь. Так же есть серия интересных статей, призванных помочь желающим присоединиться к доработке perl.
  • Нижняя граница диапазонного квантификатора теперь может быть опущена:
  • Допускается наличие пробелов для заключённой в фигурные скобки части метасимволов:
    \x{ FFFC }
    или 
    qr/a{ 5, 7 }/
  • Добавлен префикс 0o для записи восьмеричных констант: 0o123_456
  • В модуль feature добавлены две включённых по умолчанию настройки-ограничителя, которые вылились из ожесточённых дискуссий по поводу гипотетической 7й версии интерпретатора. Суть споров в предложении Sawyer X включить по умолчанию вещи, которые и так считаются стандартом в сообществе, но что неминуемо привело бы к необходимости переписывать написанные в плохом стиле скрипты.
    • bareword_filehandles
      no feature qw( bareword_filehandles );
      
      open( FP, "<", "./x" );
      
      # Bareword filehandle "FP" not allowed under 'no feature "bareword_filehandles"' at bareword.pl line 3.
      # Execution of bareword.pl aborted due to compilation errors.

      Разумеется данная прагма не влияет на поведение следующих идентификаторов без разыменовывающего префикса (т.н. «пустых слов»): STDIN, STDOUT, STDERR, DATA, ARGV, ARGVOUT и _.
    • multidimensional
      
      no feature qw( multidimensional );
      
      my %h = ();
      
      $h{1,2};
      
      # Multidimensional hash lookup is disabled at multi.pl line 5, near "2}"
      # Execution of multi.pl aborted due to compilation errors.
      

  • Исправлена утечка памяти:
    use Devel::Leak;
    my $count = shift @ARGV;
    
    $string = "STRING 1";
    
    my $handle;
    Devel::Leak::NoteSV($handle);
    for (1 .. $count) {
            $x = test_leak($string, "string 1");
                $x = test_leak($string, "string 2");
    }     
    Devel::Leak::CheckSV($handle);
    exit;
    
    sub test_leak {
            local ($string, $match) = @_;
                $match =~ s/\s/\\s/g;  # This Leaks
                    return ($string =~ /$match/i);
    }  
    

  • Расширен набор сообщений об ошибках и предупреждений.

Изменения в документации

  • Новые разделы:
    • perldocstyle — руководство по работе с документацией идущей в комплекте с Perl.
    • perlgov — документ, описывающий новую модель управления разработкой Perl’а. В perlpolicy так же было произведено заметное количество правок, для отражения случившихся изменений в управлении проектом.
  • Правки существующей документации:
    • perlapi, perlguts, perlxs и perlxstut теперь отдают предпочтение SvPVbyte вместо SvPV.
    • Упоминания Pumpking’а заменены на 'Руководящий комитет'.
    • Документация split () упрощена, путём удаления join () из примеров.
    • perlapi — продолжается работа по улучшению уже изложенной в разделе информации и документированию упущенных элементов API.
    • perlcommunity — s{irc.freenode.org/#perl.tw}{chat.freenode.org/#perl.tw}
      Данное изменение уже неактуально, в апстрим версии freenode заменена на libera.
    • perlfunc:
      • caller () — добавлено упоминание факта, что данная функция игнорирует блоки try{}
      • my () и state () — читатель явно предупреждается, что лексические переменные не должны переопределяться в том же блоке или выражении где они объявлены.
      • localtime () — описание было улучшено и добавлено упоминание, что результат всегда возвращается на английском языке.
      • sleep () — более подробно объясняется, как данная функция ведёт себя с нулевым или отрицательным параметром.
      • msgsnd ()
  • perlpacktut — исправлены имена переменных в примерах.
  • Так же изменены разделы: perlgit, perlguts, perlop, perlsyn, perlunifaq

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

©  Linux.org.ru