Blocking code is a leaky abstraction
Asynchronous code does not require the rest of your code to be asynchronous. I can’t say the same for blocking code.
Asynchronous code does not require the rest of your code to be asynchronous. I can’t say the same for blocking code.
Systems engineering, Rust development, and Unix infrastructure by Till Wegmüller (@toasterson)
NSCopyObject is a very old Foundation function – pre-dating Mac OS X entirely; from the NeXT era – that was originally basically just memcpy , but now it’s complicated. A lot more complicated.
A shiny new edition of Hypermedia Systems is out! Apart from incorporating typo and grammar fixes sent in by readers, the book was completely redesigned inside with a new layout. To achieve a much higher fidelity of design, we ported the book to Typst --- the hot new LaTeX replacement.
In many large-scale web services, multiple layers of stateless and stateful services are seperated by load balancers. Load balancing can be done with dedicated hardware, with dedicated software load balancers, using DNS trickery or through a load-balancing mechanism in the client. In large systems, the resources and…
[update December 2021: files for 86Box install at update December 2020: Dell Unix on 86Box “Today let me present Dell Unix more properly, with 1024×768, 256 colors video and proper networking…
Programmable NVIDIA GPUs are very inspiring to hardware geeks, proving that processors with an original, incompatible programming model can become widely used.
The .NET team has been working on a new experiment called async2, which is a new implementation of the async/await pattern that is designed to be more efficient and more flexible than the current implementation. It started with green threads and ended with an experiment that moves async and await to the runtime. This…
For over a year, I’ve been investigating a strange issue with the internet in my apartment. I’m posting the details here in case someone more knowledgeable than me can solve the mystery. I live in graduate student housing with internet provided by the university campus. Usually things work reasonably well, with one…
So zero-cost abstractions exist?
One of the great strengths of strace as a debugging tool is that it shows you what a program is doing regardless of whether it was compiled with debug info or not. The downside of this is that you …
Coding in Rust and others; making coding videos.
How do you solve a memory heisenbug?
Brewer’s CAP theorem, and Gilbert and Lynch’s formalization of it , is the first introduction to hard trade-offs for many distributed systems engineers. Going by the vast amounts of ink and bile spent on the topic, it is not unreasonable for new folks to conclude that it’s an important, foundational, idea.
Narrow waists: an idea in software architecture that relates to networking, operating systems, language design, compilers, and distributed systems.
Challenging your software modelling techniques to be simpler
The code is a bit "experimental" but it's available in the arena-fixes branch (make sure to enable --features=development if you run it from a Git repo).
M3 chips widen the gap between Pro and Max variants. They also change relative performance between P and E cores to make M3 CPUs more versatile.
Then come along! Let’s make a compiler that goes all the way from source to assembly from scratch—no shortcuts!
Let's talk about why Snapshot Isolation is not enough for a general purpose concurrency control. Snapshot Isolation has been adap...
This is the Part 2 of a series. Feel free to read the prequel for more context: Building the fastest Lua interpreter automatically Building a good VM for a dynamic language takes a ton of engineerin
Between our ESP32 prokaryotic organisms and our 24/7 Internet-enabled megafauna servers, there exists a vast and loosely-defined ecosystem of things the B2B world likes to call computer appliances. Picture a bespoke Pi 4 packaged up neatly with some Python scripts, a little fancy plastic embossing, and maybe a…
A Rust object that survives program restart thanks to Rust allocators, systemd's file descriptor store, and syscall memfd_create.
“Print the sum of 50 million ASCII-encoded integers uniformly sampled from [0, 2³¹−1], separated by a single new line and sent to standard input.”
I often need to launch a program in the terminal in a retry loop. Maybe because it's flaky, or because it tries to contact a remote service that is not available. A few scenarios: