Soufflé is a logic programming language inspired by Datalog. It overcomes some of the limitations in classical Datalog. For example, programmers are not restricted to finite domains, and the usage of functors (intrinsic, user-defined, records/constructors, etc.) are permitted. Soufflé has a component model so that large logic projects can be expressed. Initially, Soufflé has been designed for crafting static analysis in logic at Oracle Labs. Recently, there are many other applications written in the Soufflé language, including applications in network analysis and data analytics.
Soufflé provides the ability to rapid prototype and make deep design space explorations possible. A wide range of applications have been implemented in the Soufflé language, e.g., static program analysis for Java DOOP, parallelizing compiler framework Insieme, binary disassembler DDISASM, security analysis for cloud computing, and security analysis for smart contracts Gigahorse, Securify, Secuify V2.0, VANDAL. More applications are listed here.
Soufflé language project is led by Bernhard Scholz, and commenced at Oracle Labs in Brisbane. Soufflé was open-sourced in March 2016. It is actively supported by universities and industrial research labs. The main contributors to this project have been The University of Sydney, the University of Innsbruck, the University College London, the University of Athens, Oracle Labs, Brisbane.
One of the major challenges in logic programming is scalability. Soufflé applies advanced compilation techniques for logic programs. We use a range of techniques to achieve high-performance: Futamura Projections, staged-compilation with a new abstract machine, partial evaluation, and parallelization with highly-parallel data-structures.
Soufflé has been designed such that,
declarative rules are efficiently translated to efficient C++ programs on modern computer hardware, including multi-core computers, and
the domain specific language extensions of Soufflé support the tool designer to structure projects effectively and give sufficient expressiveness to the users
Why the name Soufflé?
Soufflé is short for Systematic, Ontological, Undiscovered Fact Finding Logic Engine. The EDB represents the uncooked Soufflé and the IDB causes the Soufflé to rise, i.e., monotonically increasing knowledge. When it stops rising and a fixed-point is reached, the result is a puffed-up ready-to-eat Soufflé. Big thanks to Nicholas Allen and Diane Corney from Oracle Labs/Brisbane for finding a translation.
If there are errors, and/or explanations in the documentation can be improved, please let us know.
You can either click on the
Edit me button at the top of the relevant page, and trigger a pull request for your improved documentation, or please file an issue.