Size: a a a

Compiler Development

2020 April 01

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
На мой взгляд, нюанс в трактовке. Если мы под монадой подразумеваем вообще (любой) способ построения комбинаторов — это одно. Действительно, нам ведь в любом случае нужно из одного состояния генерировать другое состояние под действием какой-то функции. Но вот слепо пытаться свою прикладную задачу упихивать в соответствии с конкретной сигнатурой bind из того же Haskell — неразумно. Собственно, как и в случае других шаблонов проектирования задача должна быть первична.
Мне кажется, что здесь ключевое "какой-то" функции. Если получается сделать её не "какой-то", а именно монадической join или bind, с соответствующим устройством аргументов и свойствами самих функций, работа и логика программы становится существенно проще. Это не всегда и везде пригодно, но в тех местах, где удаётся это разглядеть и сделать, получается хорошо.
источник

AG

Alex Gryzlov in Compiler Development
если прям про расширения кана, то без них в компиляторах никуда: http://www.cs.ox.ac.uk/ralf.hinze/Kan.pdf :)
источник

AG

Alex Gryzlov in Compiler Development
а вообще сейчас монады уже не модны, категорщики где-то с год назад открыли для себя линзы и сопутствующие им модули Тамбары
источник

PS

Peter Sovietov in Compiler Development
Alex Gryzlov
если прям про расширения кана, то без них в компиляторах никуда: http://www.cs.ox.ac.uk/ralf.hinze/Kan.pdf :)
"Say you have implemented some computational effect using a monad, and you note that your monadic program is running rather slow".
Ага. Это, видимо, одна из причин, почему моя библиотека комбинаторов в 3-5 раз оказалась быстрее популярной монадической библиотеки комбинаторов парсеров. Хотя я специально оптимизациями не занимался. В связи с этим вопрос. Может действовать по скрижалям ТРИЗ: "идеальная система - это когда системы нет, а функция выполняется"? То есть, ну ее, эту монаду? :)
источник

AG

Alex Gryzlov in Compiler Development
да, машина без тормозов ездит быстрее
источник

PS

Peter Sovietov in Compiler Development
Alex Gryzlov
да, машина без тормозов ездит быстрее
Ну мне вот, например, не нужна операция bind. У меня есть стек результатов и некоторые комбинаторы кладут на него значения. Таким образом я могу получать значения даже из объемлющих продукций, что важно, например, в реализации комбинатора Пратта. При этом семантические действия у меня вполне читаемые — это просто функции с аргументами. Каждый аргумент это соответствующее значение из стека результатов. Это очень плохо, что я все сделал не по канонам? :)
источник

G

Gradi in Compiler Development
https://habr.com/ru/post/494548/
Привет. Всё уже видели?
источник

Т8

Т-34 85 in Compiler Development
>Синтаксис правого присваивания
дальше можно не читать
источник

G

Gradi in Compiler Development
Т-34 85
>Синтаксис правого присваивания
дальше можно не читать
Зря. Там сказано, что синтаксис левого присваивания сохранён
источник

p

polunin.ai in Compiler Development
:D
источник

ИЧ

Илья Чистяков in Compiler Development
https://ruhaskell.org/posts/packages/2015/01/23/lenses-hello-world.html почитал про линзы, какие-то чуждые проблемы решает автор, и такое ощущение, что монады это как строгое ООП, для которого пришлось изобрести шаблоны проектирования
источник

p

polunin.ai in Compiler Development
ну язык сделан по фану, смысла обсуждать не вижу
источник

D

Dika in Compiler Development
Эзотерический язык получился
источник

AG

Alex Gryzlov in Compiler Development
Peter Sovietov
Ну мне вот, например, не нужна операция bind. У меня есть стек результатов и некоторые комбинаторы кладут на него значения. Таким образом я могу получать значения даже из объемлющих продукций, что важно, например, в реализации комбинатора Пратта. При этом семантические действия у меня вполне читаемые — это просто функции с аргументами. Каждый аргумент это соответствующее значение из стека результатов. Это очень плохо, что я все сделал не по канонам? :)
звучит как будто у вас там что-то типа стрелок вместо монад
источник

AG

Alex Gryzlov in Compiler Development
Илья Чистяков
https://ruhaskell.org/posts/packages/2015/01/23/lenses-hello-world.html почитал про линзы, какие-то чуждые проблемы решает автор, и такое ощущение, что монады это как строгое ООП, для которого пришлось изобрести шаблоны проектирования
монада это и есть шаблон
источник

ИЧ

Илья Чистяков in Compiler Development
Alex Gryzlov
монада это и есть шаблон
для меня, шаблоны - это костыли для языка, который идейно решил себя максимально ограничить, по типу ранних Java|C#, где без шаблонов невозможно писать код
источник

AT

Alexander Tchitchigin in Compiler Development
Илья Чистяков
https://ruhaskell.org/posts/packages/2015/01/23/lenses-hello-world.html почитал про линзы, какие-то чуждые проблемы решает автор, и такое ощущение, что монады это как строгое ООП, для которого пришлось изобрести шаблоны проектирования
Линзы - это как .foo в ООП в выражениях типа this.foo.bar.baz op= quux. Только "возвращать" может не один объект, а итератор объектов, объект-или-ничего и т.п. Давате, сделайте то же самое в ООП хотя бы как встроенную в язык фичу, а не библиотеку. 😂
источник

МБ

Михаил Бахтерев in Compiler Development
Alex Gryzlov
а вообще сейчас монады уже не модны, категорщики где-то с год назад открыли для себя линзы и сопутствующие им модули Тамбары
А где бы об этих модулях и примерах использования почитать?
источник

p

polunin.ai in Compiler Development
Alexander Tchitchigin
Линзы - это как .foo в ООП в выражениях типа this.foo.bar.baz op= quux. Только "возвращать" может не один объект, а итератор объектов, объект-или-ничего и т.п. Давате, сделайте то же самое в ООП хотя бы как встроенную в язык фичу, а не библиотеку. 😂
это называется properties
источник

AT

Alexander Tchitchigin in Compiler Development
Илья Чистяков
для меня, шаблоны - это костыли для языка, который идейно решил себя максимально ограничить, по типу ранних Java|C#, где без шаблонов невозможно писать код
Вы никогда не думали, что неправильно понимаете шаблоны? "Банду четырёх" вообще читали? Не говоря уже про Александера... 😉
источник