Size: a a a

Compiler Development

2020 February 26

M

MaxGraey in Compiler Development
EgorBo
для них тоже аот есть
Так а почему не используется?
источник

E

EgorBo in Compiler Development
я вообще никаким образом не пересекаюсь с ними и не интересуюсь, знаю что там много людей и они очень активно работают)
источник

E

EgorBo in Compiler Development
ilya sheprut @optozorax
У меня такой вопрос. Связан с компиляторами, так что, думаю, по теме.

Вот есть формальные грамматики, в них есть терминалы и нетерминалы. Там через правила задаются преобразования изначального нетерминала.

А что если всё что у нас имеется - это терминалы и правила их преобразования? Как это называется?

Пример, собственно ради которого я и спрашиваю - это преобразование математических выражений. Вот есть у нас формула, или можно сказать "двустороннее правило": sin(2*x) <-> 2*sin(x)*cos(x), мы по этим формулам делаем допустимые преобразования из одного вида в другой, приходя к результату.

Просто интересно как такое может называться и насколько это исследовали. Может есть уже какие-то математические и программистские правила для описания подобных преобразований (ну как с формальными грамматиками).
прочитал это полотно и не понял сути вопроса
источник

E

EgorBo in Compiler Development
это про банальные пипхолы?
источник

LW

Lev Walkin in Compiler Development
ilya sheprut @optozorax
У меня такой вопрос. Связан с компиляторами, так что, думаю, по теме.

Вот есть формальные грамматики, в них есть терминалы и нетерминалы. Там через правила задаются преобразования изначального нетерминала.

А что если всё что у нас имеется - это терминалы и правила их преобразования? Как это называется?

Пример, собственно ради которого я и спрашиваю - это преобразование математических выражений. Вот есть у нас формула, или можно сказать "двустороннее правило": sin(2*x) <-> 2*sin(x)*cos(x), мы по этим формулам делаем допустимые преобразования из одного вида в другой, приходя к результату.

Просто интересно как такое может называться и насколько это исследовали. Может есть уже какие-то математические и программистские правила для описания подобных преобразований (ну как с формальными грамматиками).
2*x это уже нечто, что описывается нетерминалом
источник

E

EgorBo in Compiler Development
sin(2*x) <-> 2*sin(x)*cos(x)

можно добавить в гцц одним движением. вопрос: нужно ли
источник

E

EgorBo in Compiler Development
и ответ: ненужно
источник

AK

Andrei Kurosh in Compiler Development
EgorBo
и ответ: ненужно
Скорее всего речь была не про оптимизацию
источник

E

EgorBo in Compiler Development
хотя т.е. в теории sin(2*x)   можно разложить чтобы поискать CSE на компоненты
источник

AK

Andrei Kurosh in Compiler Development
А просто про преобразование выражений
источник

LW

Lev Walkin in Compiler Development
EgorBo
и ответ: ненужно
Mathematica и другие подобные программы делают это постоянно.
источник

E

EgorBo in Compiler Development
Lev Walkin
Mathematica и другие подобные программы делают это постоянно.
пусть они и дальше этим занимаются 😊
источник

SM

Sailor Moon in Compiler Development
ilya sheprut @optozorax
У меня такой вопрос. Связан с компиляторами, так что, думаю, по теме.

Вот есть формальные грамматики, в них есть терминалы и нетерминалы. Там через правила задаются преобразования изначального нетерминала.

А что если всё что у нас имеется - это терминалы и правила их преобразования? Как это называется?

Пример, собственно ради которого я и спрашиваю - это преобразование математических выражений. Вот есть у нас формула, или можно сказать "двустороннее правило": sin(2*x) <-> 2*sin(x)*cos(x), мы по этим формулам делаем допустимые преобразования из одного вида в другой, приходя к результату.

Просто интересно как такое может называться и насколько это исследовали. Может есть уже какие-то математические и программистские правила для описания подобных преобразований (ну как с формальными грамматиками).
в общем виде, это просто система переписывания? но они канонически недетерминистичны, что вряд ли на практике встречается. Пригодилась бы информация о том по какому правилу такие преобразования происходят
источник

PS

Peter Sovietov in Compiler Development
Sailor Moon
в общем виде, это просто система переписывания? но они канонически недетерминистичны, что вряд ли на практике встречается. Пригодилась бы информация о том по какому правилу такие преобразования происходят
Тут действительно напрашиваются системы переписывания. И еще вопрос — какую из них считать за канон ;)
Короче говоря, гуглить полезно по "term rewriting" и "equational language".
источник

M

MaxGraey in Compiler Development
sin(2*x) <-> 2*sin(x)*cos(x) и прочие сложные штуки в качестве пипхолов действительно не нужны. Для этого есть супероптимизиаторы такие как souper. Они сделают все намного лучше, а главное ты явно будеш контроллировать пайплайн и решать а надо ли тебе это вообще
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
sin(2*x) <-> 2*sin(x)*cos(x) и прочие сложные штуки в качестве пипхолов действительно не нужны. Для этого есть супероптимизиаторы такие как souper. Они сделают все намного лучше, а главное ты явно будеш контроллировать пайплайн и решать а надо ли тебе это вообще
Для сложных штук нужны, все-таки, предметно-ориентированные наборы правил. А souper не масштабируется и сложному его научить тоже сложно :)
источник

M

MaxGraey in Compiler Development
Peter Sovietov
Для сложных штук нужны, все-таки, предметно-ориентированные наборы правил. А souper не масштабируется и сложному его научить тоже сложно :)
Что значит не масштабируется?
источник

M

MaxGraey in Compiler Development
Ему как бы и не нужны вереницы DSL правил, он их сам выводит
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
Что значит не масштабируется?
Это означает, что сама по себе задача, с которой имеет дело решатель — NP-полная. А алгоритмы для таких задач не масштабируются в общем случае. И еще отдельный вопрос — как представить в SMT-решателе тригонометрию :)
источник

FO

FORTRAN ONE LOVE in Compiler Development
Peter Sovietov
Это означает, что сама по себе задача, с которой имеет дело решатель — NP-полная. А алгоритмы для таких задач не масштабируются в общем случае. И еще отдельный вопрос — как представить в SMT-решателе тригонометрию :)
как экспоненты, разумеется
источник