Die primitiven Datentypen sind das Fundament jeder Rust-Funktion: Integer, Floats, bool, char, Tupel, Arrays und Slices. Im Vergleich zu C oder Java geht Rust hier strenger und gleichzeitig flexibler vor — strenger bei impliziten Konvertierungen (die es schlicht nicht gibt), flexibler bei Bitbreiten (zehn Integer-Familien statt drei), und mit zwei besonderen Typen, die in den meisten Sprachen fehlen: dem Unit-Type () und dem Never-Type !. Dieses Kapitel zeigt jeden primitiven Typ einzeln, ordnet Speicherverhalten und Methoden ein und legt das Fundament für alles, was später in Collections, Generics und Traits aufbaut.
Was Rust zu „primitiv" zählt
Streng genommen ist nichts in Rust eine „eingebaute" Klasse — alle Typen sind Werte mit Methoden, die in Crates oder der Standard-Library leben. Was man unter primitive Typen versteht, sind die Typen mit speziellem Compiler-Support und Literal-Syntax:
- Integer-Typen —
i8,i16,i32,i64,i128,isize,u8,u16,u32,u64,u128,usize. Zehn Familien, die explizit zwischen Vorzeichen-behaftet (i) und vorzeichenlos (u) sowie zwischen festgelegten Bitbreiten und plattformabhängigen (size) unterscheiden. - Float-Typen —
f32undf64, beide nach IEEE 754. Default istf64. - bool —
trueundfalse. Strikt: kein automatisches Casting zu Integer. - char — ein 4-Byte Unicode-Scalar-Value. Nicht zu verwechseln mit C-
char(1 Byte) oder einem UTF-8-Byte in einem String. - Tupel — heterogene Sequenzen mit fester Länge, z. B.
(i32, f64, &str). - Arrays — homogene Sequenzen mit zur Compile-Zeit bekannter Länge, z. B.
[u8; 32]. - Slices — Views in zusammenhängenden Speicher:
&[T]und&mut [T]. Streng genommen kein eigener Typ pro Wert, sondern ein Referenz-Typ. - Unit
()und Never!— die zwei „Sonder"-Typen, die in vielen Sprachen unbenannt vorkommen, in Rust aber sichtbar sind.
Artikel in diesem Kapitel
- Integer-Typen — die zehn Integer-Familien, Default-Inferenz, Suffixe, Hex/Oct/Bin-Literale, Overflow-Verhalten in Debug vs. Release, sichere Arithmetik mit
checked_*/wrapping_*/saturating_*-Methoden. - Float-Typen —
f32undf64nach IEEE 754, NaN/Infinity, warum es nurPartialOrdist, klassische Präzisions-Fallen und sichere Vergleichs-Patterns. - bool — wirklich nur zwei Werte, kein Truthy/Falsy, hilfreiche Methoden wie
thenundthen_some, sicheres Casten zwischenboolund Integer. - char — der 4-Byte-Unicode-Scalar, Iteration über
String::chars(), Escape-Sequenzen, der Unterschied zu UTF-8-Bytes. - Tuple — heterogene Bündel mit Feldzugriff per
.0, Destrukturierung, der Spezialfall Unit()und der Vergleich zu Tuple-Structs. - Array —
[T; N]als Stack-allokierte Sequenz mit fester Länge, Initialisierungs-Patterns, Out-of-Bounds-Panic und die Abgrenzung zuVecund Slice. - Slice —
&[T]und&mut [T]als „Fat Pointer" über Daten plus Länge, die wichtigsten Slice-Methoden und ein Ausblick auf&strals String-Slice-Variante. - Unit und Never — das leere Tupel
()als „kein Wert" und der Never-Type!für divergierende Pfade (panic, return, loop). - Numeric Conversions —
asmit allen Fallen,From/Intofür verlustfreie Konvertierungen,TryFrom/TryIntofür fallible Fälle.
Was du nach diesem Kapitel kannst
- Die passende Integer-Familie für eine Aufgabe wählen (Compile-Zeit-Bitbreite vs. plattformabhängig, signed vs. unsigned).
- Float-Vergleiche sicher schreiben — ohne im NaN-Loch zu landen.
charkorrekt vom UTF-8-Byte unterscheiden und Strings über Code-Points iterieren.- Tupel und Arrays als leichtgewichtige Werte einsetzen und ihre Grenzen kennen.
- Slices verstehen — Vorbereitung auf alles, was später in Iteratoren und Collections kommt.
as-Casts vermeiden, woFrom/Intoausreichen, undTryFromfür fehleranfällige Konvertierungen nutzen.
Im nächsten Kapitel geht es um Strings und Text — str, String, UTF-8-Iteration, Formatierung und die Sonderrolle von Cow<str>.
Weiterführende Ressourcen
Externe Quellen
- The Rust Book – Data Types
- Rust Reference – Types
- std – Primitive Type Documentation
- Rust by Example – Primitives