All Projects → svenkeidel → sturdy

svenkeidel / sturdy

Licence: BSD-3-Clause license
Sturdy is a library for developing sound static analyses in Haskell.

Programming Languages

pascal
1382 projects
haskell
3896 projects
java
68154 projects - #9 most used programming language
scheme
763 projects
typescript
32286 projects
HTML
75241 projects

Projects that are alternatives of or similar to sturdy

snap
Snap Programming Language
Stars: ✭ 20 (-59.18%)
Mutual labels:  interpreter, static-analysis
OCCAM
OCCAM: Object Culling and Concretization for Assurance Maximization
Stars: ✭ 20 (-59.18%)
Mutual labels:  static-analysis, abstract-interpretation
Lyra
No description or website provided.
Stars: ✭ 23 (-53.06%)
Mutual labels:  static-analysis, abstract-interpretation
SixtyPical
A 6502-oriented low-level programming language supporting advanced static analysis
Stars: ✭ 25 (-48.98%)
Mutual labels:  static-analysis, abstract-interpretation
progge.rs
Program analysis playground for a simple, imperative language
Stars: ✭ 29 (-40.82%)
Mutual labels:  static-analysis, abstract-interpretation
monadic-cfa
Generic implementation of different CFA families based on monadic decomposition
Stars: ✭ 16 (-67.35%)
Mutual labels:  static-analysis, abstract-interpretation
clam
Static Analyzer for LLVM bitcode based on Abstract Interpretation
Stars: ✭ 180 (+267.35%)
Mutual labels:  static-analysis, abstract-interpretation
Pyre Check
Performant type-checking for python.
Stars: ✭ 5,716 (+11565.31%)
Mutual labels:  static-analysis, abstract-interpretation
Rascal
The implementation of the Rascal meta-programming language (including interpreter, type checker, parser generator, compiler and JVM based run-time system)
Stars: ✭ 284 (+479.59%)
Mutual labels:  interpreter, static-analysis
Gobasic
A BASIC interpreter written in golang.
Stars: ✭ 253 (+416.33%)
Mutual labels:  interpreter
lint-checks
A set of opinionated and useful lint checks
Stars: ✭ 61 (+24.49%)
Mutual labels:  static-analysis
Hackide
hackIDE is an online code editor, compiler and interpreter based on Django, powered by HackerEarth API! Go, hack it!
Stars: ✭ 242 (+393.88%)
Mutual labels:  interpreter
Xstate
State machines and statecharts for the modern web.
Stars: ✭ 18,300 (+37246.94%)
Mutual labels:  interpreter
phpstan-extensions
Extensions for PHPStan
Stars: ✭ 61 (+24.49%)
Mutual labels:  static-analysis
Go Pry
An interactive REPL for Go that allows you to drop into your code at any point.
Stars: ✭ 2,747 (+5506.12%)
Mutual labels:  interpreter
wasm
A fast Pascal (Delphi) WebAssembly interpreter
Stars: ✭ 40 (-18.37%)
Mutual labels:  interpreter
Openj9
Eclipse OpenJ9: A Java Virtual Machine for OpenJDK that's optimized for small footprint, fast start-up, and high throughput. Builds on Eclipse OMR (https://github.com/eclipse/omr) and combines with the Extensions for OpenJDK for OpenJ9 repo.
Stars: ✭ 2,802 (+5618.37%)
Mutual labels:  interpreter
Mond
A scripting language for .NET Core
Stars: ✭ 237 (+383.67%)
Mutual labels:  interpreter
LLVM-JVM
[W.I.P] A Just-In-Time Java Virtual Machine written in Haskell
Stars: ✭ 22 (-55.1%)
Mutual labels:  interpreter
SPDS
Efficient and Precise Pointer-Tracking Data-Flow Framework
Stars: ✭ 38 (-22.45%)
Mutual labels:  static-analysis

Sturdy build-status

Sturdy Logo

Sturdy is a library to create sound static analyses in Haskell. Static analyses are tools that produce information about computer programs without actually running the program. Examples of static analyses are type checkers, bug finders (e.g. Java FindBugs), analyses for security (e.g. taint analyses), and analyses that are used for compiler optimizations.

This project focuses on sound static analyses. A static analysis is sound if the results of the analysis reflect the actual runtime behavior of the program and users can rely on the results. For example, if a static analysis used for compiler optimizations were unsound, the optimization might change the semantics of the program, which leads to unexpected behavior at runtime. To this end, Sturdy follows the theory of Compositional Soundness Proofs of Abstract Interpreters and Sound and Reusable Components for Abstract Interpretation to simplify soundness proofs of static analyses.

Sturdy Overview

Sturdy factorizes the concrete interpreter and abstract interpreter (the static analysis) into a generic interpreter. This generic interpreter is parameterized by interfaces that contain primitive operations that describe the semantics of the language, such as try, catch and finally for exceptions. The concrete and abstract interpreter then instantiate the generic interpreter by implementing these interfaces. This reorganization not only decouples different concerns in the implementation of the static analysis, but also simplifies its soundness proof. More details can be found in our ICFP paper.

Sturdy allows to construct static analyses modularly from reusable analysis components. Each analysis component encapsulates a single analysis concern and can be proven sound independently from the analysis where it is used. Furthermore, the theory of analysis components guarantees that a static analysis is sound, if all its analysis components are sound. This means that analysis developers do not have to worry about soundness as long as they reuse sound analysis components. More details can be found in our OOPSLA paper.

Getting Started

To build, install the Stack build tool and run stack build from the root directory of the project.

The sturdy project currently contains concrete and abstract and generic interpreters for the following languages:

  • PCF, a higher-order functional language
  • While, an imperative language with conditionals and while loops
  • Scheme, a functional language language in the LISP family.
  • Stratego, a language for program transformations
  • LambdaJS, an intermediate representation for JavaScript
  • Jimple, a Java Bytecode suitable for static analysis (work in progress)

To run the tests of a particular language use stack test sturdy-$(lang), e.g.,

stack test sturdy-pcf

Publications

A Systematic Approach to Abstract Interpretation of Program Transformations
Sven Keidel and Sebastian Erdweg.
Verification, Model Checking, and Abstract Interpretation (VMCAI). Springer, 2020. [pdf]

Sound and Reusable Components for Abstract Interpretation
Sven Keidel and Sebastian Erdweg.
Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA). ACM, 2019 [pdf] [Talk]

Compositional Soundness Proofs of Abstract Interpreters
Sven Keidel, Casper Bach Poulsen and Sebastian Erdweg.
International Conference on Functional Programming (ICFP). ACM, 2018 [pdf] [Talk]

Acknowledgments

The Sturdy project is a joint effort of the following people (in alphabetical order):

Casper Bach Poulsen, Jente Hidskes, Matthijs Bijman, Sarah Müller, Sebastian Erdweg, Sven Keidel, Tobias Hombücher, Wouter Raateland

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].