Aarhus University Seal

Type Systems and Programming Language Design

In the Flix programming language we are explore three research topics:  

  1. Type and effect systems that support inference
    Programming languages with static type systems help programmers avoid errors by ruling out entire classes of bugs at compile time. While a static type system specifies the kinds of values an expression may produce, an effect system characterizes the computational actions it may perform. In this way, effect systems extend the benefits of type systems by enabling richer forms of static program reasoning. Type-and-effect systems that support inference achieve this without imposing additional annotation requirements on the programmer; instead, the compiler automatically determines the types and effects of every expression.
  2. Embedded logic programming
    Logic programming is a powerful paradigm for addressing certain classes of computational problems. However, its languages have yet to see widespread adoption, largely due to challenges in handling the more routine aspects of programming. By embedding logic programming within general-purpose languages, we can combine the strengths of both approaches and gain the best of both worlds.
  3. Modern compiler design
    Modern compilers are no longer simple batch processors that operate on one file at a time. Instead, they are expected to power IDE services such as semantic syntax highlighting, intelligent autocomplete, and automated refactoring, in addition to their traditional role of ensuring that programs are well-formed; that is, semantically and type correct. These demands impose new constraints on compiler design: compilers must now be fast, incremental, parallel, and resilient.

Social Impact

Programming languages are the foundational tools used to create software. Better programming languages empower developers by making software faster, safer, and the development experience more ergonomic. At the core of programming languages are type and effect systems, which support reasoning about programs and help ensure essential safety properties. These systems also enable the construction of powerful abstractions - an essential capability for scaling software development and addressing complex challenges effectively.

Key publications

Matthew Lutze, Magnus Madsen, Philipp Schuster, Jonathan Immanuel Brachthäuser
With or Without You: Programming with Effect Exclusion (ICFP'23)

X. Rao, A.L. Georges, M. Legoupil, C. Watt, J. Pichon-Pharabod, P. Gardner, and L. Birkedal 
Iris-Wasm: Robust and Modular Verification of WebAssembly Programs (PLDI 2023) 

F. Sieczkowski, S. Stepanenko, J. Sterling, and L. Birkedal. 
The Essence of Generalized Algebraic Data Types (POPL'24) 

Views
Devoxx Greece 2025 - Effectful Programming in the Flix Programming Language by Magnus Madsen