Typen Typ Beispiele Ganzzahlen i8 i16 i32 i64 i128 isize, u8 u16 u32 u64 u128 usizeGleitkomma f32, f64Sonstige bool, char, () (Unit)Text String (besitzt), &str (geliehen)Zusammengesetzt Tupel (i32, f64), Array [i32; 3], Slice &[i32] Standard Vec<T>, HashMap<K,V>, Option<T>, Result<T,E>, Box<T>
Besitz und Referenzen Syntax Bedeutung let a = b;Besitz zieht um (bei Nicht-Copy-Typen) b.clone()tiefe Kopie &xgeliehene Referenz (nur lesen), beliebig viele &mut xveränderbare Referenz, nur eine zur selben Zeit 'aLifetime-Parameter *rDereferenzieren
Kontrollfluss Beispiel · text Kopieren if x > 0 { ... } else if x == 0 { ... } else { ... }
let w = if a { 1 } else { 2 };
match wert { 1 => ..., 2 | 3 => ..., 4..=9 => ..., n if n < 0 => ..., _ => ... }
if let Some(x) = opt { ... }
let Some(x) = opt else { return };
while bedingung { ... }
loop { ... break wert; }
for i in 0..10 { ... } // 0..=10 inklusiveFunktionen, Structs, Enums, Traits Beispiel · text Kopieren fn name(a: i32, b: &str) -> i32 { a }
struct Punkt { x: f64, y: f64 }
impl Punkt { fn neu() -> Self {..} fn laenge(&self) -> f64 {..} }
enum Form { Kreis(f64), Rechteck { b: f64, h: f64 }, Leer }
trait Tier { fn laut(&self) -> String; }
impl Tier for Hund { ... }
fn f<T: Display + Clone>(x: T) where T: Debug {..}
fn g(x: &impl Tier) {..}
Box<dyn Tier>Fehler Muster Bedeutung Option<T>: Some(x)/NoneWert optional Result<T, E>: Ok(x)/Err(e)Erfolg oder Fehler x?Fehler nach oben weitergeben .unwrap() / .expect("msg")Panic bei Fehler (nur Tests, Prototypen) .unwrap_or(d), .unwrap_or_else(f)Ersatzwert .map(f), .and_then(f), .ok_or(e)Verketten und Umwandeln
Wichtige Makros Makro Zweck println!, print!, eprintln!Ausgabe format!String bauen vec![]Vec erzeugen assert!, assert_eq!Prüfungen panic!, todo!, unreachable!Abbrechen / Platzhalter dbg!Debug-Ausgabe mit Position matches!Muster als bool prüfen
Platzhalter Ausgabe {} / {:?} / {:#?}Display / Debug / hübsches Debug {:>8} / {:<8} / {:^8}rechts / links / zentriert {:08.3}Breite 8, 3 Nachkommastellen, mit Nullen {:x} / {:b} / {:e}hex / binär / wissenschaftlich {name} / {0}benannt / positional
Standard-Traits Debug, Display, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default, From, Into, Iterator, Drop, Add, Deref, AsRef, Send, Sync.
Cargo-Befehle cargo new, run, build [--release], check, test, fmt, clippy, add, doc --open, update, publish.
Häufige Compilerfehler Fehler Ursache / Lösung E0382 borrow of moved value Wert wurde verschoben: clone() oder leihen E0499 two mutable borrows zwei &mut gleichzeitig: Gültigkeit verkürzen E0502 mutable and immutable borrow lesen und schreiben gleichzeitig: trennen E0308 mismatched types Typ passt nicht: Umwandlung mit as, into, parse E0106 missing lifetime specifier Lifetime benennen E0596 cannot borrow as mutable mut fehlt
Weiterlernen The Rust Programming Language ("das Buch") auf doc.rust-lang.org/bookRust by Example und Rustlings (Übungen)Rust Playground (play.rust-lang.org) zum Ausprobieren