2 ms·
Take a look at the Souffle Datalog compiler: https://souffle-lang.github.io/ https://souffle-lang.github.io/ Some benchmarks here showing it beating a lot of
by chubot 7y ago
Take a look at the Souffle Datalog compiler:
https://souffle-lang.github.io/ https://souffle-lang.github.io/
Some benchmarks here showing it beating a lot of other engines:
https://souffle-lang.github.io/pdf/cc.pdf https://souffle-lang.github.io/pdf/cc.pdf (this paper also cites LogixBlox)
They translate datalog into a straightforward relational bytecode, then use Futamura projections to compile that bytecode into a template-heavy "monolithic" C++ program.
As far as I remember one of use of C++ templates is to specialize for different sizes of tuples, so fast assembly is generated for particular queries/facts. They are doing at least 3 nontrivial transformations, and the last step really leverages C++.
The generated C++ is also multi-threaded, which is a big win.
I watched a talk on Rust where Niko M said he prototyped the new borrow checker with Souffle I believe. It's somewhere on YouTube.