Was Rust für JavaScript-Entwickler feindselig erscheinen lässt, ist nicht die Syntax. Es ist das Lebenszyklusmodell.
In JavaScript denken Sie normalerweise nicht direkt darüber nach, wer den Speicher besitzt. Die Laufzeitumgebung und der Garbage Collector verwalten das für Sie.
Rust zwingt die Frage in das Typsystem.
Eigentum in einem Satz
Jeder Wert hat einen Besitzer, und wenn dieser Besitzer aus dem Gültigkeitsbereich geht, wird der Wert verworfen.
Das ist das Kernmodell.
Der Compiler setzt dann die Regeln für das Ausleihen durch, sodass Sie Daten nicht versehentlich verwenden können, nachdem sie verschoben wurden, oder sie durch widersprüchliche Verweise ändern können.
Der erste Fehler, den jeder sieht
fn print_name(name: String) {
println!("{}", name);
}
fn main() {
let my_name = String::from("Alaeddine");
print_name(my_name);
println!("{}", my_name);
}
Das schlägt fehl, weil my_name in print_name verschoben wird.
Für einen JavaScript-Entwickler fühlt sich das willkürlich an. Für Rust ist es jedoch die explizite Übertragung des Eigentums.
Ausleihen statt Verschieben
Wenn die Funktion nur den Wert lesen muss, leihen Sie ihn sich aus:
fn print_name(name: &str) {
println!("{}", name);
}
fn main() {
let my_name = String::from("Alaeddine");
print_name(&my_name);
println!("{}", my_name);
}
Jetzt bleibt das Eigentum bei my_name, und die Funktion erhält eine Referenz mit einem engeren Versprechen.
Warum das existiert
Der Borrow Checker versucht nicht, Ihnen das Leben schwer zu machen. Er verhindert:
- use-after-free-Bugs
- Datenrennen
- ungültige Aliasmuster
in Code, der in niedrigeren Programmiersprachen sonst kompiliert und zur Laufzeit fehlschlägt.
Die ergonomischen Kosten sind upfront. Der Vorteil ist, dass ganze Klassen von Speicherbugs zu Kompilierungsfehlern werden.
Der beste Weg, es zu lernen
Beginnen Sie nicht damit, Fehlermeldungen auswendig zu lernen.
Fragen Sie sich stattdessen:
- Wer besitzt diesen Wert?
- Bewege ich ihn oder leihe ich ihn mir aus?
- Benötigt diese Funktion das Eigentum, eine Mutation oder nur eine Lese-Referenz?
Sobald diese Fragen normal werden, beginnen die Compilerfehler, wie Anleitung und nicht wie Strafe zu wirken.
Weitere Lektüre