LINUX.ORG.RU

Rakudo 2021.04

 ,


0

3

Тихо и незаметно вышла версия 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
    • Микрооптимизации запуска

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

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

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

Ещё новая версия Perl’а вышла, но я был занят, да и самочуха неоче, так что наверное не буду новость писать. Хотя может и чиркану на майских. Как думаете?

https://metacpan.org/pod/release/TODDR/perl-5.33.9/pod/perldelta.pod

P.S. Я учёл критику Михаилов и постараюсь оформлять новости нормально.

perl5_guy ★★★ ()
Последнее исправление: perl5_guy (всего исправлений: 1)
Ответ на: комментарий от perl5_guy

Новость оформлена хорошо.

Но, имхо, когда говорится про ускорение чего-то там хотелось бы видеть время выполнения на старой версии и на новой. Мне кажется, что так лучше чем просто «в 38 раз быстрее», но это сугубо предложение.

UPD. Ну либо хотя бы время выполнения на новой версии.

snake266 ()
Последнее исправление: snake266 (всего исправлений: 1)

А какие области применения у этого языка? Я так понимаю, Perl никуда не делся. Python цветёт. Что там ещё. Go занял свою нишу. Javascript рулит в вебе. Зачем его пилят? Почему стоит тратить на него время потенциальным новым пользователям?

DyadyushkaAU ()
Ответ на: комментарий от snake266

Это предложение можно разработчикам направить. Я просто перевёл информацию с github’а и добавил примеры кода, чтоб было понятно о прокачке/добавлении каких вещей идёт речь. Разработчики Raku действительно рады любой обратной связи. Я через twitter с ними общаюсь. Достаточно просто тег #rakulang добавить и обязательно кто-нибудь ответит.

И на SO можно вопросы задавать по Raku/Perl’у. Ситуация уникальная - топовые программисты отвечают в этих ветках. Учитесь пока не стало мейнстримом.

perl5_guy ★★★ ()
Ответ на: комментарий от perl5_guy

Ну раз проверяют то даже пароль от твиттера вспомню.

Кстати присоединяюсь к вопросу выше. Я вот пытался щупать раку, но в большинстве случаев было легче (удобнее) решить их через тот же питон.

Но тут наверно я просто не совпал с таргет аудиторией языка, я чаще всего произвожу какие-то вычисления, чем как-то манипулирую регулярками или другими лингвистическими анализами. Вроде как именно там раку же хорош?

snake266 ()
Ответ на: комментарий от DyadyushkaAU

В Raku мультипарадигменность доведена до абсолюта. Любой стиль поддерживается на полную катушку. Так же синтаксис заряжен по самые гланды. Можно невероятно выразительно и компактно решать многие задачи, зачастую в разы короче чем на Perl’е, причём даже с применением cpan’а не всегда удаётся ванильный Raku победить. Посмотри например задачу про прямоугольники: https://perlweeklychallenge.org/blog/perl-weekly-challenge-109/ Решения здесь: https://github.com/manwar/perlweeklychallenge-club

Возможно ты ничего не поймешь, но просто погляди как элегантно это решается на Raku. Простые вещи невероятно просты!

Да и вообще - язык джвадцать лет проектировали, он прописан от А до Я.

Конкурентность работает из коробки. Все современные штуки там есть (кроме разве что легковесных тредов). Даже однострочники параллелить не напряжно получается.

Отличный язык. Определённо стоит его посмотреть. Единственный минус - непопулярен, но я думаю что это изменится.

perl5_guy ★★★ ()
Последнее исправление: perl5_guy (всего исправлений: 1)

Как укушенный перлом давным-давно, каждый раз думаю: какой же он классный. Но тормозной и нестабильный. Ждали-ждали perl6, и всё продолжаем жать…

octy ★★ ()

Бля ребят там в Индии какая-то ебаная мутация ковида, которой все похуй. А вы тут все в своих игрушечки играете, раку, хуяку…

anonymous ()

вообще хочется надеется что хотя бы единственным положительным эффектом от пандемии будет перераспределение более значимых средств в здравоохранение

а не на бесполезных кодеришек

anonymous ()
Ответ на: комментарий от anonymous

вообще хочется надеется что хотя бы единственным положительным эффектом от пандемии будет перераспределение более значимых средств в здравоохранение

Дохтора мало зарабатывают, надо ещё больше, а то больные в конец оборзели - нормальное лечение требуют. А ещё фармацевтические компании бедствуют. Наверное поэтому курс лечения некоторыми жизненно важными лекарствами стоит как небольшой особняк.

hummer ()
Ответ на: комментарий от perl5_guy

Единственный минус - непопулярен, но я думаю что это изменится.

Это не проблема. Медленный старт как-то сильнее напрягает. Я накропал микротест:

$ cat test.pl
#!/usr/bin/perl
use v5.30.0;
use warnings;
say "Helo";

$ cat test.raku
#!/usr/bin/raku
use v6;
say "Hello";

$ time ./test.pl
Helo

real	0m0.006s
user	0m0.005s
sys	0m0.001s

$ time ./test.raku
Hello

real	0m0.151s
user	0m0.161s
sys	0m0.027s

Программа на раке запускается во много раз медленнее, чем такая же программа на перле. Хотя пока время меньше секунды — на глаз не заметно.

Для справедливости надо сказать, что Perl+Moose тормозит примерно так же:

$ cat test+moose.pl 
#!/usr/bin/perl
use v5.30.0;
use warnings;
use Moose;
say "Helo";

vdb@antec:~/prj/raku/test
$ time ./test+moose.pl 
Helo

