Size: a a a

Compiler Development

2020 January 05

PS

Peter Sovietov in Compiler Development
Ой. https://github.com/innopolis-jolie-smt-typechecker/jolie/blob/master/jolie/src/jolie/typeChecker/TypeCheckerWriter.java

А разве в Java нет прямой поддержки Z3 с построением выражений?
источник

AT

Alexander Tchitchigin in Compiler Development
Есть. Но дампить SMTLIB формулы удобно для дебага.
источник

AT

Alexander Tchitchigin in Compiler Development
Плюс, технически, нет строгой привязки к Z3. 😊
источник

PS

Peter Sovietov in Compiler Development
Alexander Tchitchigin
Плюс, технически, нет строгой привязки к Z3. 😊
Тогда нужен доп. слой абстракции. Чтобы потом легко переключиться на какой-нибудь Picat или MiniZinc :)

А дамп в виде S-выражения можно сделать и в обычном варианте работы с Z3.
источник

AT

Alexander Tchitchigin in Compiler Development
Раз уж пошло обсуждение этого проекта, хочу сразу предупредить, что студенты учили что такое "паттерн визитор" и как работать с AST прямо по ходу проекта. Что заметно, так что не надо пинать ногами, пожалуйста. 😊
источник

AT

Alexander Tchitchigin in Compiler Development
Peter Sovietov
Тогда нужен доп. слой абстракции. Чтобы потом легко переключиться на какой-нибудь Picat или MiniZinc :)

А дамп в виде S-выражения можно сделать и в обычном варианте работы с Z3.
У PiCat и MiniZinc совсем другая логика работы, поэтому легко переключиться заведомо не получится.
источник

AT

Alexander Tchitchigin in Compiler Development
Кроме того, была надежда со временем от "обычной" проверки типов перейти к Refinement Types, не слезая с Z3.
источник

PS

Peter Sovietov in Compiler Development
По идее, от высокоуровневой логики и имеет смысл отталкиваться. На мой взгляд, ключевая вещь здесь — программирование в ограничениях. То есть ограничения + решатель. А Z3 это просто один из вариантов реализации.
источник

AT

Alexander Tchitchigin in Compiler Development
Peter Sovietov
По идее, от высокоуровневой логики и имеет смысл отталкиваться. На мой взгляд, ключевая вещь здесь — программирование в ограничениях. То есть ограничения + решатель. А Z3 это просто один из вариантов реализации.
В теории - да, но на практике вообще систему приходится подгонять под особенности конкретного решателя чтобы шевелилось с достаточной скоростью. Т.е. нельзя даже просто так перепрыгнуть с Z3 на CVC4.

А retargetable type-checker back-end - вообще отдельный исследовательский проект с очень сомнительной практической пользой. По причинам, изложенным выше.
источник

PS

Peter Sovietov in Compiler Development
Alexander Tchitchigin
В теории - да, но на практике вообще систему приходится подгонять под особенности конкретного решателя чтобы шевелилось с достаточной скоростью. Т.е. нельзя даже просто так перепрыгнуть с Z3 на CVC4.

А retargetable type-checker back-end - вообще отдельный исследовательский проект с очень сомнительной практической пользой. По причинам, изложенным выше.
Так ведь существующие языки программирования в ограничениях именно на таких принципах и построены: высокоуровневый язык спецификации задачи в ограничениях и задний план с поддержкой множества решателей. И это реально работает даже в более сложных задачах, чем данный вывод типов :)
источник

AT

Alexander Tchitchigin in Compiler Development
Peter Sovietov
Так ведь существующие языки программирования в ограничениях именно на таких принципах и построены: высокоуровневый язык спецификации задачи в ограничениях и задний план с поддержкой множества решателей. И это реально работает даже в более сложных задачах, чем данный вывод типов :)
Это какие языки программирования в ограничениях так построены? А то я ни одного такого не встречал. 😊
источник

PS

Peter Sovietov in Compiler Development
Alexander Tchitchigin
Это какие языки программирования в ограничениях так построены? А то я ни одного такого не встречал. 😊
источник

AT

Alexander Tchitchigin in Compiler Development
А, в этом плане. 😊
Тогда ещё Alloy можно вспомнить. При этом и тот, и другой с разными бэкендами ведут себя по-разному. Как минимум, разная производительность на одной и той же задаче.
Что только подтверждает мой тезис - на практике приходится затачиваться на особенности конкретного решателя или бэкенда.
источник

PS

Peter Sovietov in Compiler Development
Alexander Tchitchigin
А, в этом плане. 😊
Тогда ещё Alloy можно вспомнить. При этом и тот, и другой с разными бэкендами ведут себя по-разному. Как минимум, разная производительность на одной и той же задаче.
Что только подтверждает мой тезис - на практике приходится затачиваться на особенности конкретного решателя или бэкенда.
Конечно, но сам по себе подход от ограничений и соотв. DSL — очень плодотворный.
В этом случае задача статического анализа представляет собой (1) порождение набора ограничений в результате обхода анализируемой программы. Этот набор — наша DSL-программа. А дальше (2) в дело вступают различные решатели, использование которых зависит от существа задачи: алгоритм для системы непересекающихся множеств (унификация), алгоритм достижения неподвижной точки (потоковый анализ), SMT-решатели и проч.
источник

AT

Alexander Tchitchigin in Compiler Development
Peter Sovietov
Конечно, но сам по себе подход от ограничений и соотв. DSL — очень плодотворный.
В этом случае задача статического анализа представляет собой (1) порождение набора ограничений в результате обхода анализируемой программы. Этот набор — наша DSL-программа. А дальше (2) в дело вступают различные решатели, использование которых зависит от существа задачи: алгоритм для системы непересекающихся множеств (унификация), алгоритм достижения неподвижной точки (потоковый анализ), SMT-решатели и проч.
Нет, с этим-то я полностью согласен и всецело поддерживаю! 😄
источник

EM

Evgenii Moiseenko in Compiler Development
Alexander Tchitchigin
А, в этом плане. 😊
Тогда ещё Alloy можно вспомнить. При этом и тот, и другой с разными бэкендами ведут себя по-разному. Как минимум, разная производительность на одной и той же задаче.
Что только подтверждает мой тезис - на практике приходится затачиваться на особенности конкретного решателя или бэкенда.
Why3 туда же
http://why3.lri.fr/
источник

AG

Alex Gryzlov in Compiler Development
Kir
SMT ещё к выведению типов никто не прикручивал?
источник

AG

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

FO

FORTRAN ONE LOVE in Compiler Development
Andrei Kurosh
Вот да, было ощущение что идея классная, но современные подходы/железо не позволяют это делать за вменяемое время
Я готов потерпеть час на оптимизацию, если это ускорит приложение на 2%
источник

M

MaxGraey in Compiler Development
FORTRAN ONE LOVE
Я готов потерпеть час на оптимизацию, если это ускорит приложение на 2%
2% это на уровне измерительной погрешности)
источник