28.05.2023

Rakudo 2021.04

Тихо и незаметно вышла версия 2021.04 компилятора языка программирования Raku — Rakudo.
Компиляция осуществляется для таких виртуальных машин как: MoarVM, JVM и другие. На данный момент, Rakudo является самым развитым воплощением языка программирования Raku. Данный выпуск реализует версии 6.c и 6.d спецификации.

Следующий релиз предварительно запланирован на 21 мая.

Для команды разработчиков очень важна обратная связь! Будьте любезны оставить отзыв если используете Rakudo. Вопросы, комментарии, предложения, улучшения — рады любой обратной связи!

Желающие поддержать развитие Raku могут сделать пожертвование в The Perl Foundation (Выберите «Raku Core Development Fund» в графе «Purpose»).

Некоторые изменения 2021.04:

  • Нововведения:
    • Для Enum добавлена поддержка методов: keys, values, kv, pairs, antipairs, invert. Пример:
      my $e = enum ('a' => 3, 'b' => 17);
      say $e.antipairs; # (3 => a 17 => b)␤
      
    • Метод uniname теперь работает для всех значений типа Cool, в том числе Num и Match
      say 1.0.uniprop('Numeric_Type'); # OUTPUT: «Decimal␤»
      
    • В IO::Path добавлены методы user и group:
      my $io = IO::Path.new('slackware-user', :CWD</home>);
      say $io.user; # OUTPUT: «1000␤»
      
    • В DateTime добавлены методы day-fraction, modified-julian-date и julian-date
      my $now = DateTime.now(formatter => { sprintf "%02d:%02d", .hour, .minute });
      say "$now ", ( $now.day-fraction * 100 ).fmt('%d%%'); # OUTPUT: «21:26 89%␤»
      
  • Улучшения производительности:
    • now теперь работает в 38 раз быстрее.
    • Str.wordcase ускорен в 5 раз.
      say "raku programming".wordcase; # OUTPUT: «Raku Programming␤»
      
    • Str.uniparse стал быстрее ~10%
      say "I {uniparse 'TWO HEARTS'} Raku"; # OUTPUT: «I 💕 Raku␤» 
    • lines и words ускорены в 20 раз
      say lines("a\nb").raku; # OUTPUT: «("a", "b").Seq␤» say "hello world".words.raku; # OUTPUT: «("hello", "world").Seq␤» 
    • my %h is QuantHash = … ускорен в 5 раз
    • Int.unival и Str.unival так же были ускорены
      say '¾'.unival; # OUTPUT: «0.75␤» 
    • Str.ords стал в два раза быстрее
      say '€¥$'.ords; # OUTPUT: «(8364 165 36)␤» 
    • Ускорены методы List.sum и Any.sum
    • Метод chrs стал быстрее для специфичных для используемой архитектуры int-массивов
      say <67 97 109 101 108 105 97>.chrs; # OUTPUT: «Camelia␤»
      
    • Метод uninames ускорен в два раза
      say ‘»ö«’.uninames.raku;
      # OUTPUT: «("RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK", "LATIN SMALL LETTER O WITH DIAERESIS", "LEFT-POINTING DOUBLE ANGLE QUOTATION MARK").Seq␤»
      
    • Str.univals ускорен на 50%
      say "4a¾".univals; # OUTPUT: «(4 NaN 0.75)␤»
      
    • Datish.daycount вычисляется быстрее на 30%
      # к-во дней с 17.11.1858
      say Date.new('1995-09-27').daycount; # OUTPUT: «49987␤»
      
    • uniprop ускорен в 30 раз, а uniprops в 4 раза
    • Baggy.AT-KEY быстрее на 60%
      my $breakfast = bag <eggs bacon bacon bacon>;
      say $breakfast.AT-KEY('bacon'); # OUTPUT: «3␤»
      
    • Пустые итераторы отрабатывают быстрее
    • Микрооптимизации цикла for
    • Микрооптимизации запуска

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

Наслаждайтесь!

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

Источник.