Size: a a a

Compiler Development

2020 April 19

МБ

Михаил Бахтерев in Compiler Development
Alex Gryzlov
моя текущая гипотеза что практически вся основная база для компиляторов выводится из теории доказательств и теории моделей :)
Конкретные алгоритмы не выводятся. Как вывести какое-нибудь назначение регистров раскраской графа методом линейного программирования? Или конкретный алгоритм проверки типов? Но структурные вещи, может быть, и выводятся.
источник

AG

Alex Gryzlov in Compiler Development
ну я к тому что эту технику вполне можно воспроизвести в том же хаскеле при желании: https://offog.org/publications/fita200811-generics.pdf
источник

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
Конкретные алгоритмы не выводятся. Как вывести какое-нибудь назначение регистров раскраской графа методом линейного программирования? Или конкретный алгоритм проверки типов? Но структурные вещи, может быть, и выводятся.
У, Вы хватили! Какие вообще алгоритмы! Это дело прошлого.  Эпоха постмодерна или пост-алгоритмизма :)
источник

AG

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

PS

Peter Sovietov in Compiler Development
Alex Gryzlov
ну я к тому что эту технику вполне можно воспроизвести в том же хаскеле при желании: https://offog.org/publications/fita200811-generics.pdf
Угу, но это, как и в случае Stratego на Haskell, скорее манифестации в духе "у нас тоже можно". Кроме того, с 2009 года Nanopass стал сильно мощнее и выразительнее.
источник

МБ

Михаил Бахтерев in Compiler Development
Ну, они же не выводят сам алгоритм, а просто его кодируют в таком вот proof-theoretic виде.
источник

AG

Alex Gryzlov in Compiler Development
именно выводят, там альтернативный алгоритм, не раскраска графа
источник

PS

Peter Sovietov in Compiler Development
Alex Gryzlov
именно выводят, там альтернативный алгоритм, не раскраска графа
А в чем состоит алгоритм?
источник

AG

Alex Gryzlov in Compiler Development
Peter Sovietov
А в чем состоит алгоритм?
трансформация в окололинейную систему с ограничением на размер контекста через liveness анализ
источник

AG

Alex Gryzlov in Compiler Development
операции над регистрами - структурные правила
источник

PS

Peter Sovietov in Compiler Development
Alex Gryzlov
трансформация в окололинейную систему с ограничением на размер контекста через liveness анализ
Но, похоже, это и на самом деле просто другая формулировка известного подхода. Извлекаем факты из кода, а затем решатель за нас решает систему ограничений.
источник

AG

Alex Gryzlov in Compiler Development
я думаю, здесь ситуация сходная с bidirectional тайпчекером
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
Но, похоже, это и на самом деле просто другая формулировка известного подхода. Извлекаем факты из кода, а затем решатель за нас решает систему ограничений.
Ну... Это уж слишком абстратно. Любой алгоритм так можно описать :)
источник

AG

Alex Gryzlov in Compiler Development
главное правильно закодировать инварианты структур, а алгоритм тривиально отсюда выпадает как трансформация между ними :)
источник

МБ

Михаил Бахтерев in Compiler Development
А что? Не посеминарить ли нам эту статью?
источник

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
Ну... Это уж слишком абстратно. Любой алгоритм так можно описать :)
Ну хорошо, вот Вам конкретика. Обходим программу, получаем множество переменных — live ranges. Далее строим формулу для SMT-решателя в духе r1 != r2, r2 != r3... Так более конкретно? Понятно ли, что можно раскрасить граф таким образом? ;)
источник

AG

Alex Gryzlov in Compiler Development
там не смт, они дают специализированный алгоритм унификации для этой системы
источник

PS

Peter Sovietov in Compiler Development
Alex Gryzlov
там не смт, они дают специализированный алгоритм унификации для этой системы
Для практика тут разница в том, в первую очередь, что совсем непонятна вычислительная сложность "специализированного алгоритма".
источник

AG

Alex Gryzlov in Compiler Development
за практику я не спорю, моя гипотеза касается базы ;)
источник

PS

Peter Sovietov in Compiler Development
Ok :)
источник