Size: a a a

Compiler Development

2020 May 04

KR

K R in Compiler Development
Peter Sovietov
Так это просто язык переписывания термов.
Это очень хорошо, что совпадает с первым вариантом, пришедшим мне в голову. Но вы не знаете, случайно, там какая-нибудь документация, описание этого языка в популярном виде есть?
источник

PS

Peter Sovietov in Compiler Development
K R
Это очень хорошо, что совпадает с первым вариантом, пришедшим мне в голову. Но вы не знаете, случайно, там какая-нибудь документация, описание этого языка в популярном виде есть?
источник

KR

K R in Compiler Development
Огромное спасибо!
источник

PS

Peter Sovietov in Compiler Development
Но там по верхам. Лучше посмотреть код компилятора, код достаточно читаемый. Например, в статье не пишут на тему стратегии переписывания — а в Go она не такая уж примитивная. Правила коммутативности, к примеру, учитываются.
источник

PS

Peter Sovietov in Compiler Development
Когда я говорю "лучший вариант" — подразумеваю, конечно, среди популярных. У академиков и в разных нишевых областях есть не в пример более мощные решения.
источник

KR

K R in Compiler Development
Ну мне и не надо туда зарубаться - просто интересно глянуть, как делать правильно. Не очень понятно, конечно, зачем им такое дикое количество скобок. Ну да и ладно.
источник

PS

Peter Sovietov in Compiler Development
По сравнению с конкурентами скобок еще не так много :)
источник

KR

K R in Compiler Development
Просто можно было бы взять Клиновский или Хаскельный синтаксис. Он лучше подходит для переписывания термов. Меньше визуального шума.
источник

PS

Peter Sovietov in Compiler Development
Тут надо самому пробовать, прежде чем критиковать :)
Есть масса интересных подходов в этой области. Например, правила могут использовать конкретный синтаксис. Какие уж тут Haskell/Clean...
источник

M

MaxGraey in Compiler Development
Peter Sovietov
В Go как раз самый лучший вариант :) В том числе потому, что решили подумать, а не просто заимствовать Лисп-подобную нотацию ("как в gcc").
Может с точки зрения дизайна самого DSL но вот с реализацией и эффективностью переписывания этих термов там что то не задалось. Там очень пипхол оптимизации там очень слабо редуцируют казалось очень очевидные выражения.
источник

M

MaxGraey in Compiler Development
возможно проблема с линеаризацией. Трудно сказать
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
Может с точки зрения дизайна самого DSL но вот с реализацией и эффективностью переписывания этих термов там что то не задалось. Там очень пипхол оптимизации там очень слабо редуцируют казалось очень очевидные выражения.
Ну, ошибки в правилах я у них находил — это нормально. К тому же сам факт, что я не поленился изучать именно код в Go — о многом говорит. Я на самом Go никогда ничего серьезного не писал :)
источник

M

MaxGraey in Compiler Development
Peter Sovietov
Ну, ошибки в правилах я у них находил — это нормально. К тому же сам факт, что я не поленился изучать именно код в Go — о многом говорит. Я на самом Go никогда ничего серьезного не писал :)
Вот кстати в Cranelift предлагают использовать Alive и z3 для доказательства корректности и нередундантности правил
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
Вот кстати в Cranelift предлагают использовать Alive и z3 для доказательства корректности и нередундантности правил
Ага, но вот ту ошибку, которую я нашел, непонятно вообще как сформулировать для SMT-решателя.
источник

M

MaxGraey in Compiler Development
Еще интерестно то, что DSL там интерпретируется, то есть можно дополнять правила без пересборки самого кранлифта
источник

KR

K R in Compiler Development
MaxGraey
Еще интерестно то, что DSL там интерпретируется, то есть можно дополнять правила без пересборки самого кранлифта
А это критично по скорости вот для этого применения - компилировать DSL или интепретировать? Насколько я понимаю, интерпретация сажает скорость раз в 10.
источник

AT

Alexander Tchitchigi... in Compiler Development
K R
А это критично по скорости вот для этого применения - компилировать DSL или интепретировать? Насколько я понимаю, интерпретация сажает скорость раз в 10.
Это для числодробления без JIT. Для переписывания термов даже без JIT разница будет x2-x3 только.
источник

AT

Alexander Tchitchigi... in Compiler Development
Это всё, конечно, абсолютно точные значения, основанные на тщательных продуманных измерениях на репрезентативных входных данных. 😉
источник

IJ

Igor 🐱 Jirkov in Compiler Development
А чем условный программист на хаскеле  или расте может соблазниться в обероне?
источник

PS

Peter Sovietov in Compiler Development
Igor 🐱 Jirkov
А чем условный программист на хаскеле  или расте может соблазниться в обероне?
источник