https://github.com/souffle-lang/souffle
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.
https://github.com/souffle-lang/souffle
datalog logic-programming souffle static-code-analysis translator
Last synced: 6 months ago
JSON representation
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.
- Host: GitHub
- URL: https://github.com/souffle-lang/souffle
- Owner: souffle-lang
- License: upl-1.0
- Created: 2016-03-12T03:39:22.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2024-04-05T06:25:37.000Z (over 1 year ago)
- Last Synced: 2024-04-16T05:05:59.914Z (over 1 year ago)
- Topics: datalog, logic-programming, souffle, static-code-analysis, translator
- Language: C++
- Homepage: http://souffle-lang.github.io/
- Size: 516 MB
- Stars: 857
- Watchers: 45
- Forks: 191
- Open Issues: 127
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Welcome!
This is the official repository for the [Soufflé](https://souffle-lang.github.io) language project.
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.[](https://github.com/souffle-lang/souffle/blob/master/LICENSE)
[](https://github.com/souffle-lang/souffle/actions/workflows/CI-Tests.yml)
[](https://github.com/souffle-lang/souffle/actions/workflows/VS-CI-Tests.yml)
[](https://codecov.io/gh/souffle-lang/souffle)## 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
## How to get Soufflé
If you are using Ubuntu, Fedora or Oracle Linux, get a packaged version from the [Releases section](https://github.com/souffle-lang/souffle/releases).
Or use `git` to obtain the source code of Soufflé.
$ git clone https://github.com/souffle-lang/souffle.git
Build instructions can be found [here](https://souffle-lang.github.io/build).
## Legacy code
If you have written code for an older version of Souffle, please use the command line flag `--legacy`.
Alternatively, please add the following line to the start of your source-code:```
.pragma "legacy"
```## Issues and Discussions
Use either the [issue list](https://github.com/souffle-lang/souffle/issues) for
- bug reporting
- enhancements
- documentation
- proposals
- releases
- compatibility issues
- refactoring.
or use the [discussions](https://github.com/souffle-lang/souffle/discussions) bulletin board to engage with other community members and for asking questions you’re wondering about.
## How to contribute
Issues and bug reports for Souffle are found in the [issue list](https://github.com/souffle-lang/souffle/issues).
This list is also where new contributors may find extensions / bug fixes to work on.To contribute in this repo, please open a pull request from your fork of this repository.
The general workflow is as follows.1. Find an issue in the issue list.
2. Fork the [souffle-lang/souffle](http://github.com/souffle-lang/souffle.git) repo.
3. Push your changes to a branch in your forked repo.
4. Submit a pull request to souffle-lang/souffle from your forked repo.
Our continuous integration framework enforces coding guidelines with the help of clang-format and clang-tidy.
For more information on building and developing Souffle, please read the [developer tutorial](https://souffle-lang.github.io/development).
## [Home Page](https://souffle-lang.github.io)
## [Documentation](https://souffle-lang.github.io/docs.html)
## [Contributors](https://souffle-lang.github.io/contributors)
## [Issues](https://github.com/souffle-lang/souffle/issues)
## [License](https://github.com/souffle-lang/souffle/blob/master/licenses/SOUFFLE-UPL.txt)
## For academics
If you use our work, please cite our work. A list of publications can be found [here](https://souffle-lang.github.io/publications). The main publications are:
* Herbert Jordan, Bernhard Scholz, Pavle Subotić: Souffle: On Synthesis of Program Analyzers. CAV 2016.
* Bernhard Scholz, Herbert Jordan, Pavle Subotić, Till Westmann: On fast large-scale program analysis in Datalog. CC 2016: 196-206