Can someone give some examples? I have read papers from the Athens University using datalog and pointer analysis. Has this become a major direction ?
Can someone give some examples? I have read papers from the Athens University using datalog and pointer analysis. Has this become a major direction ?
This is Semmle's business model (https://semmle.com/). They have a custom Datalog with OO features they call QL.
I've heard LogicBlox used to do program analysis as well, but AIUI they turned more towards business analytics and then got bought out, and the Datalog engine team all jumped ship.
The Rust compiler has been exploring implementing some of their type system (the borrow checker, I think?) in a Datalog.
On the academic front, Tamás Szabó and Sebastian Erdweg have been working on an incremental Datalog engine for static analysis; https://github.com/szabta89/IncA. I know Tamas has worked for Itemis, but I don't know whether they're using this tech.
I'm working on a functional language, Datafun, inspired by Datalog, but it's too much of a toy to do any real analysis with at the moment. All in all, Datalog is still a niche language and static analysis a niche application of it, but it seems to be on the rise.
(caveat: I am involved in many things)
1. You can implement some minor flavor of Doop in differential dataflow (https://github.com/TimelyDataflow/differential-dataflow/tree...). The fragment came from Yannis which he described as a minimal non-trivial analysis (vs other, even smaller fragments), but it still uses some 900 dataflow operators (updates in 10s of ms when inputs change, though). The DD impl isn't meant to be understood, I'm afraid.
2. Many ex-LB folks are now at relational.ai doing .. advanced weird tech like they did with LB. I'd watch them (I do).
3. Polonius (https://github.com/rust-lang/polonius) defines the Rust borrow checker as Datalog rules, and went from differential dataflow to datafrog (https://github.com/rust-lang/datafrog).
4. If you want to check out other incremental Datalog environments, in addition to IncA, there are
https://github.com/comnik/declarative-dataflow
https://github.com/ryzhyk/differential-datalog
https://github.com/TimelyDataflow/differential-dataflow
Good times for Datalog, imo.
DOOP actually used LogicBlox before Souffle existed, but it is difficult to be competitive when Souffle doesn't need things like transactions, ACID, datasets larger than memory, incremental evaluation, etc.
(Performance is another matter -- one has to pay careful attention to clause ordering, and watch out for O(n^2) / O(n^3) / ... loop nests, but at least it's easier to try options than refactoring an ad-hoc analysis engine.)