Soufflé (programming language)
Parallel logic programming language From Wikipedia, the free encyclopedia
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.[2][3][4]
Paradigms | Declarative, Logic programming |
---|---|
Family | Datalog |
Stable release | 2.3[1]
|
Typing discipline | Static |
License | UPL |
Filename extensions | .dl |
Website | souffle-lang |
Influenced by | |
Datalog |
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 edge
relation.
.decl edge(x:number, y:number)
.input edge
.decl path(x:number, y:number)
.output path
path(x, y) :- edge(x, y).
path(x, y) :- path(x, z), edge(z, y).
Features
- An interpreter[5] and a compiler[6] that targets parallel C++ (C++ that uses OpenMP). Both the interpreter and compiler use semi-naïve evaluation.[7]
- Stratified negation[8]
- Aggregation[9]
- Automatic index selection[10]
- Specialized parallel data structures,[11] including disjoint-sets,[12] B-trees,[13] and tries.[14]
- Static typing[15]
- Records and algebraic data types[16]
- A foreign function interface[17]
Related tools
In addition to a compiler and an interpreter, the Soufflé project also publishes:
- a profiler,
- a "provenance"-based debugger,[18]
- an "auto-scheduler" (also called a "join optimizer") that chooses efficient query plans based on a profile, as in profile-guided optimization.[19]
Applications
Soufflé has been used to build static analyzers, including:
- A pointer analysis for Java[20]
- A control-flow analysis for Scheme[21]
- Various analyses for smart contract languages[22]
It has also been used to build tools for binary analysis, including reverse engineering,[23] and disassemblers.[24]
References
External links
Wikiwand - on
Seamless Wikipedia browsing. On steroids.