Over the last few years, I've had the pleasure of working with many people in the rust community. When I first got involved, I don't think I was ever expecting to go so deep or enjoy it so much. At that time, I was mostly participating in RFC discussions and making minor PRs to RFCs and RBE. What a journey!
However, life has many twists and turns, and I'm finding myself pulled elsewhere. So I'm stepping back from my involvement from Rust and my role as a co-lead of WG-rustc-dev-guide. I'm planning to wrap up a few things I have ongoing, and I'll hopefully still make a PR here and there in the future, but a lot less than now.
Thanks to the many, many people that have helped me along the way! I've stood on many giant's shoulders.
I thought it would be fun to look back at some of things I've gotten to do... so here we go...
rustc-dev-guide
This is probably the biggest thing I worked on. Back in January 2018, Niko proposed writing a book about hacking on the compiler. What a great idea! That effort became the rustc-guide, which was later renamed to rustc-dev-guide.
At first, it was mostly setting up the repo and CI with a linkchecker, so we can try to keep things up-to-date-ish. We also moved most of the READMEs from the rust-lang/rust repo to the guide. Over time, we add more chapters, and various experts wrote new chapters about parts of the compiler that had never had particularly good coverage. A Working Group was formed, and we've interviewed various experts about different parts of the compiler (e.g. hygiene/macros) and collaboratively written quite a few important chapters, as well as dealt with the daily churn of internal APIs changing.
Today, the guide has 130 chapters! It's the go-to reference when you want to get started working on some part of the compiler. And has at least a bit of material about almost the whole compiler, though there is still much work left.
In fact, it has so much material that we want to move some of it to the forge, and some content has been moved to other books, like the chalk book.
Somehow in the middle of all of this, I managed to end up as a primary maintainer of the guide and then as a co-lead with Santiago of the WG. I've learned so much about compiler and programming language design while working on the guide and proofreading chapters by many of the excellent devs that wrote up chapters on their part of the compiler. What a privilege!
rust-lang/rust
This was my first PR: https://github.com/rust-lang/rust/pull/47107. Like many others, my first contribution was to fix a typo.
After that, I went on to make a bunch of other PRs, too -- 107 in total, most of which merged. In retrospect, they mostly fit into 3 categories:
-
A bunch of pretty random fixes and improvements to different parts of the compiler. I can't see any real rhyme or reason to these, but they were fun to work on...
-
Major refactorings to accomplish different purposes. These were mostly accomplished with the help of eddyb (thanks eddyb!). They tended to be long chains of PRs.
-
Completely reorganized and consolidated all of the error-emitting code in the borrow checker. This code used to be in 4-5 different locations in
librustc_mir
and required passing around ~7 arguments to half the functions in the borrow checker. These PRs removed over 200 lines of just function parameter declarations -- that's how much state was being passed around from function to function. 64416, 66684, 66815, 66886, 67241, 67404, 67474, 67476, 69967 -
Cleaned up and fixed the internal compiler infrastructure for printing a "description" of a particular
DefId
. This made things a bit less redundant, a bit more correct, and a bit more unified. It also cleaned up the code and removed some technical debt. 67742, 69498, 69674, 69738, 69740, 70036, 70043 -
Fix all incorrect uses of
TyKind::Error
and make it impossible to reintroduce abuses again. This makes it a lot hard to introduce some types of soundness bugs where the compiler could allow incorrect code. It can also make the debugging experience better for people working on the type system: 71938, 74399, 70551, 70870, 70932 -
Move the standard libraries to a new
library/
directory and the compiler to a newcompiler/
directory. The intent with these is to make the repo a bit more approachable to new contributors, as well as to make the directory structure a bit less un-idiomatic. Personally, I think it is now significantly cleaner and less overwhelming. 73265, 74862
-
-
Improvements to macros-by-example and/or their implementation.
-
Major commenting and formatting improvements. This code was needing a bit of love. 47603, 47732, 60618
-
Proposed, RFCed, implemented, and stabilized the
?
macro operator, including a few design iterations: RFC, 47752, 48302, 49719, 51587, Stabilized -
Various bug fixes and improvements: 57610, 57617, 59858, 60620, 61046
-
Other things
- I've had the opportunity to make some minor PRs to Rust-by-example, rustup, the std library, the website, and elsewhere.
- I've written a few blog posts for the Rust Blog or Inside Rust Blog.
- I've participated in a lot of design discussions for RFCs, on internals, and zulip.
- I conducted the 2020 Contributor Survey with help from many others, and analyzed the results.
Conclusion
I'm deeply humbled and grateful to have gotten to work on all this stuff. I've learned so much, and I have the satisfaction of knowing that I helped improve a great project a bit. I look forward to seeing what comes next for this project!