Size: a a a

Compiler Development

2020 April 24

DP

Dmitry Ponyatov in Compiler Development
Peter Sovietov
Да нет, ну там же была работа только на строках. В отличие от Рефала, TREE-META и других ЯП 60-х.
насколько Рефал-машина близка к WAM по внутренностям и реализации?
источник

VK

Val Krylov in Compiler Development
А вот в функцинальщине решения по _библиотечному_ pattern matching обычно выглядят ничем не лучше таких же велосипедов на C++.
источник

VK

Val Krylov in Compiler Development
Всё дело в отсутствии поддержки first class patterns с привязкой к идентификаторам.
источник

PS

Peter Sovietov in Compiler Development
Val Krylov
Всё дело в отсутствии поддержки first class patterns с привязкой к идентификаторам.
А в чем проблема? first class pattern — это first class HOF. Для идентификаторов есть масса приемов. В лиспах это особенно легко делается :)
источник

PS

Peter Sovietov in Compiler Development
Было бы интересно разобрать конкретный пример, который кажется плохо выразимым на обычном ФП-языке.
источник

IJ

Igor 🐱 Jirkov in Compiler Development
Peter Sovietov
Я к тому говорю, что важнее не встроенные средства, в возможности реализовать пользовательские механизмы PM. Те же комбинаторы парсеров. Они легко реализуются в классическом ФП. В современном — со странностями и монадической идеологией, но тоже ведь реализуются! :)
А что вы понимаете под классическим (и чем оно  легче для парсер комбинаторов?). Я по свежим следам — буквально пару дней назад писал парсер-комбинаторы на расте :)
источник

VK

Val Krylov in Compiler Development
Peter Sovietov
А в чем проблема? first class pattern — это first class HOF. Для идентификаторов есть масса приемов. В лиспах это особенно легко делается :)
В лиспах это просто добавление нового языка сбоку, не решение в существующей системе типов.
источник

PS

Peter Sovietov in Compiler Development
Igor 🐱 Jirkov
А что вы понимаете под классическим (и чем оно  легче для парсер комбинаторов?). Я по свежим следам — буквально пару дней назад писал парсер-комбинаторы на расте :)
Ну Вы же знаете, что я люблю углубляться в историю :) Вот, например, одна забытая, но хорошая работа. 91 год, Генри Бейкер, которого я всегда читал с огромным интересом. http://home.pipeline.com/~hbaker1/Prag-Parse.html
источник

IJ

Igor 🐱 Jirkov in Compiler Development
Peter Sovietov
Ну Вы же знаете, что я люблю углубляться в историю :) Вот, например, одна забытая, но хорошая работа. 91 год, Генри Бейкер, которого я всегда читал с огромным интересом. http://home.pipeline.com/~hbaker1/Prag-Parse.html
Конечно! Я знал, что вы дадите ссылку на что-нибудь такое,  интересное:)
источник

PS

Peter Sovietov in Compiler Development
Val Krylov
В лиспах это просто добавление нового языка сбоку, не решение в существующей системе типов.
У меня raddsl работает не только в Racket, но и на Питоне :) Но Вы, конечно, правильно указываете на систему типов. Все эти трюки работают на динамических ЯП.
источник

DP

Dmitry Ponyatov in Compiler Development
Peter Sovietov
Было бы интересно разобрать конкретный пример, который кажется плохо выразимым на обычном ФП-языке.
требование ленивости важно?
необходимо ли оно для исполнения какой-нибудь выкрутаса типа сопоставлением шаблона с кольцевым списком?
источник

VK

Val Krylov in Compiler Development
Peter Sovietov
У меня raddsl работает не только в Racket, но и на Питоне :) Но Вы, конечно, правильно указываете на систему типов. Все эти трюки работают на динамических ЯП.
Prolog тоже относится к динамическим (хоть и не все диалекты), но unbound там сразу в системе типов, что и позволяет удобную работу с паттернами.
источник

PS

Peter Sovietov in Compiler Development
Igor 🐱 Jirkov
Конечно! Я знал, что вы дадите ссылку на что-нибудь такое,  интересное:)
Кстати говоря, впервые комбинаторы парсеров я встретил в старой книжке Хендерсона (1980), ее вовремя перевели еще в советское время.
Похоже, не так ли?
источник

PS

Peter Sovietov in Compiler Development
Val Krylov
Prolog тоже относится к динамическим (хоть и не все диалекты), но unbound там сразу в системе типов, что и позволяет удобную работу с паттернами.
Я у себя пишу seq(ident, sym("="), let(X=expr)) и вот оно, связывание метапеременной со значением.
И оно вполне себе первоклассное, поскольку я могу, например, написать:

X = let(X=expr)
seq(ident, sym("="), X)

При этом, в отличие от Пролога, у меня все еще доступен хост-язык, поэтому я могу создавать правила высшего порядка, в духе:

list_of(f, delim) ::= f (delim f)*
источник

IJ

Igor 🐱 Jirkov in Compiler Development
Интересно! Я вообще люблю комбинаторы, даже на форте похожим образом писал парсеры :)
источник

PS

Peter Sovietov in Compiler Development
Igor 🐱 Jirkov
Интересно! Я вообще люблю комбинаторы, даже на форте похожим образом писал парсеры :)
Я ими особенно проникся после той самой лекции Бэкуса. Это казалось настолько естественным развитием идей того же Форта :)
Кстати, есть забытая переписка Бэкуса и Дейкстры. Как раз по поводу комбинаторного FP. Со стороны Дейкстры было достаточно агрессивное неприятие идей FP :)
источник

MS

Mikola Summer Duck in Compiler Development
Peter Sovietov
Я ими особенно проникся после той самой лекции Бэкуса. Это казалось настолько естественным развитием идей того же Форта :)
Кстати, есть забытая переписка Бэкуса и Дейкстры. Как раз по поводу комбинаторного FP. Со стороны Дейкстры было достаточно агрессивное неприятие идей FP :)
Спасибо за пойнтер! Эта переписка это нечто божественное.
источник

MS

Mikola Summer Duck in Compiler Development
Я сейчас на начале второго письма и это просто какая-то тяжёлая артиллерия. Три полных абзаца в которых Джон Бакус аккуратно поливает дерьмом Эдсгера Дэкстру!
источник

a

alekum in Compiler Development
Mikola Summer Duck
Я сейчас на начале второго письма и это просто какая-то тяжёлая артиллерия. Три полных абзаца в которых Джон Бакус аккуратно поливает дерьмом Эдсгера Дэкстру!
заинтриговало ревью,)
источник

MS

Mikola Summer Duck in Compiler Development
alekum
заинтриговало ревью,)
https://medium.com/@acidflask/this-guys-arrogance-takes-your-breath-away-5b903624ca5f
Вот тут с фотками и транскриптами.
источник