Soufflé is a variant of Datalog for tool designers crafting analyses
in Horn clauses.

Soufflé synthesizes a native parallel C++ program from a logic
specification. The Soufflé language is similar to Datalog (but has
terms known as records), and is frequently used as a domain-specific
language for analysis problems.

Features of Soufflé Efficient translation to parallel C++ of Datalog
programs (CAV'16, CC'16)

Efficient interpretation using de-specialization techniques (PLDI'21)

Specialized data structure for relations (PACT'19, PPoPP'19, PMAM'19)
with optimal index selection (VLDB'18)

Extended semantics of Datalog, e.g., permitting unbounded recursions
with numbers and terms

Simple component model for Datalog specifications

Recursively defined record types/ADTs (aka. constructors) for tuples

User-defined functors

Strongly-typed types for safety

Subsumption

Aggregation

Choice Construct (APLAS'21)

Extended I/O system for relations (including SQLITE3 interfaces)

C++/SWIG interfaces

Provenance/Debugging (TOPLAS'20)

Profiling tools
