From the start of this year, I have slowly been going about designing a query system for Krabby. It took five months of sitting still and thinking really hard, but I believe I have a clear grasp of the design now. I’m going to explain why Krabby needs a query system (because I thought it wouldn’t for a while), the special features I wanted, and how everything fits together.
read more…
I’m ecstatic to announce that, from July 22, I will be paid to work on rustc and Krabby for one day a week. This is an internship at RustNL (as part of The Rust Maintainers Team) enabled by my employer NLnet Labs, which will last up to a year. I’m immensely grateful to everyone involved in making this happen! In this post, I’m going to lay out how I will spend this time.
read more…
I have a large backlog of posts to write, but I quickly wanted to share a fun idea I explored on Thursday. I’ve been thinking about how incremental compilation should work in Krabby, and a major sticking point there is spans. But I think I have a plan.
read more…
To recap: it’s November 2025 and I’ve spent the last two-ish months working on identifier interning. My plans to implement name resolution by the end of the year were screwed, but I still wanted to spend substantial time on it.
To be honest, I think my foray into identifier interning was really to avoid implementing parsing. Parsing is just really, really hard. The Rust syntax is deeply complicated, it varies (in subtle ways) across editions, and you need to design an AST to parse into. I had already put a lot of effort into designing my own token stream format, which meant I couldn’t use existing parsers.
read more…
Name resolution requires storing lots of identifiers and comparing them to each other very rapidly. While you could store identifiers as Strings and compare them using basic string equality, this is quite inefficient. A nearly universal approach is interning — assigning every identifier a unique numeric ID, and representing and comparing them by ID. Interning uses a hash table to deduplicate identifiers and ensure that distinct IDs refer to distinct identifiers.
read more…
Precisely one year and one week ago, on , I introduced Krabby. It all started because I had too many ideas about compiler architecture and they stopped fitting in my head. Ever since, Krabby has been the primary focus of my spare time. It’s my favorite thing to do; I’m incredibly grateful to have the time for it, and I’m incredibly proud of what I’ve achieved.
read more…
Krabby appeared on Lobste.rs last week, and I’ve since received e-mails from people interested in contributing! I’ve created a Zulip chat for discussions; feel free to join it whether you want to observe what’s happening or participate yourself. If you’re interested but unsure what you can help with, perhaps take a look at the list of open issues.
Some of those e-mails asked whether Krabby is still being actively developed. I will strongly affirm that; yes, Krabby continues, and I’m as motivated as ever (if not more now!). While it’s still incredibly limited in functionality, I have a lot of plans, and I’m really excited. Let me give you a quick status update.
read more…