LINUX.ORG.RU

Две бесплатные книги по Raku от Андрея Шитова

 


4

3

Raku One-Liners: В этой книге, вы найдёте множество скриптов, коротких настолько что они могут быть записаны в одну строку. Седьмая глава познакомит с синтаксическими конструкциями Raku, которые помогут создавать лаконичные, выразительные и при этом полезные программы! Подразумевается, что читатель знает основы Raku и имеет опыт программирования.

Using Raku: Книга содержит набор задач и решений к ним на Raku. Полезна как тем кто изучает данный ЯП, так и преподавателям. Ранее книга называлась «Using Perl6», но данная версия не простая замена s/Perl6/Raku/g, а новое издание с исправлениями и дополнениями.

P.S. Книга бесплатная, но Андрей будет рад пожертвованиям.

★★★★★

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

зачем нужен раку этот? для чего практически применяется? там ведь по сравнению с перлом 5 все изменилось...

cetjs2 ★★★★★
()

Ох ты я чет думал, что просто перл6 получил кодовое название «Раку». А оно вона как... Абзац.

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

Рекомендую ознакомиться с https://docs.perl6.org/language/faq#Why_should_I_learn_Perl_6?_What's_so_grea...

Ссылку можно добавить в текст новости как inb4 для «Зачем оно нужно, что это, почему».

Лень каждый раз перечислять все киллер-фичи уже.

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

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

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

Очень аргументированно, не перестаешь смешрадовать.

Deleted
()

языку всего два дня, а уже книги есть

или книга сделана с помощью sed и замены perl6 на raku?

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

до 14 я читал, потом бросил. а ща у меня старшие дети уже старше 14 лет, пусть они читают

buratino ★★★★★
()

ехал грека через реку
видит грека - в реке raku
сунул грека raku в raku
raku raku raku raku…

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

зачем нужен раку этот?

Чтобы смешить лоровцев.

anonymous
()

Годно

Нужно

mos ★★☆☆☆
()

С вами снова мерзкий анонимус! Что не говори, но нейминг-то ужасен. А это не мелочи.

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

1)В Java вообще нет multiple dispatch, затычка-эмуляция же.

2)Если присмотреться, код на Raku делает _гораздо_ больше вещей, чем код на Java, Причём с комментариями всех фич.

interface Collideable {
    default void collideWith(final Collideable other){
        // Call collideWith on the other object.
        other.collideWith(this);
    }

    /* These methods would need different names in a language without method overloading. */
    void collideWith(final Asteroid asteroid);
    void collideWith(final Spaceship spaceship);
}

class Asteroid implements Collideable {
    public void collideWith(final Asteroid asteroid) {
        // Handle Asteroid-Asteroid collision.
    }

    public void collideWith(final Spaceship spaceship) {
        // Handle Asteroid-Spaceship collision.
    }
}

class Spaceship implements Collideable {
    public void collideWith(final Asteroid asteroid) {
        // Handle Spaceship-Asteroid collision.
    }

    public void collideWith(final Spaceship spaceship) {
        // Handle Spaceship-Spaceship collision.
    }
}

Т.к. Raku поддерживает мультиметоды из коробки, то можно это переписать как лисповый вариант, например:

class Spaceship {...}

class Asteroid {
    multi method collideWith(Asteroid $asteroid) {
        say "Asteroid with asteroid!";
    }
    multi method collideWith(Spaceship $spaceship) {
        say "Oh noes!";
    }
}

class Spaceship {
    multi method collideWith(Asteroid $asteroid) {
        say "Oh noes! [2]";
    }
    multi method collideWith(Spaceship $spaceship) {
        say "Spaceship-spaceship collision!";
    }
}

my $aster = Asteroid.new;
my $ship = Spaceship.new;

$aster.collideWith($ship);
$aster.collideWith($aster);
$ship.collideWith($ship);
$ship.collideWith($aster);

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

Вроде код уменьшили в N раз. Миф развеян или ещё будут примеры?

Lilly
()

зачем нужен раку этот?

Посмотри на его логотип и не задавай глупых вопросов...

п.с. А комраду Шитову респект и уважуха.

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

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

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

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

п.с. Ссылки на книги только у меня не работают?

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

Ты этот логотип видел?

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

п.с. Ссылки на книги только у меня не работают?

Вроде только у тебя.

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

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

enso ★★★★★
()

Пожалуйста, напомните, переход с Perl 5 на Perl 6 не состоялся в силу нетривиальности перевода кода с одного языка на другой, резкого «улучшения» Perl 5 (я не знаю старого кода на Perl 5, поэтому мне не с чем сравнивать, но говорят, что последние версии Perl 5 лучше прежних), или в силу обеих причин, или по каким-то ещё неуказанным причинам?

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

Perl6 другой язык совсем ж. Даже называется уже Raku. А фичи из него переходят в Perl5 кста.

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

Есть много трений по этим вопросам, так что не хочется навязывать субъективную точку зрения, но... Perl 6 официально решили переименовать в Raku (комментарий) примерно описывает ситуацию.

Дизайн занял много времени, эксперименты с реализациями заняли много времени (как сказал архитектор, многие смеются с waterfall модели разработки, но когда речь заходит о дизайне языков, то они вдруг начинают думать, что оно так и работает, мол, сперва дизайн, потом реализация и готово, а не что всё развивается итерационно с фидбеком и обкаткой идей), много легаси, которое нет смысла переписывать. Сам язык очень другой и немного для другого, поэтому есть задачи, где можно взять Perl и это будет правильным решением, потому что задачам инструменты, а не наоборот.

нетривиальности перевода

Переводить можно, но автоматически - нет.

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

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

