Rust ist eine kompilierte, statisch typisierte Sprache ohne Laufzeitumgebung und ohne Garbage Collector. Die Ziele laut den Entwicklern: Sicherheit, Geschwindigkeit und Nebenläufigkeit (fearless concurrency).
Warum Rust?
| Problem in C/C++ | Lösung in Rust |
|---|---|
| Zeiger auf freigegebenen Speicher (use after free) | Der Compiler verhindert es durch Ownership und Lebensdauern |
| Pufferüberläufe | Indexzugriffe werden geprüft |
| Datenwettläufe bei Threads | Der Compiler lehnt sie ab |
null-Zeiger | Es gibt kein null, nur Option<T> |
| Ausnahmen, die man vergisst | Fehler sind Werte (Result<T, E>) |
Speicherlecks durch vergessenes free | Speicher wird automatisch freigegeben, wenn der Besitzer endet |
Das Ergebnis: Ein Programm, das übersetzt, ist frei von ganzen Fehlerklassen. Der Preis ist eine steile Lernkurve, weil der Compiler streng ist. Dafür sind die Fehlermeldungen berühmt gut.
Werkzeuge
| Werkzeug | Zweck |
|---|---|
rustup | Installation und Versionen |
rustc | Compiler |
cargo | Build-Werkzeug und Paketmanager |
crates.io | Paketverzeichnis ("Crates") |
clippy | Linter für besseren Code |
rustfmt | Formatierer |
rust-analyzer | Sprachserver für Editoren |
cargo new hallo # neues Projekt (Ordner mit Cargo.toml und src/main.rs)
cargo run # bauen und starten
cargo build --release # optimiert bauen
cargo test # Tests ausführen
cargo check # nur prüfen, schnell
cargo add serde # Abhängigkeit hinzufügen
cargo fmt, cargo clippy # formatieren, prüfenDein erstes Programm
fn main() {
println!("Hallo, Welt!");
}Ausgabe
Hallo, Welt!
fn main()ist der Einstiegspunktprintln!ist ein Makro (erkennbar am!), nicht eine Funktion- Anweisungen enden mit
;
Fehlermeldungen des Compilers
Rust-Fehlermeldungen erklären das Problem und schlagen oft die Lösung vor:
fn main() {
let x = 5;
x = 6;
println!("{x}");
}Fehlermeldung
error[E0384]: cannot assign twice to immutable variable `x`
Der Compiler zeigt die Zeile, erklärt "Variablen sind standardmäßig unveränderlich" und schlägt let mut x = 5; vor.
Wo wird Rust eingesetzt?
- Systeme: Teile von Linux, Windows, Android; Dateisysteme, Treiber
- Web: Server (Axum, Actix), WebAssembly im Browser
- Werkzeuge: ripgrep, fd, bat, Deno, Cargo selbst
- Infrastruktur: Cloudflare, AWS (Firecracker), Discord
- Eingebettete Systeme: Mikrocontroller ohne Betriebssystem
So führst du den Code aus: Rust über rustup.rs installieren. Dann cargo new hallo, in den Ordner wechseln und cargo run ausführen. Einzelne Datei: rustc main.rs && ./main.
Merke
- Rust = Geschwindigkeit wie C + Speichersicherheit durch Ownership, ohne Garbage Collector
- Es gibt kein
nullund keine Ausnahmen:OptionundResult cargobaut, testet und verwaltet Pakete;rustcist der Compiler- Variablen sind standardmäßig unveränderlich
- Die Compilermeldungen sind ein Lehrer