In 2012 we introduced the NaBL name binding language, which supports high-level declarative specification of name binding and scope rules of (domain-specific) programming languages. In 2013 we introduced an incremental execution engine for NaBL, which recomputes only the resolution of those names that have been affected by a change. While this provides a powerful tool for language designers, we had a hard time explaining exactly how it worked. We kept getting the question 'but what is the semantics of NaBL?' and we didn't have a good answer. Our attempts at formulating a high-level concise formalization of the semantics underlying the implementation proved that this was a non-trivial problem. In 2014 we finally managed to formulate a language-independent theory of name resolution in the form of a calculus that defines name resolution in a `scope graph'. The paper has been accepted for publication in the ESOP 2015 proceedings and is the ESOP nominee for the ETAPS 2015 best paper award:

A Theory of Name Resolution. Pierre Neron, Andrew P. Tolmach, Eelco Visser, Guido Wachsmuth. In Jan Vitek (editor), Programming Languages and Systems - 24th European Symposium on Programming, ESOP 2015, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2015, London, UK, April 11-18, 2015, Proceedings. 2015

We have published an extended version of the paper as a technical report: A theory of name resolution with extended coverage and proofs

Abstract: We describe a language-independent theory for name binding and resolution, suitable for programming languages with complex scoping rules including both lexical scoping and modules. We formulate name resolution as a two stage problem. First a language-independent scope graph is constructed using language-specific rules from an abstract syntax tree. Then references in the scope graph are resolved to corresponding declarations using a language-independent resolution process. We introduce a resolution calculus as a concise, declarative, and language-independent specification of name resolution. We develop a resolution algorithm that is sound and complete with respect to the calculus. Based on the resolution calculus we develop language-independent definitions of alpha-equivalence and rename refactoring. We illustrate the approach using a small example language with modules. In addition, we show how our approach provides a model for a range of name binding patterns in existing languages.

Last month I presented our paper about our vision of a language designer's workbench at Onward! 2014 in Portland. Here are the slides of that presentation:

A Language Designer's Workbench: A One-Stop-Shop for Implementation and Verification of Language Designs. Eelco Visser, Guido Wachsmuth, Andrew P. Tolmach, Pierre Neron, Vlad A. Vergu, Augusto Passalaqua, Gabriël Konat. OOPSLA 2014: 95-111

Abstract: The realization of a language design requires multiple artifacts that redundantly encode the same information. This entails significant effort for language implementors, and often results in late detection of errors in language definitions. In this paper we present a proof-of-concept language designer's workbench that supports generation of IDEs, interpreters, and verification infrastructure from a single source. This constitutes a first milestone on the way to a system that fully automates language implementation and verification.

We have an opening for a PhD student to work on automatic grading and tutoring in online courses. In particular, we are interested in automatic feedback and assessment techniques that we can apply in programming education. The results of the research will be applied and evaluated in several courses at TU Delft and other universities.

We are looking for a candidate with a Master’s degree (or equivalent) in computer science or a related discipline, a passion for online education, and a broad interest including systems programming, compilers, language engineering, programming environments, web programming, machine learning, interaction design, education research, and teaching.

For more information about the position see

This morning I gave a keynote talk at Modularity 2014 about declarative meta-languages in Spoofax. The abstract of the talk was published in the proceedings.

Abstract: Effectively applying linguistic abstraction to emerging domains of computation requires the ability to rapidly develop software languages. However, a software language is a complex software system in its own right and can take significant effort to design and implement. We are currently investigating a radical separation of concerns in language definition by designing high-level declarative meta-languages specialized to the various concerns of language definition that can be used as the single source of production quality (incremental) semantic operations and as a model for reasoning about language properties.

Note that a considerable part of the talk consisted of demonstration, which is not reflected in the slides. I added the Spoofax project that I used in the demo to github.


The TU Delft Software Language Design and Engineering group at group meeting in April 2014.

Top row, left to right:

  • Vlad Vergu
  • Danny Groenewegen
  • Eduardo Amorim
  • Pierre Neron

Bottom row, left to right:

  • Eelco Visser
  • Augusto Passalaqua
  • Guido Wachsmuth
  • Gabriël Konat


  • Elmer van Chastelet