completed projects

Bronze is a prototype garbage collector for Rust. The design and evaluation of Bronze are described in a paper. In an experiment, I found that Bronze users completed a programming task that required complex aliasing in a third as much time as people using standard Rust (without Bronze).

Obsidian is a new programming language for blockchain smart contracts. I developed user-centered design methods to integrate strong static safety features while maintaining usability. The language definition, formalization, and case studies were published in TOPLAS; an empirical evaluation was published at OOPSLA. A 4-minute video summarizes and demonstrates Obsidian.

Glacier is an extension to Java that supports transitive class immutability. I showed that Glacier can be used easily by Java programmers to detect accidental mutation of immutable structures.

new projects

Rust’s type system is generally considered to be hard to use. Garbage collection helps in complex cases (see the Bronze project above), but what about for the simpler cases? I’m conducting an observational study of students who are taking a Rust programming class to identify approaches to make Rust easier to use and to make teaching it more effective.

APIs can be thought of as small programming languages. There’s a ton of guidelines for how to design good REST APIs, but those guidelines are not backed by emprical evidence. And some of the guidelines that exist, such as write good documentation, lacks good enforcement mechanisms. For example, OpenAPI is a specification format, but the specifications are vague. You can say your API takes integers, but not that the integer has to be less than 10, or that the integer has to be a valid key in some other table. Then, the documentation inevitably gets out of date. And confusing API design can lead to bugs in client programs, resulting in fragile applications. I’m interviewing designers and users of REST APIs to understand how we can make it easier to design and use REST APIS.

Spreadsheets can be error-prone. Most work on spreadsheet bugs has focused on bugs that result directly from incorrect formulas. Another source, however, is structural changes in spreadsheets, which can break formulas that reference the table that was modified. I have a plan to fix this and simultaneously make complex computations easier for spreadsheet data. I’m not quite ready to share a prototype, though…