Rust von den Grundlagen bis zum Profi — Folge 1
Sicherer Umgang mit Speicher durch Besitz und Ausleihe
Die in diesem Blog verfassten Artikel wurden mit dem Ziel erstellt, zu unterrichten. Außerdem können die Informationen im Artikel falsch sein, also seien Sie bitte vorsichtig.
Rust ist eine Systemprogrammiersprache, die darauf abzielt, die Speichersicherheit ohne Garbage Collector aufrechtzuerhalten. Beim Erstellen von Programmen, bei denen die Leistung wichtig ist, versuchen wir, ungültige Zeiger und Datenrennen in der Kompilierungsphase zu reduzieren.
Werte haben Besitzer
Werte in Rust haben standardmäßig einen Besitzer. Werte werden automatisch bereinigt, wenn der Eigentümer den Gültigkeitsbereich verlässt.
fn main() {
let name = String::from("Rose");
print_name(name);
//Der Besitz des Namens ist auf die Funktion übergegangen.
}
fn print_name(value: String) {
println!("{value}");
}
StringWenn Sie es als Wert an eine Funktion übergeben, verschiebt sich der Besitz. Wenn der Anrufer es weiterhin nutzen möchte, verleiht er den Wert.
Leihen Sie einen Wert per Referenz aus
fn main() {
let name = String::from("Rose");
print_name(&name);
println!("{name}");
}
fn print_name(value: &String) {
println!("{value}");
}
&Stringist eine Referenz, die keinen Wert besitzt und kurz gelesen wird. Um den Wert zu ändern&mut StringSie sollten eine veränderliche Referenz wie diese verwenden:
Die Regeln, die verhindern, dass Sie mehrere veränderbare Referenzen gleichzeitig erstellen, sind zunächst schwierig. Stattdessen werden fehlerhafte Speicherzugriffe und Race Conditions verhindert, die während der Ausführung auftreten können.
Drücken Sie die Möglichkeit eines Scheiterns als Typ aus
Rust verwendet häufig Option<T>, wenn ein Wert fehlen kann, und Result<T, E>, wenn eine Operation fehlschlagen kann.
fn divide(a: i32, b: i32) -> Result<i32, String> {
if b == 0 {
return Err(String::from("Es kann nicht durch 0 geteilt werden."));
}
Ok(a / b)
}
Der aufrufende Code muss Erfolg und Misserfolg explizit behandeln. Zur Sicherheit in Rust gehört auch, dass Fehler schwer zu ignorieren sind.
Das Rust-Projekt istcargo new, cargo run, cargo testEs wird mit demselben Cargo-Befehl verwaltet. Anstatt zu versuchen, sich alle Eigentumsregeln zu merken, ist es zunächst besser, ein kleines Befehlszeilenprogramm zu erstellen und den Compiler-Meldungen zu folgen, um den Umfang der Ausleihe zu überprüfen.