Programming languages are more than a means for creating programs.
The languages we use shape the way we view the world, formulate questions, and ultimately solve problems. At their best, programming languages reveal the underlying patterns among seemingly different problems, they help us tease apart complexity and make the overwhelming manageable, and they support the sharing of ideas between people.
My research can be broadly organized into two categories:
- Design and application of domain-specific languages (DSLs).
- Foundational work on the principles and process of language design.
Naturally, work in each area complements and informs the other. For example, a useful research strategy is to explore language design issues through the design of individual DSLs. Grounding foundational work in the design of actual languages provides a pragmatic way to address rather open design questions and yields hopefully useful and interesting languages along the way.
A simple, formal language intended as the lambda calculus of variation research.
A new programming paradigm focused around the construction of explanations as a primary program output.
Semantics-First Language Design
An inversion of the typical language design process, intended to produce more principled and easily extensible languages.
Hagl: Haskell Game Language
A DSL embedded in Haskell for experimental game theory.