RustConf 2024 talk: Building a programming language for CAD

Recently I gave my first-ever in-person conference presentation! I was invited to RustConf 2024 where I talked about why we're building KCL (KittyCAD language), a programming language for 3D design, at Zoo.dev. The talk has three parts: background about computer-aided design (CAD … | Continue reading


@blog.adamchalmers.com | 3 days ago

EuroRust 2024 talk: Code as contract as code

A few months ago I was invited to EuroRust to talk about API servers and clients. When I worked at Cloudflare, I maintained a few API servers and the official Cloudflare Rust API client. There was a lot of toil and stress involved whenever the API servers changed: schemae had to … | Continue reading


@blog.adamchalmers.com | 3 days ago

My Developer Voices interview

Kris Jenkins of Developer Voices spoke to me on his podcast! We talked about KittyCAD and its language, which I'm building for my work at Zoo. You can listen to it wherever you get your podcasts, or watch it on YouTube. Thanks so much for having me on your podcast, Kris! Develope … | Continue reading


@blog.adamchalmers.com | 2 months ago

I'm speaking at RustConf 2024!

I'll be at RustConf 2024, speaking about KCL, the 3D manufacturing language we're building at Zoo.dev! I'm really excited to present, and to meet a lot of other Rustaceans. If you're going to be in Montreal, send me a message or email (contact details here) and let's make sure we … | Continue reading


@blog.adamchalmers.com | 4 months ago

My Kitty terminal config

I've been using Kitty terminal for five years now, and I'm really happy with it. Recently I got curious about how to make it look prettier (inspired by all the beautiful terminals I see in some programmer subreddits). So, keep reading for a little explanation of my Kitty config f … | Continue reading


@blog.adamchalmers.com | 7 months ago

Video: My VM and its time-travelling debugger

My work at Zoo has recently focused on KCL, our CAD programming language. Currently our modeling app uses a tree-walk interpreter, but for various reasons we've been exploring a proper compiler instead. I've been developing the compiler, called Grackle. It compiles to a bytecode … | Continue reading


@blog.adamchalmers.com | 9 months ago

Free users are incredible

Cloudflare has a really generous free tier, and it gets a lot of free users. I often see comments on Hacker News saying "Cloudflare must be doing something shady, so many people use it for free, and if you're not the customer, then you're the product". This is mostly wrong -- Clo … | Continue reading


@blog.adamchalmers.com | 1 year ago

2023 reflections

