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
und#![allow(unused)] fn main() { fn some_higher_order_fn<T>(f: fn(T) -> T); }
#![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?
String
&str
[usize; 3]
&[usize]
Vec<usize>
&[f32]
Vec<f32>
Aufgabe
Schreibe einen Containertypen VecMap
, der ähnlich wie eine HashMap
die Methoden
get
,get_mut
,insert
undremove
und die Traits
Index
undIntoIter
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
.