LAPD: Language-Agnostic Program Database
Meta-programming environments and language workbenches provide support for analysis, creation and usage of a multitude of languages. Internal artifacts of these environments are based on source code information and include items such as parse trees and error messages. If these artifacts or parts of them are to be reused it can prove useful to store them persistently. By having this information in persistent storage the computational steps in order to produce the information can be omitted, improving performance of retrieving wanted information. Program databases can be used to accomplish the goals of persistent storage but are generally suited for a specific language. We propose a language-agnostic program database, LAPD, for providing persistent storage support in meta-programming environments. LAPD is based on the type system of the meta-programming environment Rascal, ensuring its language-agnosticism. The graph database Neo4j is used as a backend for an LAPD implementation. We found that LAPD performs well in querying scenarios, but that it suers in large write and read operations. We conclude that language-agnostic program databases are a viable option in scenarios where persistent storage, but most of all querying of information about projects made in many dierent programming languages is required, where languagespecific databases are not readily available. The LAPD implementation shows that such a language-agnostic program database can be based on and integrated with the type system of a meta-programming language such as Rascal.