Will Crichton Profile Banner
Will Crichton Profile
Will Crichton

@tonofcrates

6,709
Followers
167
Following
509
Media
2,705
Statuses

Cognitive engineer, incoming assistant professor @BrownUniversity .

he/him
Joined September 2011
Don't wanna be here? Send us removal request.
Pinned Tweet
@tonofcrates
Will Crichton
2 years
Latency Numbers Every Programmer Should Know
Tweet media one
10
60
407
@tonofcrates
Will Crichton
3 years
Tweet media one
43
293
3K
@tonofcrates
Will Crichton
1 year
This is a REAL string in Rust. This is what they don't want you to see with their "abstractions."
Tweet media one
49
220
2K
@tonofcrates
Will Crichton
2 years
I love that Types and Programming Languages has a dependency graph of its chapters, followed by a recommended curriculum as a curated topological sort.
Tweet media one
Tweet media two
22
187
2K
@tonofcrates
Will Crichton
2 years
If you're learning Rust right now, try out our interactive version of the Rust Book. It has: - Quizzes to help check your understanding - Highlighting to help you keep notes and give feedback - Plus more features on the way!
Tweet media one
28
258
2K
@tonofcrates
Will Crichton
2 years
Js: - Compiler: esbuild - Types: tsc - Packages: yarn - Tests: jest - Monorepo: lerna - Build script: node Rust: - Compiler: cargo - Types: cargo - Packages: cargo - Tests: cargo - Monorepo: cargo - Build script: cargo
38
132
1K
@tonofcrates
Will Crichton
1 year
We just added a new chapter on ownership to the Rust Book Experiment. It provides a deeper look into how Rust works at runtime, and why the borrow checker will catch unsafe programs. Check it out:
Tweet media one
6
121
734
@tonofcrates
Will Crichton
3 years
1 year, 1 RFC, and 1k LOC later... it's finally here! Rustdoc can now automatically scrape code examples from your workspace's examples/ directory as documentation for functions. Check out a live demo:
Tweet media one
11
154
737
@tonofcrates
Will Crichton
3 years
PL papers are hard to read, and LaTeX / PDF doesn't make it easier. So I decided to make the LaTeX of the future. You can check out in my HATRA'21 paper: "A New Medium for Communicating Research on Programming Languages"
Tweet media one
Tweet media two
Tweet media three
25
178
722
@tonofcrates
Will Crichton
2 years
Personal news: I'm starting a postdoc with @ShriramKMurthi ! Our goal is making Rust easier to learn. We'll be designing curricula, visualizations, and IDE tools to help devs understand concepts like ownership and traits. And we are partnering with the inimitable @nikomatsakis .
21
34
529
@tonofcrates
Will Crichton
1 year
Monday Memory Mystery: guess why these assertions hold in Java. (Note that this behavior is *in the language spec*, not an implementation detail of the JVM.)
Tweet media one
64
36
472
@tonofcrates
Will Crichton
4 months
I wrote some ideas for how to actually make HTML documents a viable replacement for PDFs.
20
78
455
@tonofcrates
Will Crichton
1 year
Level up your Rust skills by turning off the borrow checker!
Tweet media one
10
36
434
@tonofcrates
Will Crichton
2 years
An underappreciated aspect of functional programming is that it's different from other styles because it arose from a historical context where the foremost goal was to formally reason about semantics, not to accomplish programming tasks on existing hardware.
8
93
440
@tonofcrates
Will Crichton
1 year
Unreasonably excited about some upcoming additions to our Rust Book Experiment!!
Tweet media one
13
43
438
@tonofcrates
Will Crichton
1 month
Guess who's about to become Rhode Island's #1 Rustacean and #2 document engineer (behind Andy van Dam, ofc). Catch me as an assistant prof at Brown CS in 2025!
53
17
432
@tonofcrates
Will Crichton
2 years
As Rust gets more popular, I think it's important not to lose sight of how much nicer it is to write some programs in languages like OCaml.
Tweet media one
19
55
421
@tonofcrates
Will Crichton
1 year
Relearning that PHP has absolutely psychotic semantics for higher-order functions: function foo() { echo "bar"; } function twice($f) { $f(); $f(); } twice('foo') That's right, you pass the function name **as a string**!
29
20
403
@tonofcrates
Will Crichton
8 months
Hey I'm on the academic job market. I build systems to make programmers smarter, informed by PL theory (to make correct & generalizable tools) and HCI theory (to make humanly-useful tools). Also, students say I'm "one of the best lecturers at Stanford."
Tweet media one
11
84
401
@tonofcrates
Will Crichton
2 years
Working on tools for thought (keynote slides about cognitive design)
Tweet media one
4
38
368
@tonofcrates
Will Crichton
2 months
Rust trait errors are about to get a lot more... explorable!
Tweet media one
8
34
349
@tonofcrates
Will Crichton
2 years
The Typescript compiler has adopted the famous "monofile" approach to codebase organization:
13
25
333
@tonofcrates
Will Crichton
1 year
One striking stat from the Rust Book Experiment is that 60% of Rust learners self-report as not proficient in a systems language (C or C++). 95% self-report as not proficient in a pure functional language (OCaml or Haskell).
9
34
298
@tonofcrates
Will Crichton
1 year
My greatest achievements in the Rust Book Experiment are high-entropy questions. This question has a nearly uniform distribution across all answers:
Tweet media one
23
12
297
@tonofcrates
Will Crichton
3 years
A debugger is not a debugger, it is an interactive program executor. The sooner we internalize this, the sooner we can talk about what should really be considered a “debugger.”
3
22
287
@tonofcrates
Will Crichton
1 year
(nervously reading a script, glancing at an offscreen presence) The picture above is not a string. A string is a... beautiful abstraction which would never have so many fields. Strings have always looked like this:
Tweet media one
6
9
284
@tonofcrates
Will Crichton
2 years
Mr. Miri & The Small Steppers
14
29
278
@tonofcrates
Will Crichton
3 years
Flowistry is a set of powerful IDE tools for Rust. It uses techniques from my research to analyze a program's information flow, and visualize the flow in several ways. An alpha release is now available! Works with VSCode and nightly Rust projects.
6
38
276
@tonofcrates
Will Crichton
3 years
Just realized my shirt matches my syntax highlighting.................
Tweet media one
5
10
274
@tonofcrates
Will Crichton
1 year
"The systems programmer has read the kernel source, to better understand the deep ways of the universe, and the systems programmer has seen the comment in the scheduler that says “DOES THIS WORK LOL,” and the systems programmer has wept instead of LOLed."
Tweet media one
5
13
264
@tonofcrates
Will Crichton
11 months
> open a PL paper > shit it uses category theory > fine it's time to learn > open "Category Theory for PL Dummies" > 800 pages of definitions > at last, motivating applications > "X is actually Y. to see why this connection is useful, read these 5 papers" > mfw
9
21
265
@tonofcrates
Will Crichton
8 months
New paper w/ @ShriramKMurthi , conditionally accepted to POPL'24: how do document languages compose content and computation? The key mechanism is the *template*, which we model by extending to System F to create the *document calculus*.
7
48
260
@tonofcrates
Will Crichton
1 year
@arian4n Check out in a few weeks and you'll see it live!
7
21
247
@tonofcrates
Will Crichton
3 years
Excited to announce my debut PL/HCI paper appearing at CHI'21: "The Role of Working Memory in Program Tracing". Ever found it hard to remember stuff while you read a program? That's working memory! Check out our experiments exploring this phenomenon.
Tweet media one
8
37
227
@tonofcrates
Will Crichton
9 months
Our OOPSLA'23 paper is now on arXiv. We developed a new pedagogy for teaching Rust's ownership model, and we evaluated the pedagogy's learning outcomes with data from thousands of Rust learners.
3
55
213
@tonofcrates
Will Crichton
1 year
Very happy that the tool can now explain the mysterious "hidden type captures lifetime that does not appear in bounds" error.
Tweet media one
4
23
203
@tonofcrates
Will Crichton
1 year
I present to you: the toughest question in the entire Rust Book Experiment. Only 17% of readers get it right!
Tweet media one
9
18
199
@tonofcrates
Will Crichton
4 months
My RustConf 2023 talk is, at last, on YouTube. It summarizes a year of research on systematically making Rust easier to learn.
3
38
187
@tonofcrates
Will Crichton
2 years
I've noticed a lot of Rust APIs nowadays use "trait sugar" for flexibility, e.g. impl Into<String> instead of String. But a concern for users is how much worse the error messages become. Compare: fn f(s: String) {} fn g(s: impl Into<String>) {} fn main() { f(0); g(0); }
Tweet media one
Tweet media two
9
18
183
@tonofcrates
Will Crichton
2 years
When I taught CS 242, I argued PL history can be divided between Turing languages and Church languages. Turing languages were invented with respect to the machines that existed at the time. Church languages were invented usually for formalizing mathematical or logical domains.
Tweet media one
8
41
180
@tonofcrates
Will Crichton
8 months
Some notes on a recent performance optimization adventure. The benchmark is open-source if you want to try and surpass me!
8
24
178
@tonofcrates
Will Crichton
2 years
Really liking this interaction -- I call it "focus mode". Turns slicing into an ambient interaction. Click anywhere, immediately see the forward and backward slice of what's under your cursor.
4
15
165
@tonofcrates
Will Crichton
2 years
Try explaining to a Rust newbie why one of these compiles and the other doesn't :'|
Tweet media one
15
17
163
@tonofcrates
Will Crichton
4 years
It's sad that ownership/borrowing is always explained in terms of application to memory management. One day, we'll talk about a static aliasing discipline the same way we talk about types today. Knowing who points to what is fundamental to good system design.
6
22
162
@tonofcrates
Will Crichton
7 months
I'll be presenting our OOPSLA'23 paper "A Grounded Conceptual Model for Ownership Types in Rust" tomorrow at 11:18am in Room I. Come and hear about a recipe for helping people understand a type system. A preview:
Tweet media one
2
21
157
@tonofcrates
Will Crichton
1 year
The median Rust learner: * Is a professional programmer * Has been programming for 5 years * Knows Javascript and Python
6
12
157
@tonofcrates
Will Crichton
5 months
New paper out w/ @ShriramKMurthi accepted to OOPSLA'24: a psychometric analysis of programming language learning. We added ~200 quiz questions to a popular book on Rust and collected ~1,000,000 answers from ~60,000 people over 1 year.
2
25
156
@tonofcrates
Will Crichton
2 years
Big thanks to everyone who attended my thesis defense. If you missed it, here's a recording. I cover important topics like: * Why (human) memory matters when programming * How the Rust borrow checker works * How to make a lemon meringue pie
1
30
153
@tonofcrates
Will Crichton
5 years
The more I read, the more it seems like everything I know about education and instruction is completely wrong.
Tweet media one
17
19
149
@tonofcrates
Will Crichton
11 months
What should be considered a design pattern in the era of functional languages? I wrote a paper about this question for FUNARCH @ ICFP. Would love to hear your thoughts:
7
31
149
@tonofcrates
Will Crichton
2 years
Dissertation is out! "Revisiting Program Slicing with Ownership-based Information Flow". You might like: * A philosophy for combining theories of cognition & PL * A history of cogpsych research on programming * A perspective on how to make slicing useful
7
25
147
@tonofcrates
Will Crichton
2 years
Get ready for TRPLISQ (The Rust Programming Language In-Situ Quizzes)
Tweet media one
10
11
144
@tonofcrates
Will Crichton
1 year
That means Rust is a lot of peoples' first exposure to *both* systems programming *and* functional programming!
3
3
143
@tonofcrates
Will Crichton
2 years
I was curious about the landscape of research about Rust, so I put together a Zotero library of 50+ publications from the last 10 years and loosely organized them. For the interested:
6
30
130
@tonofcrates
Will Crichton
2 years
The first public release of Nota is now available! Installation and tutorial can be found at:
Tweet media one
6
21
128
@tonofcrates
Will Crichton
2 years
Weirdest part about using Typescript is that it has the most complex type system of any major PL today, but you can also just opt out at any time.
@tonofcrates
Will Crichton
2 years
@shwestrick Honestly no idea. TS modules aren't great but are workable enough. But FWIW the TS type system is actually insanely complicated. It variously supports: gradual typing, structural subtyping, dependent typing, type combinators, multiple inheritance through mixins, ...
1
1
43
4
5
120
@tonofcrates
Will Crichton
8 months
Also, one last brag: I have *impeccable* taste in programming languages. In 2018, I was teaching in my PL course: - OCaml - Rust - WebAssembly - Lean Five years later, I'm running 4/4 in terms of "languages people are excited to use in 2023".
6
6
120
@tonofcrates
Will Crichton
1 year
We just released Quizicist, an AI tool to generate multiple-choice questions about text content (e.g. a textbook or lecture notes). Try it out:
Tweet media one
5
14
120
@tonofcrates
Will Crichton
2 months
The entire field of PL right now: what if it was dynamically scoped.... but statically typed..............?
3
17
116
@tonofcrates
Will Crichton
2 years
I am defending my thesis, "Revisiting Program Slicing with Ownership-based Information Flow", next Friday May 6 at 3pm PT. Please attend if you're interested! The talk is designed to be broadly accessible. Gates 174 in-person, or you can watch on Zoom (DM me for the link).
Tweet media one
5
10
115
@tonofcrates
Will Crichton
2 years
I feel like there should be more DSLs (and corresponding theory) for describing patterns. Regular expressions are nice for basic sequences, but what about: * Multiple overlapping sequences * Spatiotemporal data * Trees, DAGs, graphs
9
8
113
@tonofcrates
Will Crichton
2 years
Nota demo is now live:
3
13
114
@tonofcrates
Will Crichton
3 years
I'll be live-tweeting my highlights from HOPL IV, the once-in-a-generation conference about the history of programming languages.
2
35
112
@tonofcrates
Will Crichton
6 years
Is there a version of math with better names for things? Imagine if we had "Naur loop" and "Hoare loop" instead of "for loop" and "while loop." Yet we have Cauchy–Schwarz inequality, Kullback–Leibler divergence, Euler's formula, ...
7
27
107
@tonofcrates
Will Crichton
1 year
@tekknolagi Not String or &str, but a secret third thing (Vec<u8>)
2
3
107
@tonofcrates
Will Crichton
25 days
While folks are starting to get excited about GC-ified Rust, just remember -- real ones have been asking since 2016, "what if we just wrapped everything in Rc<RefCell<T>>?"
4
7
110
@tonofcrates
Will Crichton
5 months
I would hate it if everyone read my dissertation. I bet you would find soooo many issues if you read it cover-to-cover and grappled with all the ideas. God forbid that people find the convenient link on my website:
4
9
107
@tonofcrates
Will Crichton
5 years
One striking feature of programming language history is that two of the most influential languages ever created were designed by committee: Algol and Haskell, both under quite similar circumstances.
Tweet media one
Tweet media two
6
30
104
@tonofcrates
Will Crichton
2 years
Are there tools that can automatically generate program visualizations like this? That is: generic stack/heap vis + unrolled in time (no stepping).
Tweet media one
10
4
102
@tonofcrates
Will Crichton
9 months
Tearing my PhD diploma off the wall to replace it with this:
Tweet media one
3
2
100
@tonofcrates
Will Crichton
1 year
Dear god.
Tweet media one
4
3
98
@tonofcrates
Will Crichton
3 years
@flyingcroissant @geoffreylitt Imagine every 10,000px-long blogspam website condensed to this:
Tweet media one
6
7
97
@tonofcrates
Will Crichton
21 days
Hah, frontend web devs are so stupid, using an arbitrary assignment of integers to manage z-index conflicts. Time to take a big sip of coffee and see how type theorists deal with overlapping type classes.
1
5
93
@tonofcrates
Will Crichton
2 years
Devising a demented vocabulary so my students will never be able to use Copilot. Good luck asking for a method that can hedgetrim an N-way pseudo-shrub
3
4
92
@tonofcrates
Will Crichton
1 year
Tweet media one
5
7
92
@tonofcrates
Will Crichton
2 years
Added some more good ideas to my list. And they can be yours for the low, low price of $0!
Tweet media one
1
11
89
@tonofcrates
Will Crichton
11 months
After a brief trial, this seems like a useful complement to other information sources, but not a real game-changer. Eg I opened the Rust compiler source and asked where I could find diagnostics relating to trait errors, and it hallucinated 5 files that don't exist.
@Steve_Yegge
Steve Yegge
11 months
I'm excited to announce that Cody is here for everyone. Cody can explain, diagnose, and fix your code like an expert, right in your IDE. No code base is too challenging for Cody. It's like having your own personal team of senior engineers. Try it out!
13
50
349
5
6
86
@tonofcrates
Will Crichton
2 years
This historical perspective falls apart in the last decade. Many new languages (Rust, Swift, Scala, ...) have both Church and Turing influences. I argue in my course that this is because software is getting so complex that primitives designed for reasoning are now essential.
Tweet media one
4
9
86
@tonofcrates
Will Crichton
8 months
go ahead. keep screaming "Performance Has Regressed" at me. it only makes my runtime Worse
Tweet media one
1
3
84
@tonofcrates
Will Crichton
6 years
What is Systems Programming, Really?
1
32
83
@tonofcrates
Will Crichton
1 month
I would die of shame if I cited a researcher and they proceeded to dunk on me like this.
Tweet media one
2
4
83
@tonofcrates
Will Crichton
3 years
Excited for my upcoming book, "Rust for Clojurists Who Also Know A Bit of Haskell and Took a Systems Programming Class Back in College But It's Been A While"
Tweet media one
5
4
79
@tonofcrates
Will Crichton
1 year
@ShriramKMurthi Q: "How do you make a deep copy of an object [in Java]?" A: "A safe way is to serialize the object, then deserialize. This ensures everything is a brand new reference."
5
5
79
@tonofcrates
Will Crichton
2 years
The world wants a better document language for the web! If you are an HCI researcher, a tools-for-thought enthusiast, a Javascript nerd -- now is the time to work on this problem. But we need a revolution, which I don't think will come from incremental improvements on Markdown.
@stripe
Stripe
2 years
Today we’re open-sourcing Markdoc, the content-authoring system that powers the Stripe docs. You can now freely build documentation, static pages, or tooling with the same tools we use: . ✍️
39
433
2K
4
4
76
@tonofcrates
Will Crichton
13 days
Giving several talks, most virtually. Come watch! 5/23: LangSec - "Towards Language-Theoretic Security for Dynamic Documents" 5/28: JetBrains TV - "Teaching Rust" 8/22: Topos Institute - "The Human Factors of Type Systems" 10/23: P99 Conf - "The Performance Engineer's Toolkit"
4
8
79
@tonofcrates
Will Crichton
2 years
ES6 JS is actually a very pleasant language now. But its tools require so much more work than in a centralized ecosystem like Rust. Billions of .config.json files, dozens of interop packages like esbuild-jest or estrella.
2
3
77
@tonofcrates
Will Crichton
6 years
Sneak peek from my first lecture in CS 242. The world of programming languages is clearly trending towards better type systems!
Tweet media one
9
38
75
@tonofcrates
Will Crichton
28 days
More convinced than ever that the programming stack of the future is Lean Rust Wasm. And Typescript until there's a good Lean→JS compiler.
8
2
76
@tonofcrates
Will Crichton
2 months
Proof assistants are a great motivator for abstract algebra. "Ugh I don't want to prove all these facts for my new data structure... Oh wait, but if I think of it as a semilattice, I'll get these theorems and tactics for free!"
2
1
74
@tonofcrates
Will Crichton
2 years
One extension of this idea, from a convo with @neurocy : what if tools could indicate the conceptual dependencies of an object in context? Eg "you must understand closures, traits, and async to use this Rust library."
2
11
73
@tonofcrates
Will Crichton
1 year
"So of course, this doesn't compile, as you can see he-- wait what?"
Tweet media one
8
7
73
@tonofcrates
Will Crichton
7 months
This Google PM really gets me. The thing I hate the most about conferences is meeting new people, and the solution I'm looking for is to replace myself with an AI.
Tweet media one
3
3
73
@tonofcrates
Will Crichton
2 years
I just published v0.1 of mdbook-quiz, a tool for embedding interactive quizzes into Markdown books. Try it out! Live demo: Docs:
Tweet media one
5
12
74
@tonofcrates
Will Crichton
1 year
@3m00n_ ⭐ for getting the integer size correct!
1
0
72
@tonofcrates
Will Crichton
3 months
You'll never find definitive proof that I lobbied Joe Biden to federally mandate the use of my research.
@m1guelpf
Miguel Piedrafita ✨
3 months
C is now illegal
218
1K
9K
1
2
71
@tonofcrates
Will Crichton
1 year
@sliminality Added support for enums, just for you
Tweet media one
1
1
69
@tonofcrates
Will Crichton
2 years
One day, all knowledge will be embedded into the OmniGraph.
2
4
67
@tonofcrates
Will Crichton
1 year
I just added ~75 more quiz questions, so now the Rust Book Experiment covers the entire book. Check it out starting here:
1
7
69
@tonofcrates
Will Crichton
3 years
What if Rosetta Code actually had a good interface? Check out my "expressiveness benchmark" for data analytics DSLs that helps compare implementations of the same task in different languages.
Tweet media one
2
11
66
@tonofcrates
Will Crichton
2 years
Not to mention how many times I've had to google "yarn vs npm", "esbuild vs webpack", "jest vs mocha", "cjs vs esm"...
3
0
66