
Sturdy - это библиотека для создания звуковых статических анализов в Хаскелле. Статический анализ - это инструменты, которые дают информацию о компьютерных программах без фактического запуска программы. Примерами статического анализа являются проверки типов, искатели ошибок (например, Java FindBugs), анализ безопасности (например, анализ DAING) и анализы, которые используются для оптимизации компиляторов.
Этот проект фокусируется на звуковом статическом анализе. Статический анализ является обоснованным, если результаты анализа отражают фактическое поведение программы во время выполнения, и пользователи могут полагаться на результаты. Например, если статический анализ, используемый для оптимизации компилятора, был невыразительным, оптимизация может изменить семантику программы, что приводит к неожиданному поведению во время выполнения. С этой целью протри следует теории доказательств композиционной звукости абстрактных интерпретаторов и звуковых и повторно используемых компонентов для абстрактной интерпретации, чтобы упростить доказательства звукости статического анализа.

Прочный фактор факторирует конкретный интерпретатор и абстрактный интерпретатор (статический анализ) в общего интерпретатора . Этот общий интерпретатор параметризован интерфейсами, которые содержат примитивные операции, которые описывают семантику языка, такие как try , catch и, finally на исключения. Затем конкретный и абстрактный интерпретатор создает общий интерпретатор, реализуя эти интерфейсы. Эта реорганизация не только разворачивает разные проблемы при реализации статического анализа, но и упрощает ее проверку звука. Более подробную информацию можно найти в нашей статье ICFP.
Прочный позволяет модульно построить статический анализ из компонентов многократного анализа. Каждый компонент анализа инкапсулирует одну проблему анализа и может быть доказан, звучит независимо от анализа, где он используется. Кроме того, теория компонентов анализа гарантирует, что статический анализ является звуковым, если все его аналитические компоненты являются обоснованными. Это означает, что разработчикам анализа не нужно беспокоиться о надежности, если они повторно используют компоненты анализа звука. Более подробную информацию можно найти в нашей бумаге OOPSLA.
Чтобы построить, установите инструмент сборки стека и запустите stack build из корневого каталога проекта.
Прочный проект в настоящее время содержит конкретные, абстрактные и общие переводчики для следующих языков:
Чтобы запустить тесты конкретного языка использовать stack test sturdy-$(lang) , например,
stack test sturdy-pcf
Алгоритмы FixPoint на основе комбинатора для абстрактных интерпретаторов с большим шагом
Свен Кейдел, Себастьян Эрдвег, Тобиас Хомбюхер
Международная конференция по функциональному программированию (ICFP). ACM, 2023. [PDF]
Модульные абстрактные переводчики определения для webassembly
Катарина Брандл, Себастьян Эрдвег, Свен Кейдель, Нильс Хансен
Европейская конференция по объектно-ориентированному программированию (ECOOP). ACM, 2023. [PDF]
Систематический подход к абстрактной интерпретации программных преобразований
Свен Кейдель и Себастьян Эрдвег.
Проверка, проверка модели и абстрактная интерпретация (VMCAI). Springer, 2020. [PDF]
Звуковые и многоразовые компоненты для абстрактной интерпретации
Свен Кейдель и Себастьян Эрдвег.
Объектно-ориентированное программирование, системы, языки и приложения (OOPSLA). ACM, 2019 [PDF] [Talk]
Композиционные доказательства обоснованности абстрактных переводчиков
Свен Кейдель, Каспер Бах Поулсен и Себастьян Эрдвег.
Международная конференция по функциональному программированию (ICFP). ACM, 2018 [PDF] [Talk]
Прочный проект является совместным усилием следующих людей (в алфавитном порядке):
Casper Bach Poulsen, Jente Hidskes, Matthijs Bijman, Sarah Müller, Sebastian Erdweg, Sven Keidel, Tobias Hombücher, Wouter Raateland