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.) is permitted. Soufflé has a component model so that large logic projects can be expressed. Soufflé was initially designed for crafting static analysis in logic at Oracle Labs. Since then, there have been many other applications written in the Soufflé language, including applications in reverse engineering, 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 Prof 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, and many more.
One of the major challenges in logic programming is performance and 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.
Improving Documentation
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.