Anhang A: Schlüsselwörter
Die folgende Liste enthält Schlüsselwörter, die für die gegenwärtige oder zukünftige Verwendung durch die Sprache Rust reserviert sind. Als solche können sie nicht als Bezeichner verwendet werden (außer als Roh-Bezeichner, die wir im Abschnitt „Roh-Bezeichner“ besprechen). Bezeichner sind Namen von Funktionen, Variablen, Parametern, Strukturfeldern (struct fields), Modulen, Crates, Konstanten, Makros, statischen Werten, Attributen, Typen, Traits und Lebensdauern (lifetimes).
Derzeit verwendete Schlüsselwörter
Nachstehend findest du eine Liste der derzeit verwendeten Schlüsselwörter mit einer Beschreibung ihrer Funktion.
as– primitive Typen umwandeln; ein spezifisches Trait mit einem Element eindeutig machen; Elemente inuse-Anweisungen umbenennenasync– einFuturezurückgeben, anstatt den aktuellen Thread zu blockierenawait– Ausführung anhalten, bis das Ergebnis einesFuturevorliegtbreak– Schleife sofort verlassenconst– konstante Elemente oder konstante Roh-Referenzen definierencontinue– weiter zur nächsten Schleifeniterationcrate– in einem Modulpfad verweist auf das Stammverzeichnis der Cratedyn– dynamischer Aufruf (dispatch) eines Trait-Objektselse– Ersatzkontrollflusszweig beiifundif letenum– eine Aufzählung (enumeration) definierenextern– externe Funktion oder Variable verlinkenfalse– Boolesches Literal für „falsch“fn– Funktion oder Funktionsreferenztyp definierenfor– wiederhole über Elemente einer Iteration; ein Trait implementieren; eine höherrangige Lebensdauer angebenif– Verzweigen abhängig vom Ergebnis eines Bedingungsausdrucksimpl– Implementieren einer inhärenten oder Trait-Funktionalitätin– Teil derfor-Schleifensyntaxlet– eine Variable bindenloop– wiederhole bedingungslosmatch– einen Wert mit Muster abgleichenmod– ein Modul definierenmove– Closure übernimmt Eigentum (ownership) all seiner Parametermut– Referenzen, Roh-Referenzen und Variablenbindungen als veränderbar kennzeichnenpub– Strukturfelder (struct fields),impl-Blöcke und Module als öffentlich sichtbar kennzeichnenref– als Referenz bindenreturn– aus Funktion zurückkehrenSelf– Typ-Alias für den zu definierenden oder implementierenden Typself– Methoden-Instanzobjekt; aktuelles Modulstatic– globale Variable oder Lebensdauer während der gesamten Programmausführungstruct– eine Struktur definierensuper– Elternmodul des aktuellen Modulstrait– ein Trait definierentrue– Boolesches Literal für „wahr“type– einen Typ-Alias oder assoziierten Typ definierenunion– eine Vereinigung (union) definieren; ist nur ein Schlüsselwort innerhalb einer Union-Deklarationunsafe– Code, Funktionen, Trait und Implementierungen als unsicher kennzeichnenuse– Symbole in den Gültigkeitsbereich bringen; genaue Spezifikation von generischen und Lebensdauer-Grenzenwhere– Klauseln zur Typabgrenzung angebenwhile– wiederhole abhängig vom Ergebnis eines Bedingungsausdrucks
Schlüsselwörter reserviert für zukünftige Verwendung
Die folgenden Schlüsselwörter haben noch keine Funktionalität, sondern sind von Rust für eine mögliche zukünftige Verwendung reserviert.
abstractbecomeboxdofinalgenmacrooverrideprivtrytypeofunsizedvirtualyield
Roh-Bezeichner
Roh-Bezeichner (raw identifiers) sind eine Syntax, die es dir ermöglicht,
Schlüsselwörter dort zu verwenden, wo sie normalerweise nicht erlaubt wären. Du
verwendest einen Roh-Bezeichner, indem du einem Schlüsselwort das Präfix r#
voranstellst.
Zum Beispiel ist match ein Schlüsselwort. Versuche, folgende Funktion zu
kompilieren, die match als Namen benutzt:
Dateiname: src/main.rs
#![allow(unused)]
fn main() {
fn match(needle: &str, haystack: &str) -> bool {
haystack.contains(needle)
}
}
Dann erhältst du diesen Fehler:
error: expected identifier, found keyword `match`
--> src/main.rs:4:4
|
4 | fn match(needle: &str, haystack: &str) -> bool {
| ^^^^^ expected identifier, found keyword
Der Fehler zeigt, dass du das Schlüsselwort match nicht als
Funktionsbezeichner verwenden kannst. Um match als Funktionsnamen zu
verwenden, musst du die Syntax für Roh-Bezeichner wie folgt verwenden:
Dateiname: src/main.rs
fn r#match(needle: &str, haystack: &str) -> bool {
haystack.contains(needle)
}
fn main() {
assert!(r#match("foo", "foobar"));
}
Dieser Code lässt sich fehlerfrei kompilieren. Beachte das r#-Präfix im
Funktionsnamen in seiner Definition sowie an der Stelle, an der die Funktion in
main aufgerufen wird.
Roh-Bezeichner erlauben es dir, jedes beliebige Wort als Bezeichner zu
verwenden, auch wenn dieses Wort ein reserviertes Schlüsselwort ist. Dies gibt
uns mehr Freiheit bei der Wahl der Bezeichner und ermöglicht uns die Integration
in Programme, die in einer Sprache geschrieben wurden, in der diese Wörter keine
Schlüsselwörter sind. Darüber hinaus ermöglicht dir der Roh-Bezeichner das
Verwenden von Bibliotheken, die in einer anderen Rust-Edition als deine Crate
verwendet, geschrieben wurden. Zum Beispiel ist try in Edition 2015 kein
Schlüsselwort, in den Editionen 2018, 2021 und 2024 aber schon. Wenn du auf eine
Bibliothek angewiesen bist, die mit Edition 2015 geschrieben wurde und eine
Funktion try hat, musst du die Roh-Bezeichner-Syntax verwenden, in diesem Fall
r#try, um diese Funktion von deinem Code in einer neueren Edition aufzurufen.
Siehe Anhang E für weitere Informationen zu Editionen.