Некоторые из них выглядят так, будто сравнивали с перлом (наличие сигнатур, например), но когда узнаёшь, что сигнатуры там с интроспекцией, то где такое в python, ruby, javascript?

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

можешь привести какой-то реальный пример?

Чего? Сигнатур с интроспекцией? В Cro они используются для роутинга запросов:

route {
    # /search?term=mountains&images=true
    get -> search, :$term!, :$images where 'true' {
        ...
    }

    get -> 'viral', $meme, :$super-sneaky-tracking-id! is cookie {
        ...
    }

Здесь get это функция, которая принимает на вход блок кода, а этот блок - с сигнатурой, всё это интроспекцией собирается в стейт-машину, которая патчит url запроса по сигнатуре и вызывает нужный блок для конкретного реквеста.

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

Символика полезна прохожему, чтобы время зря не терять. Например, видим звезду давида змеюку на флаге — держимся подальше от такого сообщества. Видим упоротую бабочку, тоже на всякий пожарный обходим стороной. Лучше ошибиться, чем вляпаться в секту к наркоманам, сатанистам и извращенцам. Для адептов символика еще важнее, она несет скрытые от непосвященных смыслы. Вот зачем тебе две камелии? Мы не знаем, а ты может считываешь с них каббалистические знаки и подпитываешься энергией на целый день.

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

Вот зачем тебе две камелии?

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

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

ну это уже пример перегрузки, а не только интроспекции

а что именно означает стрелочка? (-> 'viral')

пока это не выглядит как «киллер-фича» языка

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

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

bread
()

Чёт ссылки ме-е-е-е-е-е-е-е-е-едленные.

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

а что именно означает стрелочка? (-> 'viral')

Указывает аргументы для анонимных блоков кода. Что-то типа такого:

(-> $a, $b { say $a + $b })(42, 42);

пока это не выглядит как «киллер-фича» языка

Разве кто-то говорил, что это киллер-фича? Из всего списка просто зацепились за это же.

Первоклассный юникод, метаобъектный протокол, рациональные числа, нормальное ООП, опциональная типизация из коробки, await без async-ов, простая параллелизация по данным и по задачам (никакого gil), улучшенные регулярки и грамматики из коробки, мутабельность языка, динамические переменные, нормальные сообщения об ошибках во время компиляции (например касательно лексических переменных), react/whenever, лень, поддержка модулей разных версий, кастомные операторы, трейты (нет, это не миксины, а скорее аннотации времени компиляции), мутабельность (акторы/мониторы реализуются в 100 строк, вместе с кастомным ключевым словом), и далее и далее.

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

слов много, но само упоминание gil-а выдает поверхностное знакомство с практическим применением питона

плюс пустые слова типа «нормальные» и «улучшенные»

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

т.е., чтобы был понятнее контекст моего вопроса, какие основные цели у Raku? вот у Perl6 цель была очень ясна, стать лучшим современным Perl, но теперь то худший несовременный перл никуда не собирается уходить

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

слов много, но само упоминание gil-а выдает поверхностное знакомство с практическим применением питона

Много слов как-то мешают?

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

См. список выше. Это всё фичи, которые побуждают частных разработчиков писать библиотеки, компании использовать язык, вот это вот всё. Я не понимаю тебя, ты пишешь «Какие фичи?», я перечисляю самое базовое, не одну и даже не парочку, ты спрашиваешь «Ты мог бы выделить парочку фич?». Звучит странно.

т.е., чтобы был понятнее контекст моего вопроса, какие основные цели у Raku? вот у Perl6 цель была очень ясна, стать лучшим современным Perl

Если тебя интересует идеология, то я не идеолог. Но из очевидного: TimToady + «Почини язык, а не пользователя». Вместе с подходом «Хмм, регулярки вызывают страх и ненависть... Как же сделать так, чтобы не вызывали? Давайте сделаем их использование удобней», «Хмм, многопоточность вызывает страх и ненависть... Как же сделать так, чтобы не вызывали? Давайте сделаем их использование удобней», и так далее.

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

пока по существу от тебя ничего кроме перегрузки функций/методов не увидел

а остальное всё что ты сказал — какой-то маркетинговый бред

я не утверждаю, что у языка нет других преимуществ кроме перегрузки по сравнению с уже существующими похожими языками, но ты пока не смог донести ни одно из них кроме неё

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

в аптеку тоже не заходишь

Конечно же нет. Символика однозначная: сатанисты ядом торгуют. В современных реалиях это еще и лавка с наркотой (бесхитростные амеры так и называют).

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

Значит у нас с тобой слишком большое понятийное расстояние, если описания, которыми я пользуюсь, ничего тебе не говорят.

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

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

и никто другой из всего международного сообщества этого языка тоже до сих пор не смог написать какой-нибудь статейки там с примерами о том чем это на практике лучше python, ruby, java?

UPD: кроме перегрузки :3

кстати, в одном их предыдущих сообщений, я тоже имел ввиду java, а не javascript

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

Не нужно. Полностью!

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

Ну давай так попробуем:

Perl 6 vs Python 3 (комментарий) - вот код, который разбирает выражения со скобками и проверяет их.

https://github.com/jnthn/oo-monitors/blob/master/lib/OO/Monitors.pm6 - вот код, который используя метаобъектный протокол создаёт новый тип класса, monitor, который работает как актор, на всё про всё 100 строк, без хаков и прочего. Бонусом conditional variables.

Perl 6 vs Python 3 (комментарий) - вот порт кода на go, который использует изкоробочный observable и паралеллизм по данным в одну строчку.

Теперь кто-то должен написать в студию альтернативы для сравнения.

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

и никто другой из всего международного сообщества этого языка тоже до сих пор не смог написать какой-нибудь статейки там с примерами о том чем это на практике лучше python, ruby, java?

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

Lilly
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.