Deep Integration of Domain-Specific Languages
Final Report Abstract
Raising the level of abstraction in computer programming has been the key topic for driving progress in programming technology for many decades: Formulating a program in terms of the physical details of the underlying hardware makes programs brittle and repetitious and hinders the standard “- ilities” of software engineering (reusability, maintainability, readability etc.). Rather, programs should be expressed in terms of the concepts and notions in the domain they operate in. Domain-specific languages and libraries are a common way to get as close as possible to this ideal. This means that the programming concepts that are used to solve problems in a domain consist of the vocabulary that is common and well-defined within that domain. This project has advanced the state of the art in the research domain of domain-specific languages. A domain-specific language doesn’t arise out of thin air, though. The process to develop and implement a domain-specific language must also be modular, efficient and extensible. It should also be supported by domainspecific languages, where the domain in question is the definition of other domain-specific languages. Such language technologies on the meta-level have been the main focus of this project. We have implemented a set of technologies for developing domain-specific languages in an efficient and extensible way. We have designed an extension of Java, called SugarJ, that extends Java with a mechanism for defining syntactic domain-specific extensions in a modular way, in such a way that every source file can choose to use its own set of language extensions. We have also designed several technologies for more efficient embedding of domain-specific languages. “Embedding” means that the language is not devised as a stand-alone language, but it becomes a library for a generalpurpose language that can be used in a similar way as stand-alone language, but with better composability with the general-purpose language and its infrastructure (such as IDEs) and other embedded domain-specific languages. We have designed languages and type systems that improve the modularity and maintainability of embedded domain-specific languages. The results of this project were published in high-profile publication venues of this domain, such as the ACM International Conference on Functional Programming (ICFP), the ACM Conference on Object-Oriented Languages, Systems, and Applications (OOPSLA), and the ACM Conference on Principles of Programming Languages (POPL).
Publications
- Evolution of software systems with extensible languages and dsls. IEEE Software, 31(5):68–75, 2014
Sebastian Erdweg, Stefan Fehrenbach, and Klaus Ostermann
(See online at https://doi.org/10.1109/MS.2014.99) - From object algebras to attribute grammars. In Proceedings of the 2014 ACM International Conference on Object Oriented Programming Systems, Languages, Applications (OOP-SLA), pages 377–395. ACM Press, 2014
Tillmann Rendel, Jonathan Brachthäuser, and Klaus Ostermann
(See online at https://doi.org/10.1145/2714064.2660237) - Automatic refunctionalization to a language with copattern matching: With applications to the expression problem. In Proceedings of International Conference on Functional Programming, pages 269–279. ACM, 2015
Tillmann Rendel, Julia Trieflinger, and Klaus Ostermann
(See online at https://doi.org/10.1145/2858949.2784763) - F-Omega with equirecursive types for datatype-generic programming. In Proceedings of Symposium on Principles of Programming Languages (POPL 2016), pages 30–43, 2016
Yufei Cai, Paolo G. Giarrusso, and Klaus Ostermann
(See online at https://doi.org/10.1145/2914770.2837660)