10
0
Fork 0
rust-lesekreis/session-2025-03-14.md
2025-03-14 16:33:38 +01:00

1.9 KiB

2025-03-14

first steps

  • rustup: Tool für Rust Versionsmanagement
  • Compiler 'rustc' erzeugt Binary
  • Cargo: Rust Build System und Package Manager
  • 'Cargo.toml' ist die Projektkonfig mit Dependencies
  • Standard Build ist ein Debug build ('target/debug')
  • 'cargo check': Prüfen, ob Code compiliert, ohne zu Bauen.
  • 'cargo build --release': Bauen mit Optimierungen aber längerer Compilezeit ('target/release')

Guessing Game

  1. was ist ein prelude ?
  2. was ist ein trait im gegensatz zu einem module?
    1. trait = interface
  3. shadowing
  4. zumindest gibt es ein explizites let
  5. Schatten halten sich an blockgrenzen
  6. Deklarative Macros haben ein ! - Ersatz für Overloading
  7. assoziierte Funktion (String::new) == objektorientiert?
  • (Mit Typ) Assoziierte Funktion aufrufen mit ::. Bsp: let mut s = String::new()
  • wir sind mal gespannt, ob das auch über packagegrenzen hinweg geht
  1. behandlung v. integer-overflow fehlern wir nicht erzwungen - nur gewarnt ??
  2. Referenz mit &. Bsp: io::stdin().read_line(&mut guess) 1.. Referenzen sind standardmäßig immutable, daher hier &mut guess statt &guess
  3. Cargo Dependencies folgen semantischer Versionierung: 1.rand = "0.8.5" bedeutet ^0.8.5: mindestens 0.8.5 aber unter 0.9.0
  4. If-Expressions direkt für assignments verwenden :) 1.. auch loop

concepts

  1. Können in libs Keywords definiert werden? <--- äääh nein? :P
  2. 1_00 == 100
  3. snake_case_code_convention
  4. Destructuring durch Pattern Matching:
let (x, y, z) = tup;
println!("The value of y is: {y}");
  1. (): Tupel ohne Werte. Repräsentiert leeren Wert oder leeren Return Type.
  2. arrays sind 0 based
  3. if number { tut nicht, juhu :-) +1 :)
  4. if : Bedingung ohne Klammern
  5. Loop Rückgabewerte mit break: break 5;
  6. Tupel ist compound data tuple und kann auch von Funktionen zurück gegeben werden.
  7. Typinferenz