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

  • Choice Calculus
    A simple, formal language for describing variation.

  • Variational Programming
    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.

  • Variational Typing
    Efficiently infer types for massive numbers of related programs. Includes applications to problems in gradual typing.

Older work

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.

Graduate students

Undergraduate students