Thinking about the things I liked and some really fun career changes from the last 12 months. Books read Since moving to the USA in 2017, I've logged every book I read on my Goodreads. Fiction Foundation (Isaac Asimov) If This Book Exists, You're In The Wrong Universe (Jason Parg … | Continue reading


@blog.adamchalmers.com | 1 year ago

Video: Error handling

The fourth Rust Club video is up! Every Monday I teach Rust to my coworkers at zoo.dev on video chat. We record the call and put it on YouTube so you can learn too. This week's video is about different ways to handle errors in Rust -- when should you panic and when should you ret … | Continue reading


@blog.adamchalmers.com | 1 year ago

Video: Analyzing performance

KittyCAD's third Rust Club video is up! We analyze how fast the demo parser from my [first video][/winnow-basics] is, and find ways to speed it up. We use benchmarks to measure its speed, and flamegraphs to visualize its runtime, to find places we can improve. Apologies for the l … | Continue reading


@blog.adamchalmers.com | 1 year ago

Investigating crazy compile times

I hate long compiles. I spend hours of my time trying to reduce minutes of compile-time. I recently noticed that the KittyCAD Rust API client was taking an incredibly long time to compile in release mode. Weirdly, the compile time in debug mode was totally fine. I managed to shri … | Continue reading


@blog.adamchalmers.com | 1 year ago

Video: Parsing a programming language

KittyCAD's second Rust Club video is up! My [first video][/winnow-basics] covered the Winnow library for parsing text. Today's video shows you a real-world parser example. I'm working on the KittyCAD language (KCL) for designing CAD models, and this reviews the tokenizer and pars … | Continue reading


@blog.adamchalmers.com | 1 year ago

Interviewed at Filtra.io

I had a great time talking to Drew of filtra.io! We talked what KittyCAD does and why we're all-in on Rust. We also get into my past at Cloudflare and why there's so much Rust there. Check out the piece here. | Continue reading


@blog.adamchalmers.com | 1 year ago

Video: Parsing text with Winnow

I work at KittyCAD, and every Monday I teach Rust to my coworkers for an hour. We always record them, so that over time we build up an archive of Rust learning videos. Recently I realized we should put some of them on the internet, because other programmers outside KittyCAD might … | Continue reading


@blog.adamchalmers.com | 1 year ago

Video: My P99Conf talk on Rust backends

I had a great time presenting at P99Conf! I watch their talks every year and I always learn a lot. I was really thrilled to present a talk at this year's conference. It's heavily based on my blog post Why use Rust on the backend?. If you missed the talk, you can watch the recordi … | Continue reading


@blog.adamchalmers.com | 1 year ago

Rustconf 2023 recap

I got back from Rustconf 2023 last week, and I had a great time! I thought I'd write up my impressions of the conference, for anyone curious about what it's actually like. Talks There were a lot of really interesting talks! You'll be able to watch them all online soon. Some of my … | Continue reading


@blog.adamchalmers.com | 1 year ago

I'm at Rustconf 2023

Hi! Just a quick note to say that I'm going to Rustconf this year. If you're going too, let me know (see the about page for contact details) and I'd love to say hi. I'm always down to meet new people, so consider this an open invitation to anyone at Rustconf. | Continue reading


@blog.adamchalmers.com | 1 year ago

Missed opportunities for git aliases

I don't pair program very often, but sometimes when you're stuck on a really annoying problem, it can be helpful to have a coworker looking over your shoulder. My new job is fully-remote, so we occasionally screenshare when someone's stuck. One of my favourite things about pair p … | Continue reading


@blog.adamchalmers.com | 1 year ago

Introduction to HTTP Multipart

Multipart, or "form-encoded data", is something I see everywhere but never had to actually understand or use myself, because HTTP libraries handled it for me. Recently, though, I had to dive deeper into how multipart works, because it's pretty important at both Cloudflare and my … | Continue reading


@blog.adamchalmers.com | 1 year ago

Why use Rust on the backend?

I read and liked Andrew Israel's I love building a startup in Rust. I wouldn't pick it again. It makes a lot of sense! He basically says that his startup prioritizes developer productivity over performance. Sensible choice for a start-up founder to make. If Rust is going to slow … | Continue reading


@blog.adamchalmers.com | 1 year ago

I'm on Rustacean Station

Hi all! Allen Wyma of Rustacean Station had me on the podcast to talk about Rust at Cloudflare. We cover why and how Cloudflare started using Rust, how my team specifically works with Rust, and how Cloudflare works. We also go on a big tangent about social security numbers. Give … | Continue reading


@blog.adamchalmers.com | 1 year ago

Signals vs. Servers

Say you're running a long-lived program, like a server. Let's say the server needs to read some files from disk, like certificates or keys. Every so often, the certificates change, so your server has to reload them. How do you tell the server to reload those files? The traditiona … | Continue reading


@blog.adamchalmers.com | 1 year ago

2022 reflections

Reflecting on the things I liked in 2022. I started writing this in December 2022 and completely forgot to finish it until February next year. Favourite things in 2022 Favourite genre This was my personal year of historical fiction. History was my favourite subject in school, but … | Continue reading


@blog.adamchalmers.com | 1 year ago

Illegal satire about Rust

In case you didn't hear, comedy is now legal on Twitter but accounts engaged in parody must include “parody” in their name, not just in bio. Of course, this only made everyone double down. So yesterday, I changed my name to Rust Language and started posting misinformation. The la … | Continue reading


@blog.adamchalmers.com | 2 years ago

Static streams for faster async proxies

Last week in Tokio's Discord chat server someone asked a really interesting question: how can you stream a multipart body from an incoming request into an outgoing request? My struggle to answer this really helped me understand Rust async lifetimes. We'll explore why this is tric … | Continue reading


@blog.adamchalmers.com | 2 years ago

What are Rust's HTTP extensions?

I learned about extensions when reading the hyper docs. But they also pop up in lots of other Rust web libraries, like http, tonic, and actix-web. So they must be really useful, if so many libraries offer them. But I personally had no idea what they were or how to use them. Today … | Continue reading


@blog.adamchalmers.com | 2 years ago

What I learned from making a DNS client in Rust

A lot about sockets, syscalls and bits | Continue reading


@blog.adamchalmers.com | 2 years ago

Parsing DNS headers with Nom

In the last blog post, we learned how to parse binary, bit-by-bit with Nom. I really wanted to give a real-world example of binary protocols, so here's one from Dingo, a basic DNS client I made. Anatomy of a DNS header DNS clients (like dig or Dingo) and DNS servers both use the … | Continue reading


@blog.adamchalmers.com | 2 years ago

Parsing Bitstreams with Rust and Nom

How to use Nom to parse binary protocols at the level of individual bits | Continue reading


@blog.adamchalmers.com | 2 years ago

Parsing Text with Nom

"Parsing" is turning a stream of raw text or binary into some structured data types, i.e. a Rust type that your code can understand and use. This isn't the textbook definition of parsing, but damnit, this is my blog and my opinion. This tutorial is about nom, my favourite Rust pa … | Continue reading


@blog.adamchalmers.com | 3 years ago

Pin, Unpin, and why Rust needs them

Continue reading


@blog.adamchalmers.com | 3 years ago

Grids in Rust, part 2: const generics

Continue reading


@blog.adamchalmers.com | 3 years ago

Grids in Rust, part 1: nested vs. flat Vecs

While making a raytracer in Rust, I needed an efficient way to store the pixels of a 2D image. In this post, we'll compare two different implementations of a 2D grid datatype, dipping our toes into data parallelism with Rayon and benchmarking with Criterion. Oh, and all the code … | Continue reading


@blog.adamchalmers.com | 3 years ago