
Sturdy是在Haskell中创建声音静态分析的库。静态分析是在没有实际运行程序的情况下生成有关计算机程序的信息的工具。静态分析的示例是类型的检查器,错误查找器(例如Java Findbugs),安全性分析(例如污染分析)以及用于编译器优化的分析。
该项目着重于声音静态分析。如果分析的结果反映了程序的实际运行时行为,并且用户可以依靠结果,则静态分析是有声音的。例如,如果用于编译器优化的静态分析不符合,则优化可能会改变程序的语义,从而导致运行时出乎意料的行为。为此,坚固的遵循抽象解释者的组成声音证明和可重复使用的组成部分的组成理论,以简化静态分析的声音证明。

坚固将具体的解释器和抽象解释器(静态分析)分配到通用解释器中。该通用解释器是由包含描述语言语义的原始操作的接口进行了参数化的,例如try , catch , finally是例外。然后,混凝土和抽象的解释器通过实现这些界面来实例化通用解释器。这种重组不仅消除了静态分析实施时的不同关注点,而且简化了其健全性的证明。更多详细信息可以在我们的ICFP论文中找到。
坚固的允许从可重复使用的分析组件模块化构建静态分析。每个分析组件都封装了单个分析问题,并且可以独立于使用的分析来证明声音。此外,分析理论组成部分可以确保静态分析是正确的,如果其所有分析组件都是合理的,则可以确保静态分析。这意味着分析开发人员只要重复使用声音分析组件,就不必担心声音。更多细节可以在我们的OOPSLA纸中找到。
要构建,请安装堆栈构建工具,并从项目的根目录中运行stack build 。
该坚固的项目目前包含以下语言的具体,抽象和通用口译员:
要运行特定语言stack test sturdy-$(lang)测试
stack test sturdy-pcf
基于组合的fixpoint算法,用于大步抽象解释器
Sven Keidel,Sebastian Erdweg,TobiasHombücher
国际功能编程会议(ICFP)。 ACM,2023。[PDF]
WebAssembly的模块化抽象定义解释器
Katharina Brandl,Sebastian Erdweg,Sven Keidel,Nils Hansen
欧洲面向对象编程会议(ECOP)。 ACM,2023。[PDF]
一种系统的方法来抽象对程序转换的解释
Sven Keidel和Sebastian Erdweg。
验证,模型检查和抽象解释(VMCAI)。施普林格,2020年。[PDF]
抽象解释的声音和可重复使用的组件
Sven Keidel和Sebastian Erdweg。
面向对象的编程,系统,语言和应用程序(OOPSLA)。 ACM,2019 [PDF] [谈话]
抽象口译员的组成声音证明
Sven Keidel,Casper Bach Poulsen和Sebastian Erdweg。
国际功能编程会议(ICFP)。 ACM,2018 [PDF] [谈话]
坚固的项目是以下人员的共同努力(按字母顺序排列):
Casper Bach Poulsen,Jente Hidskes,Matthijs Bijman,SarahMüller,Sebastian Erdweg,Sven Keidel,TobiasHombücher,Wouter Raateland