Quiz

Fragen

  • Was ist der Zweck generischer Typen?
  • Was ist ein Trait?
  • Welche Traits der Rust Standardbibliothek kennst du? Liste 3 von ihnen auf und beschreibe ihren Zweck.
  • Beschreibe ein Beispiel wie sich mit Hilfe generischer Typen und Traits modularer Code schreiben lässt.
  • Welches sehr simple alternative modulare Programmiermittel haben wir bereits im Grundlagenkapitel kennen gelernt?
  • Was ist der Unterschied zwischen dem ersten Parameter von
    #![allow(unused)]
    fn main() {
    fn some_higher_order_fn<T>(f: fn(T) -> T);
    }
    und
    #![allow(unused)]
    fn main() {
    fn some_higher_order_fn<T, F: Fn(T) -> T>(f: F);
    }
  • Welche 3 Closure-Traits gibt es und was unterscheidet sie?
  • Was wird mit dem Billion-Dollar-Mistake bezeichnet und wie wird es in Rust verhindert?
  • Welche Arten der Fehlerbehandlung gibt es in Rust?
  • Was ist ein Iterator?
  • Nenne 3 Methoden die einen Iterator in einen anderen Iterator transformieren und beschreibe ihren Zweck.
  • Welchen nicht generischen Containertypen kennst du?
  • Welche der folgenden Typen kann man als Key einer HashMap verwenden?
    1. String
    2. &str
    3. [usize; 3]
    4. &[usize]
    5. Vec<usize>
    6. &[f32]
    7. Vec<f32>

Aufgabe

Schreibe einen Containertypen VecMap, der ähnlich wie eine HashMap die Methoden

  • get,
  • get_mut,
  • insert und
  • remove

und die Traits

  • Index und
  • IntoIter

implementiert.

  • IndexMut

kann gerne zusätzlich implementiert werden. Intern besteht der Container aus einem Vec<(K, V)>. Die Suche nach einem Key ist eine lineare Suche über den Vec. Vergleiche Zeiten verschiedene Zugriffs-, Lese-, und Schreibesituationen mit denen einer HashMap. Führe die Vergleiche für unterschiedlich viele Elemente durch. Eine einfache Möglichkeit dazu bietet std::time::Instant.