2024/09/13 - RustConf Chronicles Day 3

This is the third post of this mini-series, check out Day 1 and Day 2 if you haven't already.

Context

Although RustConf was technically over for me since I cheaped out on purchasing the extra slot dedicated to the Unconference, I was lucky to be invited to a Hackathon in a separate coworking space with the lovely folks from Zed. I had never joined such a hack day event outside of my workplace and this one was no joke.

Pairing and trying to keep up

Show up, sit down, look around. That was my initial thought as I entered the Hackathon space. Amongst the 15-20 people gathered there, somebody split out from one of the tables and came to greet me in a flash before I could even pull out my laptop. This person was Marshall Bowers (maxdeviant) and he promptly proposed to pair on some hacking together.

As we settled down, I explained to him that my mission was to get some insight on how one would build an extension for the Zed IDE. Luckily enough, he had contributed a considerable portion of work to its Extension API. He proceeded to blow me away with a quick collaboration session helping me integrate an LSP into the editor locally. The flow looked a little something like this:

  1. Fetch Metadata from JSON payload hosted alongside the Snyk LSP.
  2. Format a download URL to obtain a Snyk LSP binary.
  3. Store the downloaded binary on the system.
  4. Expose that binary to Zed alongside any required environment variables.

We managed to get the LSP recognized by Zed and unfortunately ran into OAuth issues with the platform that the LSP tries to connect with. Although this implementation was buggy, we had something! Marshall also courteously took the time to give me a rundown of a couple other things:

  • How to navigate the local build cycle like for extensions.
  • How Zed sandboxes interaction with the system via WASM and wasmtime (eg. wasm_host.rs).
  • How Zed models a Worktree and other top level primitives.

All and all, this was a blast. It also made me realize that I need to write way more Rust to get one step closer to how proficient he was.

An event loop, commands, context, etc.

After Marshall moved on to greener pastures, I grabbed some food and was joined at my table by Kirill Bulatov. Shortly after finishing some work on his end, he proposed to give me a rundown of how Zed does things. This ended up being incredibly insightful.

He basically showed me that Zed was built atop its own asynchronous primitives. Tasks, Futures, Executors/Dispatchers, blocking, timing, scheduling. These were all concepts he interwove in front of me and that made a lot more sense once I had looked at the executor.rs file after the fact. His mental model of the system seemed quite strong.

He also took some time to illustrate how the editor leverages various Actions, Events, Contexts, Observers, and Elements. The main app.rs file of their gpui crate illustrates this very well. It was really interesting to see the editor through the eyes of somebody with deeper knowledge.

UX, DX, career choices, and everything in between

Although a bit mindblown by the last chat with Kirill, I started working again on my OAuth issue. Shortly after this, somebody else joined the table. What started off as a basic "Hey, how's it going?" ended up becoming an hour long chat with Danilo Leal. For context, Danilo is one of the few designers who is a part of the 16 person team that is Zed. Coming from Material-UI, he shared with me his learnings about joining such a driven team of individuals focused on a systems language.

We joked around but ended up covering a bunch of interesting subjects. Such as:

  • How it feels to onboard into a tight knit team.
  • What aspects and capabilities of an IDE pull in adoption.
  • How ecosystems are built around tooling.
  • What friction points are most painful.

This conversation felt like I was collaborating with him to build a better future for Zed even though I was contributing absolutely nothing aside from dialogue. This made me realize that everybody I had talked to at the hackathon had a really strong passion for what they were doing, Danilo confirmed this with a smile.

Learning about some legends in the room

All throughout these little conversations and sessions, I was given glimpses into other folks that were in the room. I didn't realize this initially, but the person who came to ask Marshall some questions during our pairing was Nathan Sobo, one of the founders of Atom. The man talking at the table behind us, was Thorsten Ball, author of "Writing An Interpreter In Go". The individual who just walked by, this was Richard Feldman, the creator of the functional programming language Roc

I was amazed to realize that all these folks who I had only ever heard on podcasts, were a couple of meters away. It was impressive to see such a group of strong minds all focused and hacking away on a product they care about.

Closing thoughts

Here ends my experience with RustConf in 2024. Although I met some really cool people at the Zed Hackathon, I also got the chance to interact with a diverse set of folks during the conferences. From chats about automated drone lawnmowers with spinning blades of death to a 15 minute masterclass about dev shells with one of the maintainers from Flox, it was all incredibly enriching.

Hence, my parting words for this mini-series of posts:

Get out there, meet some folks, learn a thing!