Soufflé (programming language)
Soufflé is an open source parallel logic programming language, influenced by Datalog. Soufflé includes both an interpreter and a compiler that targets parallel C++. Soufflé has been used to build static analyzers, disassemblers, and tools for binary reverse engineering. Soufflé is considered by academic researchers to be high-performance and "state of the art," and is often used in benchmarks in academic papers.
Programming examples
Given a set of edges in a graph, the following program computes the set of paths between any two nodes. This is also known as the transitive closure of theedge relation..decl edge
.input edge
.decl path
.output path
path :- edge.
path :- path, edge.
Features
- An interpreter and a compiler that targets parallel C++. Both the interpreter and compiler use semi-naïve evaluation.
- Stratified negation
- Aggregation
- Automatic index selection
- Specialized parallel data structures, including disjoint-sets, B-trees, and tries.
- Static typing
- Records and algebraic data types
- A foreign function interface
Related tools
In addition to a compiler and an interpreter, the Soufflé project also publishes:- a profiler,
- a "provenance"-based debugger,
- an "auto-scheduler" that chooses efficient query plans based on a profile, as in profile-guided optimization.
Applications
Soufflé has been used to build static analyzers, including:- A pointer analysis for Java
- A control-flow analysis for Scheme
- Various analyses for smart contract languages