22 citations · 30 across the 8 of their papers we have counts for
9 papers
A Design Space Exploration of Async/Await
Gavin Gray, Shriram Krishnamurthi, Will Crichton
Many modern programming languages include some form of asynchronous programming. In particular, a growing number now have what we call straight-line asynchrony: attempts to provide…
Explorable Proofs: Making Written Proofs Explorable by Grounding Them in Formal Representations
Hita Kambhamettu, Will Crichton, Sean Welleck +2
LLM-generated explanations can make technical content more accessible, but there is a ceiling on what they can support interactively. Because LLM outputs are static text, they cann…
When Do Reactive Notebooks Fail to React?
Yuchen Lu, Megan Zheng, Will Crichton +3
Computational notebooks are convenient for programmers, but can easily become confusing and inconsistent due to the ability to incrementally edit a program that is running. Recent…
An Interactive Debugger for Rust Trait Errors
Gavin Gray, Will Crichton, Shriram Krishnamurthi
Compiler diagnostics for type inference failures are notoriously bad, and type classes only make the problem worse. By introducing a complex search process during inference, type c…
WatChat: Explaining perplexing programs by debugging mental models
Kartik Chandra, Katherine M. Collins, Will Crichton +6
Often, a good explanation for a program's unexpected behavior is a bug in the programmer's code. But sometimes, an even better explanation is a bug in the programmer's mental model…
Profiling Programming Language Learning
Will Crichton, Shriram Krishnamurthi
This paper documents a year-long experiment to "profile" the process of learning a programming language: gathering data to understand what makes a language hard to learn, and using…
A Core Calculus for Documents
Will Crichton, Shriram Krishnamurthi
Passive documents and active programs now widely comingle. Document languages include Turing-complete programming elements, and programming languages include sophisticated document…
Debugging Trait Errors as Logic Programs
Gavin Gray, Will Crichton
Rust uses traits to define units of shared behavior. Trait constraints build up an implicit set of first-order hereditary Harrop clauses which is executed by a powerful logic progr…
A Grounded Conceptual Model for Ownership Types in Rust
Will Crichton, Gavin Gray, Shriram Krishnamurthi
Programmers learning Rust struggle to understand ownership types, Rust's core mechanism for ensuring memory safety without garbage collection. This paper describes our attempt to s…