Programming Languages Research
See my Publications page for a complete list of my publications with downloadable PDFs and links to data and source code.
Overview and expertise
My interest in programming languages is rooted in the belief that the languages we use shape the way we view the world, and that better languages can help us understand, solve, and explain more difficult problems.
My core areas of research expertise are:
- domain-specific language (DSL) design and implementation
- functional programming
- type systems and type inference
- all aspects of software variation
I also have secondary expertise in:
- dependently typed programming and program verification
- compilers, program analysis, and program transformation
- human factors of programming languages and software engineering
- visual programming languages
- module systems and modularity
Finally, I have some expertise in game theory, game design, and linguistics, which are outside the scope of programming languages, but which are significant interests of mine and which I’ve used to varying degrees in my work.
Lots of my work involves software variation, which broadly refers to large
sets of related programs. A well-known example of software variation arises
from use of the C preprocessor (e.g.
#ifdef and related statements).
In most large C projects, a huge number of different programs can be generated
from a single codebase by running the preprocessor with different arguments,
corresponding to configuring the software to run on different platforms or with
different sets of features.
However, software variation can also arise in a variety of other ways:
Through exploratory programming processes, where variations are created by programmers through trial and error.
Through ambiguity or uncertainty, either in the problem domain or in the programming language itself, where variations are caused by multiple different interpretations of a program or its inputs.
Through speculative program analyses, where variations are created on the fly in order to explore large numbers of hypothetical changes to a program.
I am the co-creator of the choice calculus, a simple formal language for modeling variation that lies at the heart of much of this work.
Note: these project pages are a work-in-progress. Some simply collect links to related papers together but are missing an introduction and overview.
Recent and ongoing work
A simple, formal language for describing variation.
Efficiently computing with massive numbers of variations in data and code. Includes work on variational data structures and variational databases, and applications to solving large numbers of related SAT problems.
Efficiently infer types for massive numbers of related programs. Includes applications to problems in gradual typing.
Variation Control Systems
Systems and interfaces for editing and managing massively variational software.
Verifying GUI Applications
A small project on verifying GUI application code in Agda.
A new programming paradigm focused around the construction of explanations as a primary program output.
Hagl: Haskell Game Language
A DSL embedded in Haskell for experimental game theory.
Student mentoring and advising
From 2014–2021 I was a professor at Oregon State University and led a programming languages research group filled with amazing students. Working with these students was the highlight of my academic career, and I’m super proud of the work we did together.
During this time, I founded and co-advised a well-attended Programming Languages Reading Group and was the faculty advisor for the student-run OSU Functional Programming Club.
Below is a list of students that graduated from my group. Their graduate theses and project reports are included at the bottom of my Publications page.
- Parisa Ataei, PhD 2021
- Jeff Young, PhD 2021
- Fariba Khan, MS 2021
- Ghadeer Alkubaish, MS 2020
- Qiaoran Li, MS 2019
- Alex Grasley, MS 2018
- Mike McGirr, MS 2018
- Keeley Abbott, MS 2017
- Meng Meng, MS 2017
- Shujin Wu, MS 2017
- Spencer Hubbard, MS 2016