PhD Position Dynamic Semantics Specification

Research / Academic

Project Problem Outline

There is a lack of frameworks and tools that aid language designers in defining and implementing languages in a way that strikes a balance between:

  • Declarativity: allowing language definitions to be read and understood by language designers as well as programmers.
  • Executability: supporting realistic and efficient implementations of language run times.
  • Verifiability: providing a foundation for proving meta-properties of the defined language, and verifying properties of programs.

Definitional interpreters are an attractive style of language definition, since they are executable by construction. The key idea of a definitional interpreter is to define an object language by implementing an interpreter for it in a second, better-understood meta-language. There is no shortage of meta-languages that can be used to implement definitional interpreters, but existing meta-languages do not strike a satisfactory balance between declarativity, executability, and verifiability. Executability and efficiency typically comes at the cost of sacrificing declarativity and verifiability, and vice versa. The proposed Ph.D. project revolves around the development of a new language for defining languages that addresses this shortcoming. The vision is to provide a framework and tool that generates efficient language run times from declarative and verifiable language definitions. The goal of the Ph.D. project is to contribute to this vision.

Context: Scopes-and-Frames

Recent work on scopes-and-frames introduced a set of memory primitives for implementing lexical name binding (such as binders in λ calculus), and non-lexical name binding (such as module imports, class inheritance, etc.). Scopes-and-frames are:

  • Declarative: can be used to implement clear and concise definitional interpreters.
  • Executable: based on a relatively low-level memory model that we believe is amenable to implementation in realistic language run times.
  • Verifiable: based on a formal correspondence with scope graphs, to provide a uniform type safety principle for name binding in defined object languages.

But, to date, scopes-and-frames have not been integrated into any definition language that strikes a balance between the concerns above.

Potential Lines of Research

There are several research objectives that could be explored as part of this project. For example:

  • A definition language that provides integrated support for scopes-and-frames.
  • Language-parametric garbage collection for scopes-and-frames.
  • Abstractions for control and memory (the “control stack” in many language run times). Control and memory is important for efficient execution, and for defining language features such as exceptions, co-routines, continuations (call/cc), etc.
  • A virtual machine for executing language definitions. Inter-operability between different languages running on the same VM.
  • Type-safe compilation of type-safe language definitions.
  • […]

About the Position

We are looking for a versatile candidate who can contribute to the development of theoretical foundations, design of meta-languages, implementation and integration of languages and libraries in the language workbench, and evaluate the new techniques in language design case studies.

For more information see the publications on scope graphs. For this project see especially the ESOP’15, ECOOP’16, POPL’18, and ECOOP’19 papers.

The PI on the project is Casper Bach Poulsen. The PhD student will be co-supervised by Eelco Visser.


We are looking for an excellent candidate with the following qualifications, knowledge, and skills:

  • A master’s degree (or equivalent) in computer science
  • A strong and demonstrable interest in program languages and language engineering, including experience with language engineering topics such as compiler construction, type checking, and definitional interpreters.
  • A strong commitment to research: turn insights about programming languages and software development into generalizable and elegant theory and solutions; investigate the state-of-the-art/literature; evaluate ideas and solutions against relevant and motivating examples from software engineering practice.
  • A strong commitment to turning theory into software and demonstrable software engineering skills (with object-oriented and functional programming languages) to realize that.
  • Independent, self-motivated, reliable, and eager to learn.
  • Ability to work in a project team and take leadership and responsibility for different research tasks.
  • An excellent command of English and good academic writing and presentation skills.

Salary Benefits:

TU Delft offers PhD-candidates a 4-year contract, with an official go/no go progress assessment after one year. Salary and benefits are in accordance with the Collective Labour Agreement for Dutch Universities, increasing from € 2395 per month in the first year to € 3061 in the fourth year. As a PhD candidate you will be enrolled in the TU Delft Graduate School. The TU Delft Graduate School provides an inspiring research environment with an excellent team of supervisors, academic staff and a mentor. The Doctoral Education Programme is aimed at developing your transferable, discipline-related and research skills.

The TU Delft offers a customisable compensation package, discounts on health insurance and sport memberships, and a monthly work costs contribution. Flexible work schedules can be arranged. For international applicants we offer the Coming to Delft Service and Partner Career Advice to assist you with your relocation.

Work Hours:

38 - 40 hours per week


Mekelweg 2