For a couple years now the main compute in my homelab rack has been served by an EPYC 7642-based server. It has been responsible every single task I have for short- and long-running compute at home: home automation utilities, media center, network-attached storage with a relatively fault-tolerant disk setup, a build server… and most notably for the topic at hand the…
Sometime last year I found myself needing to spend all of the fake Amazon money that I keep receiving with every business trip. With doggo’s fur shedding season right around the corner, a vacuum robot definitely seemed like an appropriate way to consume at the time. But wait… there’s a snag! Well built vacuums at a reasonable price point all happen to be China Export…
For the past six months or so I have been working on finite-wasm , a project aimed at enforcing deterministic resource limits (in time and space) in a runtime agnostic and Easy to Reason About way. This project produces a specification (or rather additions to the WebAssembly specification ) detailing how these limits should be enforced and analyses implementing the…
My computers are setup in a way that most would consider awkward. Inspired somewhat by the idea of a large mainframe with thin terminals accessing it, the most (and only) capable computer I own is a headless home server. This server is responsible for compiling all the code I work on, running all of the services I depend on (wireguard, dns, etc.) and storing the all of my…
I have been thinking about ways to optimize a workload that utilizes a WebAssembly runtime with JIT code generation capabilities a lot recently. This runtime implementation utilizes a fairly typical construction for a JIT-based engine, however the workload utilizes the runtime in somewhat an unusual manner. Every time some function within a module is invoked, it…
Error handling story in Rust is still in flux, with people figuring out their preferred ways to get errors handled and propagated. At Standard we’ve been implementing custom error types 1 almost exclusively, for both binary and library crates, to great effect. As I’ve seen many people struggle to apply a similar pattern to their own code, I’m taking an opportunity to add…
This is my response to the call for blog posts on what Rust development focus ought to be during 2020. Much unlike my extremely late post for 2019 , which focused entirely on compiler implementation details, the focus is on things that affect the end user experience, specifically the experience past the initial rose-coloured glasses phase of adoption. Figure out…
It has been more than 3 years now since the MIR initiative has been accepted . Just a year after it has been enabled by default to all the users of nightly Rust. Even then, it was fairly clear that MIR is well positioned to enable optimisations that would, in many instances, result in significantly faster compilation. “This would be achieved by optimising the generic code”,…
A few days ago, a pull request to stabilise one of my favourite library functions, [T]::align_to has landed. Since the function, to the best of my knowledge, has no counterparts in other languages 1 , I really wanted to detail what it took to make this function possible. [T]::align_to describes itself as such: pub unsafe fn align_to<U>(&self) -> (&[T], &[U], &[T]) Transmute the…
This is a transcript of a talk I gave at the Vilnius Rust meetup. You can download slides here or simply follow along. Note that content on this page will get out-of-date fairly quickly (within months), so check the date above. It would not be an exaggeration to say that embedded is omnipresent. You can find embedded firmware everywhere from fridges, microwaves and personal…