Size: a a a

Rust — русскоговорящее сообществo

2020 September 03

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
Просто интерпретаторы AST я колбасил тут https://github.com/gabriel-fallen/rusty-krivine и тут https://github.com/gabriel-fallen/HomegrownVM

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

f

folex in Rust — русскоговорящее сообществo
Alexander Tchitchigin
Падажжи, ёбана — что конкретно ты хочешь сделать? А то дататайпы — это одно (или несколько), а свободные монады — совсем другое. 😊
Пока что я хочу руками писать AST, и засовывать его в интерпретатор. Без доп. типизации, без всего, просто брать дерево из команд, и по одному интерпретировать.

Что-то вроде такого у меня выходит https://gist.github.com/folex/6229d01822b5ab22b736ec933f2e782a
источник

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
folex
Пока что я хочу руками писать AST, и засовывать его в интерпретатор. Без доп. типизации, без всего, просто брать дерево из команд, и по одному интерпретировать.

Что-то вроде такого у меня выходит https://gist.github.com/folex/6229d01822b5ab22b736ec933f2e782a
Ох, жестковато... 😃
FreeVar получается закодирована в Higher-Order Abstract Syntax aka HOAS, в то время как всё остальное — нет. Думается, лучше бы либо всё в First-Order кодировать, либо всё в HOAS. Но с HOAS в Rust я предчувствую проблемы (из-за отсутствия GC, в частности).
источник

АМ

Александр Маглеванны... in Rust — русскоговорящее сообществo
Господа, подскажите, кто пользуется RA, вот эта строчка будет ломать у вас форматирование при сохранении?

        // excessive spaces intended
       let log = format!(
           "Starting timeout after {} delivery. Time passed: {} ms, so real duration of timeout will be {} ms",
           awaited_message_id,


           time_already_passed_ms,
           real_duration_millis,
       );
источник

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
folex
Пока что я хочу руками писать AST, и засовывать его в интерпретатор. Без доп. типизации, без всего, просто брать дерево из команд, и по одному интерпретировать.

Что-то вроде такого у меня выходит https://gist.github.com/folex/6229d01822b5ab22b736ec933f2e782a
В общем, понятно, что разрабатывается язык/DSL над CSP/Process Algebra — я бы начал с того что написал бы этот язык и примеры просто "на бумажке" (в файлике) в виде surface language и более-менее расписал бы его denotational semantics (т.е. трансляцию/дешугаринг в CSP/Process Algebra), а уже потом писал бы реализацию, когда получил бы вменяемый прототип синтаксиса и семантики.
источник

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
Ну и можно на prior art посмотреть, потому что уже существует несколько языков, основанных на Process Algebra и нацеленных на распределённые вычисления.
источник

f

folex in Rust — русскоговорящее сообществo
Alexander Tchitchigin
В общем, понятно, что разрабатывается язык/DSL над CSP/Process Algebra — я бы начал с того что написал бы этот язык и примеры просто "на бумажке" (в файлике) в виде surface language и более-менее расписал бы его denotational semantics (т.е. трансляцию/дешугаринг в CSP/Process Algebra), а уже потом писал бы реализацию, когда получил бы вменяемый прототип синтаксиса и семантики.
Семантика уже более менее нарисована, т.е. как должен работать интерпретатор, и что будет стоять за каждым Call/FreeVar/Terminate – понятно. И чтобы поглубже это понять, я хочу понять, как это будет ложиться на раст, чтобы почувствовать ограничения, и примерное направление, в котором нужно дизайнить.
источник

f

folex in Rust — русскоговорящее сообществo
Я думаю, совет посмотреть реализации интерпертаторов какого-нибудь питона/лиспа или может быть CSP DSL каких-то – это отличйнеший совет! :)
источник

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
folex
Семантика уже более менее нарисована, т.е. как должен работать интерпретатор, и что будет стоять за каждым Call/FreeVar/Terminate – понятно. И чтобы поглубже это понять, я хочу понять, как это будет ложиться на раст, чтобы почувствовать ограничения, и примерное направление, в котором нужно дизайнить.
И какова же семантика FreeVar? 😉
источник

f

folex in Rust — русскоговорящее сообществo
Alexander Tchitchigin
И какова же семантика FreeVar? 😉
Это переменная, которая приходит извне или вычисляется позже. В общем, депенденси. Интерпретатор должен следить за ними, и пытаться эти депенденси удовлетворить. Например может быть так что вычисляется несколько конкурентных веток, и скажем 3я зависит от FreeVar "foo". "foo" в свою очередь вычисляется в скажем 1й ветке.

Так как интерпретатор выполняет все ветки, для которых удовлетворены депенденси, и ставит на холд те ветки, где они не удовлетворены. Таким образом, когда он доходит до 3й ветки, он ставит её на холд. Когда 1я закончит выполнение, "foo" попадет в стейт интерпретатора, и можно будет запускать 3ю ветку.

Hope this makes sense :)
источник

f

folex in Rust — русскоговорящее сообществo
Наверное нужно снова свалить в другой чат, да? А то я оффтоплю
источник

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
folex
Наверное нужно снова свалить в другой чат, да? А то я оффтоплю
Думаю, да. 😊
источник

DS

Danieλ Sλapman in Rust — русскоговорящее сообществo
Alexander Tchitchigin
Кроме того, на Rust, наверное, можно наколбасить Final Tagless, а вот Free Monads — сильно сомневаюсь. Без HKT-то. 😉
Final tagless без HKT тоже не выйдет
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
Так в Найтли есть же гат
источник

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
Danieλ Sλapman
Final tagless без HKT тоже не выйдет
Та не, трейтов должно хватить... 😃
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
Gat
источник

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
источник

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообществo
Dollar Føølish
Gat
KISS 😉
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
Хех
источник

YB

Yevhenii Babichenko in Rust — русскоговорящее сообществo
Это вам на Go писать 🌚
источник