Last week
- Andrew Kelley famously (or infamously, depending on your views) said "the compiler is too damn slow, that's why we have bugs."1
Two weeks ago
- Been quiet around here! I’ve been putting almost all of my writing time into Logic for Programmers and my whole brain is book-shaped. Trust me, you do not want to read my 2000-word rant on Sphinx post-build LaTeX customization. But I spent the past week in a historical rabbit...
- Exploring the trend of rewriting existing software in new programming languages, this article delves into the balance between innovation and practicality in software development....
about 2 months ago
- I’ve been on the lookout for a scripting language which can be neatly embedded into Hare programs. Perhaps the obvious candidate is Lua – but I’m not particularly enthusiastic about it. When I was evaluating the landscape of tools which are “like Lua, but not Lua”, I found an...
- Typechecker Zoo As a fun side project, I've built four literate Rust implementations spanning 50 years of type theory research, from Milner's Algorithm W to modern dependent type systems. I've tried to make each implementation as readable and understandable as possible, with...
2 months ago
- Increasing performance by reducing thread scheduling overhead and lock contention....
3 months ago
- Reimplementing JavaScript code in Rust is often straightforward. However, some things, like nested closures, are not as easy to translate directly. Or are they?
- Fast Tensor Canonicalization in Rust I recently had a need to do fast tensor canonicalization, but the library ecosystem for this was lacking. In physics and differential geometry, manipulating tensors and especially bringing them into canonical form under their index symmetries...
5 months ago
- Previously it was mentioned that Python and C++ do iteration quite differently. Python has "statefull" objects that have a .next() method that returns a new object or throws a StopIteration exception. Incidentally Rust does exactly the same thing, except that it uses an optional...
- While performing some routine maintenance of my Ubuntu server, $ docker compose pull $ docker compose up -d I ran into an interesting situation where nginx-proxy-manager failed to serve my blog properly, I wasn't sure what the issue was but these types of issues are usually...
7 months ago
- Maud, Axum, SQLx, and HTMX make for a snappy UX and pleasant DX....
- Here’s the recording of my presentation about Scour at the Rust NYC Meetup (link). The presentation goes through the motivation for Scour and aspects of the architecture that make it fast. Slides: You can read more about some of the topics mentioned in the presentation here:...
8 months ago
- If you use async Rust and Tokio, you are likely to run into some variant of the "future is not Send" compiler error. While transitioning some sequential async code to use streams, a friend suggested a small technique for pinning down the source of the non-Send errors. It helped...
9 months ago
- Applications that run documents through LLMs or embedding models need to clean the text before feeding it into the model. I'm building a personalized content feed called Scour and was looking for a Rust crate to extract text from scraped HTML. I started off using a library...
- As a C# developer, you might wonder why you should invest time learning Rust, a systems programming language. After all, C# is a powerful, versatile, and high-level language with a vast ecosystem and a wide range of applications. However, learning Rust can expand your...
10 months ago
- This year I’m not next to the Christmas tree surrounded by reindeers and blinking lights, but I’m in sunny Carvoeiro on the south coast of Portugal with my family, relaxing and reflecting on the past year. To keep an annual tradition, I would like to share with you some of the...
- If you're developing an application and find yourself running a benchmark whose results are measured in nanoseconds... you should probably stop and get back to more important tasks. But here we are. I'm using binary vector embeddings to build Scour, a service that scours noisy...
11 months ago
- Before we start, have a look at this image. It is from a German book from the early Nineties, and it features some very interesting cover artwork. A knight with a cape and a big bushy mustache rides a friendly green dragon. A castle, a dolphin, and some animals are in the...
- tokio::join! lets you run multiple futures concurrently, and returns the output of all of them. For JavaScript developers: Promise.all is a good equivalent....
- This is a long section. Here are some anchors to jump to the respective part:...
- Let’s get started with our first Tokio app. Create a new project using Cargo and add the tokio dependency either to your Cargo.toml file or directly on the command line....
- This guide is a collection of articles and exercises covering how to write network applications with Tokio. Its base is a workshop I gave over the last few years called “Network Applications using Tokio.” The slides are available in the respective section....
12 months ago
- When it comes to designing software, the SOLID principles are the gold standard for object-oriented programming. While Rust isn’t an object-oriented language in the strictest sense, it offers plenty of tools to apply SOLID principles effectively. With enums, traits, and strict...
about 1 year ago
- I recently released papaya, a fast and feature-complete concurrent hash table for Rust. In this post I want to dive into the design and research that went into creating it, as well as why you might consider using it over existing solutions. If you're looking for an overview of...
Rows per page