real	0m0.185s
user	0m0.169s
sys	0m0.013s

Но если сравнивать удобство использования раки с музой, то рака, безусловно, выигрывает. Поэтому я было решил, что уже можно пытаться что-то рисовать на раке.

Писал один скрипт, понадобился YAML-парсер. Нормального на раке не нашлось, решил сделать на раке биндинг к libyaml, заодно NativeCall освоить. А там туева хуча енумов, методов… Ну, как-то незаметно этот биндинг перевалил за 1000 строчек. То есть функциональности как таковой ещё нет, одни биндинги, а 1000-строчная программа на раке стартует уже 3.5 секунды. А это уже как-то напрягает.

Для проверки сделал вот такой файл:

#!/usr/bin/raku
use v6.d;
my $a = 0;
$a = $a + 1;
$a = $a + 1;
$a = $a + 1;
...1000 assignments...
say $a;

Эта хрень запускается 1.6 секунды. С тремя тысячами строк — 4.8 секунд. А что такое три тысячи строк? Мелочь.

Одна надежда — если вынести код в модуль и установить его через зеф, то, может быть, зеф в своей помойке сохранит какое-то промежуточное представление и запускаться будет быстрее, но создание модулей для зефа я ещё не пробовал.

Но скрипты на 20 строчек благодаря IO::Path писать очень приятно. Лучше чем Perl и Path::Tiny.

debugger ★★★ ()
Последнее исправление: debugger (всего исправлений: 1)
Ответ на: комментарий от perl5_guy

Посмотри например задачу про прямоугольники

Задача прямиком из промышленного программирования, ничего не скажешь. Не нужен Раку, так и скажи. На голых ЯП, кроме хелловорлдов, ничего не пишут, а когда начинают дергать либы, там роляет уже продуманность и развитость этих либ, а не как легко на языке кодить.

anonymous ()
Ответ на: комментарий от anonymous

Вышел новый коньпелятор языка кукареку - кукарекудо. Кудахтахтах теперь работает в триста раз быстрее.

Ты вот зря ёрничаешь. Такой язык «кукареку» действительно существует. Желающие могут поискать на лицемерной и двуличной гитхабовской помойке.

anonymous ()
Ответ на: комментарий от Vladimirmir

Ты какой-то неправильный Владимир. Используешь слэши как Владимир, подписываешься как Владимир, но ты - явно не Владимир. Потому-что Ъ-Владимир бы не стал регистрироваться.

Ъ-Владимир.

anonymous ()
Ответ на: комментарий от anonymous

Ты какой-то неправильный Владимир. Используешь слэши как Владимир, подписываешься как Владимир, но ты - явно не Владимир. Потому-что Ъ-Владимир бы не стал регистрироваться.

Да не дружище, тот самый.
Не регистрировался потому, что «юлить» не умею, а это не всегда всем нравится.
Да и потом - ни когда не был ГЕРОЕМ, восставшим против всех.

Зарегистрировался потому, что надоело оправдывать за посты другого форумчанина, который подписывался Владимир.
Кстати если начинал подписывать посты Владимир 123, то и он троллил с такой подписью.

Оно мне надо все время оправдываться?
Vladimirmir ()
Ответ на: комментарий от Vladimirmir

Ну если серьезно, то я рад за тебя. Наконец-то мне не придется тебя троллить всякий раз когда вижу твое сообщение. Но я - не гей-Владимир, если что, я гетеросексуал.

Гетеросексуальный Владимир.

anonymous ()

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

anonymous ()

Улучшения производительности: now теперь работает в 38 раз быстрее. Str.wordcase ускорен в 5 раз uniprop ускорен в 30 раз, а uniprops в 4 раза

А вот это «Str.wordcase ускорен в 5 раз» настораживает.
Perl всегда умел работать оптимально и быстро с текстом.

Годами ранее разработал связку Perl<>Foxpro 2.6 потому, что разработчики Foxpro 2.6 не умели работать с текстом.

Vladimirmir ()

Вот это

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

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

anonymous ()
Ответ на: комментарий от perl5_guy

Открой оригинальную ссылку, там рядом с описанием улучшений есть хэши коммитов.

В оригинальной ссылке "Make Str.wordcase about 5x as fast [5d058ea8]", а 

правильная ссылка в  

https://github.com/rakudo/rakudo/releases 
"Make Str.wordcase about 5x as fast [5d058ea]"

Потому то «Make Str.wordcase about 5x as fast [5d058ea8]» и нет ссылок на коммиты

Vladimirmir ()
Ответ на: комментарий от Vladimirmir

Разобрался.
Они к значению хеша добавляют какой-либо символ для того, чтобы сформировать ссылку на коммит.

Вообщем если кто хочет получить ссылки к комментам, то нужно смотреть https://github.com/rakudo/rakudo/releases

Vladimirmir ()
Ответ на: комментарий от perl5_guy

Посмотрел https://github.com/rakudo/rakudo/commit/5d058ea8814c833bac26c7e710d4e9e023d82829 Make Str.wordcase about 5x as fast

Вообщем то да, так и есть.

Мне нравится как вопросы case и sort решил разработчик core Harbour.
Он сформировал таблицу метаданных для каждой кодовой таблицы /весьма разумно/.
При этом для каждой таблицы в метаданных имеются ссылки на готовые
таблицы для case и sort.

В чем профит?
Для выполнения case к примеру, достаточно взять из таблицы код, результирующего символа.

Проще паренной репы

И выполняется case СУПЕР БЫСТРО.

Vladimirmir ()