Warum Rust-Projekte so lange bauen – und wie sccache alles beschleunigt
Rust gilt als schnell. Extrem schnell sogar.
Warum also fühlt es sich beim ersten Build oft so an, als würde dein Laptop durch Beton rechnen?
Der Lüfter dreht hoch.
Der Compiler läuft minutenlang.
Und ein einfaches Projekt zieht plötzlich hunderte Abhängigkeiten.
Viele Entwickler stellen sich dann dieselbe Frage:
Ist Rust einfach langsam?
Die ehrliche Antwort lautet: Nein. Rust ist nicht langsam. Rust ist gründlich.
Und mit der richtigen Konfiguration kann Rust sogar überraschend schnell sein.
Der Schlüssel liegt im Verständnis, was beim Build passiert – und wie man unnötige Arbeit vermeidet.
Was beim ersten Rust-Build wirklich passiert
Wenn du ein Rust-Projekt baust, kompiliert Rust nicht nur dein eigenes Programm.
Es kompiliert auch jede einzelne Abhängigkeit.
Ein modernes Rust-Webprojekt, zum Beispiel mit Leptos oder WebAssembly, umfasst schnell:
- 200 bis 400 Crates
- tausende Quelldateien
- mehrere Millionen Zeilen Code
Und das Entscheidende:
Rust kompiliert alles in echten nativen Maschinencode.
Kein Interpreter.
Keine virtuelle Maschine.
Keine Abkürzungen.
Das Ergebnis ist extrem schnelle und stabile Software.
Der Preis ist ein längerer erster Build.
Warum Rust scheinbar dieselben Crates immer wieder neu kompiliert
Cargo, der Rust-Paketmanager, speichert heruntergeladene Crates global:
~/.cargo/registry
Aber die kompilierten Versionen landen standardmäßig nur im Projektordner:
project/target/
Das bedeutet:
Jedes neue Projekt beginnt praktisch von vorne.
Selbst wenn exakt dieselben Abhängigkeiten bereits auf deinem System existieren.
Dein Computer wiederholt Arbeit, die er eigentlich schon erledigt hat.
Hier setzen zwei einfache Lösungen an.
Lösung 1: Ein globales target-Verzeichnis
Du kannst Cargo anweisen, ein gemeinsames Build-Verzeichnis für alle Projekte zu verwenden.
Erstelle dazu die Cargo-Konfiguration:
nano ~/.cargo/config.toml
Inhalt:
target-dir = "/home/deinname/.cargo/target"
Ersetze deinname durch deinen tatsächlichen Benutzernamen.
Was das bewirkt
Jetzt greifen alle Rust-Projekte auf denselben Build-Cache zu.
Abhängigkeiten müssen nicht erneut kompiliert werden.
Das reduziert Buildzeiten drastisch.
Besonders bei großen Frameworks wie:
- Leptos
- Tokio
- Axum
- WebAssembly-Projekten
Der Effekt ist sofort spürbar.
Lösung 2: sccache – der Compiler-Cache
Der zweite, noch mächtigere Beschleuniger ist sccache.
sccache wurde ursprünglich von Mozilla entwickelt und fungiert als Cache für Compiler-Ergebnisse.
Installation:
Aktivierung:
Das war’s.
Ab jetzt merkt sich Rust bereits kompilierte Ergebnisse und verwendet sie wieder.
Warum sccache so effektiv ist
Normalerweise kompiliert Rust jede Abhängigkeit erneut, wenn sich etwas ändert.
sccache erkennt, wenn sich nichts geändert hat.
Und überspringt die Kompilierung vollständig.
Das spart enorme Zeit.
Typischer Unterschied:
Ohne sccache:
- erstes Projekt: 5 Minuten
- zweites Projekt: 5 Minuten
Mit sccache:
- erstes Projekt: 5 Minuten
- zweites Projekt: 10–30 Sekunden
Besonders wichtig für WebAssembly und moderne Webframeworks
Frameworks wie Leptos verwenden WebAssembly.
Das bedeutet, Rust kompiliert zusätzlich für den Target:
wasm32-unknown-unknown
Das ist eine komplett eigene Plattform.
Ohne Cache wird alles erneut gebaut.
Mit globalem target-Verzeichnis und sccache wird fast alles wiederverwendet.
Gerade auf Laptops ist der Unterschied enorm.
So prüfst du, ob sccache funktioniert
sccache --show-stats
Du solltest sehen:
- Cache hits
- Cache misses
- gespeicherte Ergebnisse
Mit der Zeit steigt die Trefferquote stark an.
Und Builds werden immer schneller.
Warum Rust diesen Weg geht
Rust optimiert nicht für den schnellsten ersten Build.
Rust optimiert für:
- maximale Stabilität
- reproduzierbare Builds
- vollständige Kontrolle über Abhängigkeiten
- native Performance
Rust löst Probleme zur Compile-Zeit, nicht zur Laufzeit.
Das macht Software zuverlässiger.
Fazit
Rust ist nicht langsam.
Rust ist präzise.
Die langen Buildzeiten entstehen hauptsächlich, weil Compiler-Ergebnisse standardmäßig nicht global wiederverwendet werden.
Mit zwei einfachen Maßnahmen lässt sich das Problem fast vollständig lösen:
Ein globales target-Verzeichnis:
nano ~/.cargo/config.toml
target-dir = "/home/deinname/.cargo/target"
Und sccache:
export RUSTC_WRAPPER=sccache
Danach fühlt sich Rust plötzlich schnell an.
Nicht, weil es weniger arbeitet.
Sondern weil es aufhört, dieselbe Arbeit zweimal zu tun.
Und genau das ist es, was gute Werkzeuge ausmacht.