PhD, Computer Science
BS, Computer Science
BS, Molecular & Cellular Biology
W20, F20, W21, F21, W22, F22, W23, F23, W24
Masters and UndergraduatesThere are 35+ masters and undergraduate reseachers in FP Lab — see the FP Lab webpage!
Former AdviseesFP Lab alum include 1 Assistant Professor (Michael D. Adams), 6 PhD students, and 100+ students who went on to MS programs or industry!
Hazel: Live Functional Programming with Typed Holes
FP Lab is the academic home of Hazel, a new kind of live programming environment that can understand, manipulate, and run incomplete programs, i.e. programs with holes. The following publications develop the semantic foundations for hole-driven development environments.
Livelits: Filling Typed Holes with Live GUIs
We are working on integrating graphical and programmatic modes of interaction by developing language mechanisms that allow you to define type-specific user interfaces that generate code underneath, i.e. they serve as interactive graphical literal notation.
We have (1) implemented this mechanism for Java as an Eclipse extension called Graphite, (2) surveyed nearly 500 developers to empirically validate the mechanism and to gather a wide variety of use cases, (3) performed a small pilot study, (4) added support for spliced expressions, (5) added support for live programming, (6) mechanically formalized these features, and (7) implemented this live literal mechanism into Hazel.
Hazel Assistant: Integrative Foundations for Intelligent Programming Assistants
We are developing an intelligent programming assistant that synthesizes code satisfying specifications provided by human programmers in the form of types, tests, properties, and sketches, and guided by a learned understanding of idiomatic code (increasingly using large language models).
RustViz: Interactively Visualizing Ownership and Borrowing
The Rust programming language achieves memory and thread safety using a static ownership and borrowing analysis. This has led to explosive adoption, but learning Rust remains challenging. We are developing RustViz, a system that makes learning Rust easier by visualizing the invisible static state changes that occur within Rust code.
Read our RustViz-based quick introduction to Rust!
Relit: Reasonably Programmable Literal Notation
My thesis research developed mechanisms that allow library providers to express new type-specific literal notation (e.g. SQL literals) while ensuring that client programmers can still reason abstractly and compositionally about types and binding.
typy: Programmable Semantic Fragments
typy allows library providers to install new statically typed semantic fragments into Python, while leaving its syntax alone (which cleverly sidesteps the "expression problem"). We have applied typy to problems in web security and data science.
SciUnit: Collaborative Infrastructure for Test-Driven Scientific Model Validation
One of the pillars of the scientific method is model validation: comparing a scientific model’s predictions against empirical data. The SciUnit project casts this as a form of collaborative software testing and develops useful infrastructure.
Neurobiological Circuit Dynamics
I entered grad school as a computational neurobiologist. I was interested in how biological circuits process information, so I developed a model of how the excitatory-inhibitory circuitry in the rodent whisker barrel cortex responds to stimulation.
Information Theoretic Foundations for Brain-Computer Interfaces
We built a provably optimal EEG-based brain-computer interface by studying the information theoretic properties of noisy asymmetric channels and developing statistical models of user intent for various types of communication/control tasks.