Show HN: Fleet – Experimental build tool for Rust that’s up to 5x faster
Fleet is an experimental fast, lightweight, open-source, build tool for Rust.
Builds with Fleet enabled are up-to 5x faster!
For a production repository (infinyon/fluvio) which we tested, we were able to cut down our incremental build times from 29 seconds down to 9 seconds, boosted by Fleet. We saw even better results on dimensionhq/volt, with our build times cut down from 3 minutes to just 1 minute - a 3x speed improvement!
How does fleet work?
Fleet works by optimizing your builds using existing tooling available in the Rust ecosystem, including seamlessly integrating sccache, lld, zld, ramdisks (for those using WSL or HDD's) et al.
You can get fleet at the official website.
Check out fleet over at https://github.com/dimensionhq/fleet and our website at https://fleet.rs
Looking forward to your feedback and thoughts!
27 comments
[ 0.27 ms ] story [ 83.3 ms ] threadI wonder if in the future some service might even offer prebuilt crates for the various architectures. I think that idea was brought up at some point.
A recent solution was to precompile these binaries. It's great.
[0] https://github.com/rusterlium/rustler [1] https://dashbit.co/blog/rustler-precompiled
Does it do anything else besides using sccache and lld/zld? I'd expect so, since these tools don't require rust nightly, whereas fleet does.
---
Edit:
After a quick look over the code, it also sets codegen units to 256, but doesn't seem to do anything else.
I see the same improvements adding manually sccache and mold to ~/.cargo/config.toml when building volt, without touching the repo's Cargo.toml.
standard rust config: 1m20s
sccache + mold: 30s
I ran the tests with Rust 1.60.0, on Linux, on an AMD 5850U (6 core, mobile).
Also great question about using nightly, we're using a shared-generics flag that requires nightly (and speeds up build times).
We're working on making this more configurable to enable / disable what features you want.
Yeah, I skipped over this, considering that most people doing rust dev will likely have some kind of SSD.
I didn't look into how you went about doing this, but one thing that I'd like is to be able to move the target/ directory on a ram disk, or, generally, out of the source root [0]. If Fleet were able to do this transparently, it would be really great.
---
[0] I know it's possible to define an external directory, but it applies to all projects, and it's not what I want, because shared crates would go overwrite each other.
The reason I'm asking is that I use the IntelliJ plugin for Rust dev which is kind of clunky and only understands a few commands as being "build", so it doesn't show the build window.
Our go-to linker was actually mold until we realized that their license is not compatible with ours.
We also use shared-generics to try to speed up builds, along with the ramdisk that I previously mentioned.
sccache: https://github.com/mozilla/sccache#usage
mold: https://github.com/rui314/mold#how-to-use
My own cargo.toml:
Not sure your maths are correct here.
My primate pattern-matching brain says this is functionality-poor compared to its alternatives, or the alternatives it compares to are poor examples.
https://fleet.rs/docs/commands/build