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 (directed) paths between any two nodes. This is also known as the transitive closure of the  relation.

Features

 * An interpreter and a compiler that targets parallel C++ (C++ that uses OpenMP). 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" (also called a "join optimizer") 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

It has also been used to build tools for binary analysis, including reverse engineering, and disassemblers.