Library-Based Language Extensions in SugarJ

Abstract: Current approaches to domain-specific languages cannot deliver on the promises of domain-specific abstraction. On the one hand, approaches that target internal domain-specific languages lack flexibility regarding the syntax, static checking, and tool support of domain-specific abstractions. On the other hand, approaches that target external domain-specific languages lack important principles, such as ease of use, modular reasoning and composition of domain-specific abstractions.

We propose the library-based extensible programming language SugarJ as a basis for domain-specific abstraction. In an extensible language, domain-specific abstraction can be realized by extending the base language with domain-specific syntax, static analysis, and tool support. This enables domain abstractions as flexible as external domain-specific languages. To ensure the compliance with important software-development principles, we organize language extensions as libraries and use simple import statements to activate extensions. This facilitates ease of use, modular reasoning (by inspecting import statements), supports the composition of domain abstractions (by importing multiple extensions), and allows application of language extensions in the development of further extensions (by importing extensions in an extension’s definition). A library-based organization of extensions enables domain-specific abstractions that naturally integrate into the base language.

Bio: Sebastian is post-doctoral programming-language researcher in the Software Technology Group at TU Darmstadt. He received degrees in computer science from TU Darmstadt (BSc 2007), Aarhus University (MSc 2009), and Philipps-Universität Marburg (PhD 2013). Sebastian is the lead developer of the extensible programming language SugarJ, which allows programmers to flexibly integrate new syntax, static analyses, and editor support by library import. His general research interests include: extensible programming languages, domain-specific languages, language design, language tooling, declarative parsing methodologies, module systems, type systems, and static analysis.

Please see his personal website ( for further information.

Created November 19, 2013 | Last modified November 28, 2013 | Contributions by Eelco Visser