Это очень хорошо, что совпадает с первым вариантом, пришедшим мне в голову. Но вы не знаете, случайно, там какая-нибудь документация, описание этого языка в популярном виде есть?
Это очень хорошо, что совпадает с первым вариантом, пришедшим мне в голову. Но вы не знаете, случайно, там какая-нибудь документация, описание этого языка в популярном виде есть?
Но там по верхам. Лучше посмотреть код компилятора, код достаточно читаемый. Например, в статье не пишут на тему стратегии переписывания — а в Go она не такая уж примитивная. Правила коммутативности, к примеру, учитываются.
Когда я говорю "лучший вариант" — подразумеваю, конечно, среди популярных. У академиков и в разных нишевых областях есть не в пример более мощные решения.
Ну мне и не надо туда зарубаться - просто интересно глянуть, как делать правильно. Не очень понятно, конечно, зачем им такое дикое количество скобок. Ну да и ладно.
Тут надо самому пробовать, прежде чем критиковать :) Есть масса интересных подходов в этой области. Например, правила могут использовать конкретный синтаксис. Какие уж тут Haskell/Clean...
В Go как раз самый лучший вариант :) В том числе потому, что решили подумать, а не просто заимствовать Лисп-подобную нотацию ("как в gcc").
Может с точки зрения дизайна самого DSL но вот с реализацией и эффективностью переписывания этих термов там что то не задалось. Там очень пипхол оптимизации там очень слабо редуцируют казалось очень очевидные выражения.
Может с точки зрения дизайна самого DSL но вот с реализацией и эффективностью переписывания этих термов там что то не задалось. Там очень пипхол оптимизации там очень слабо редуцируют казалось очень очевидные выражения.
Ну, ошибки в правилах я у них находил — это нормально. К тому же сам факт, что я не поленился изучать именно код в Go — о многом говорит. Я на самом Go никогда ничего серьезного не писал :)
Ну, ошибки в правилах я у них находил — это нормально. К тому же сам факт, что я не поленился изучать именно код в Go — о многом говорит. Я на самом Go никогда ничего серьезного не писал :)
Вот кстати в Cranelift предлагают использовать Alive и z3 для доказательства корректности и нередундантности правил
Еще интерестно то, что DSL там интерпретируется, то есть можно дополнять правила без пересборки самого кранлифта
А это критично по скорости вот для этого применения - компилировать DSL или интепретировать? Насколько я понимаю, интерпретация сажает скорость раз в 10.
А это критично по скорости вот для этого применения - компилировать DSL или интепретировать? Насколько я понимаю, интерпретация сажает скорость раз в 10.
Это для числодробления без JIT. Для переписывания термов даже без JIT разница будет x2-x3 только.