Declarative Static Program Analysis with the Doop Framework
We discuss the benefits of using logic-based declarative languages as a means to specify static program analysis algorithms. The main focus will be on the Doop framework for pointer analysis of Java programs. Doop encodes multiple analysis algorithms for Java declaratively, using Datalog: a logic-based language for defining (recursive) relations. The algorithms are elegantly specified and easy to understand and adapt.
With an aggressive optimization methodology, Doop also achieves very high performance--often an order of magnitude faster than comparable frameworks. With the help of Doop's concise algorithm representation we have explored several new analysis algorithms and developed important insights on existing algorithm variations.