Wild Linker Update - 0.9.0
We’ve just released Wild version 0.9.0. It was a bit overdue, with our last release being back in January. It’s way too tempting to try to get just one more change in before the release, but you’ve got to cut it somewhere.
A blog about my open-source work, mostly in Rust. My interests are mostly around developer tooling, compilers, linking.
We’ve just released Wild version 0.9.0. It was a bit overdue, with our last release being back in January. It’s way too tempting to try to get just one more change in before the release, but you’ve got to cut it somewhere.
The Wild linker makes very extensive use of rayon for parallelism. Much of this parallelism is in the form of par_iter and friends. However, some parts of the linker don’t fit neatly because the amount of work isn’t known in advance. For example, the linker has two places where it explores a graph. When we start, we know some roots of that graph, but we don’t know all the nodes that we’ll need to…
Today, we’ve released Wild version 0.6.0. There were many changes and we were probably overdue for a release, having last released in May.
Last week I had the pleasure of attending RustForge in Wellington, New Zealand. I gave a talk titled “Wild performance tricks”. You can watch a recording of my talk. If you’d prefer to read rather than watch, the rest of this post will cover more or less the same material. The talk shows some linker benchmarks, which I’ll skip here and focus instead on the optimisations, which I think are the more…
Last week, I had the pleasure of having a conversation with Tim McNamara for an episode of his podcast, Compose. We talked about the Wild linker, linking in general, Rust coding styles, contributing to open source and a range of other topics.
Designing Wild’s incremental linking
In October, I attended the open source conference, GOSIM 2024 in China where I gave a talk about the Wild linker.
Bevy is a popular game engine for Rust. It’s pretty large and compilation times can be an issue. To help with this, Bevy provides an optional feature that when enabled, compiles most of Bevy as a dynamic library. This allows for faster iteration as you don’t need to relink all the Bevy internals each time you rebuild.
I’ve been writing a linker, called Wild (see previous posts). Today, I’m going to talk about my approach to testing the linker. I think this is an interesting case study in its own right, but also there’s aspects of the approach that can likely be applied to other projects.
I’ve been busy working on the Wild linker (see previous posts), but wanted to divert for a moment to look at some other compilation speed things that I’ve been thinking about. This post discusses various thoughts about moving Rust codegen, monomorphisation and inlining later in compilation and some of the ways this might reduce both from-scratch and incremental build times.