Auch heute geht es mit Rost und Kaffee weiter, allerdings mit grundsätzlicheren Datentypen. ttimeless wird von besonders winzigen Datentypen überrascht und Xyrill formuliert Gedanken darüber, warum Struktur das Handeln bestimmen sollte.
Länge: 48:57 Minuten
Rückbezug STP071: anhand von JSON haben wir die sichtbaren Datentypen besprochen
Einwurf Kombinatorik: Wieviele mögliche Werte haben die vorgenannten Typen (sofern nicht unendlich)? (wir schreiben K(T) für die Kardinalität des Typs T)
K(bool) = 2 (true oder false)K(T_N) = 2^N Werte für Zahltypen mit N Bits (z.B. 256 für i8 oder 65536 für u16), weil jedes Bit zwei Werte hat, die unabhängig voneinander gewählt werden könnenK([T; N]) = K(T)^N für K(T) mögliche Werte des Elementtyps T und Länge NK(Vec<T>) = ∞ bis auf praktische PlatzbeschränkungenListen wirken sich auf die Kardinalität also wie eine Potenzierung aus
Produkttypen: Gesamttyp P enthält je einen Wert von Typ T_1, T_2, ..., T_N, somit K(P) = K(T_1) * K(T_2) * ... * K(T_N)
type Vector3D = (f64, f64, f64), oder als Strukturtypen (ungeordnete Menge von Werten, die mit Namen bezeichnet sind, z.B. struct Person { first_name: String, last_name: String })Summentypen: Gesamttyp S enthält entweder einen Wert vom Typ T_1 oder T_2 oder ... oder T_N, somit K(P) = K(T_1) + K(T_2) + ... + K(T_N)
enum ParseResult { Ok(DataStructure), Err(ParseError) }{"Ok": ...})sehr kleine Spezialfälle: Gibt es Datentypen, die kleiner als bool sind?
struct Empty {}): nur ein möglicher Wert (1 ist das neutrale Element der Multiplikation)
null serialisierenenum Option<T> { Some(T), None } vor; None ist hier im Prinzip eine Kurzschreibweise für None(Empty)enum Impossible {}): keine möglichen Werte (0 ist das neutrale Element der Addition)
quit())Abendgedanken: Warum das ganze Gerede über Datentypen?