Rust verwendet einen Borrow-Checker, um seine Eigentumsregeln durchzusetzen und sicherzustellen, dass Programme speichersicher sind. Die Eigentümerregeln schreiben vor, wie Rust den Speicher über Stack und Heap verwaltet.

Beim Schreiben von Rust-Programmen müssen Sie Variablen verwenden, ohne den Besitz des zugehörigen Werts zu ändern. Rust bietet einen robusten Ausleihmechanismus, um Flexibilität und Wiederverwendung von Code zu fördern.

Was ist Ausleihen in Rust?

Ausleihen ist der Zugriff auf den Wert einer Variablen ohne Übernahme der Variablen durch Verweis auf den Eigentümer. Der Borrow-Checker stellt mithilfe eines Konstrukts namens Lebensdauern sicher, dass die Referenz gültig ist und die Daten nicht gelöscht werden.

Eine Lebensdauer ist, wie lange eine Variable existiert. Lebensdauern beginnen mit der Variablenerstellung und enden mit der Variablenzerstörung. Sie können den Besitz einer Variablen ausleihen, und wenn die ausgeliehene Referenz außerhalb des Gültigkeitsbereichs liegt, geht der Besitz auf die Besitzervariable zurück. Die Kreditaufnahme ist ein bisschen wie die

instagram viewer
Hinweise, die Sie in Sprachen wie C++ und Go finden. Aber der Rust-Compiler verwendet den Borrow-Checker, um sicherzustellen, dass Programme speichersicher sind.

Ein Beispiel für die Ausleihe in Rust

Sie können den Besitz einer Variablen ausleihen, indem Sie mit dem kaufmännischen Und-Symbol (&) auf den Besitzer verweisen.

fnhauptsächlich() {
Lassen x= Schnur::from("Hallo"); // x besitzt "Hallo"
Lassen y = &x; // y referenziert x, borgt "hello"
drucken!("{}", x);
drucken!("{}", j)
}

Ohne Ausleihen durch Referenzieren würde das Programm in Panik geraten. Es würde gegen die Eigentümerregel verstoßen, dass ein Wert einen Eigentümer haben kann und zwei Variablen nicht auf denselben Speicherort zeigen können. Das Ausleihen kann bei Veranstaltungen sehr nützlich sein. Hier ist ein Beispiel für das Ausleihen in einer Funktion, um den Besitz zu behalten, während andere Funktionen aufgerufen werden, die lokale Variablen als Argumente verwenden.

fnprint_even(Vektor: &Vek<i32>) {
zum Werte in Vektor {
wenn Werte % 2 == 0 {
drucken!("{}", Werte);
}
}
}

Das print_even Die Funktion verweist als Argument auf einen Vektor von 32-Bit-Ganzzahlen. Es druckt dann Zeilen mit Werten, die Vielfache von zwei im Vektor sind, indem es eine for-Schleife und den Befehl println! Makro.

fnhauptsächlich() {
Lassen Zahl_Vektor = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
print_even(&number_vector); // Eigentum wird geliehen, nicht verschoben
drucken!("Die Hauptfunktion behält den Besitz des Zahlenvektors {:?}", number_vector)
}

Die Hauptfunktion deklariert die Variable number_vector und weist ihr einen Vektor aus 32-Bit-Ganzzahlen zu. Anschließend ruft sie die Funktion print_even auf und übergibt ihr einen Verweis auf die Zahl_Vektor Variable mit dem kaufmännischen Und-Symbol.

Die Hauptfunktion behält das Eigentum an der Zahl_Vektor Variable kann er den Wert an seinem Speicherplatz weiterverwenden.

Ausleihen und Mutieren von Referenzen

Funktionen können auch geliehene Variablen ändern, indem sie veränderliche Verweise auf sie verwenden, bevor sie den Besitz zurückgeben.

Im Gegensatz zu regulären Variablen, die mit dem Schlüsselwort mut auf änderbar gesetzt werden können, müssen Sie änderbaren Referenzen jedoch das kaufmännische Und-Symbol voranstellen.

Bevor Sie veränderliche Referenzen erstellen, muss die Variable, die Sie ändern möchten, veränderbar sein.

fnremove_value(Vektor: &mutVek<i32>) -> &Vek<i32> {
vectr.remove(4);
Rückkehr Vektor
}

Das remove_value Die Funktion übernimmt die Referenz eines veränderlichen Vektors von 32-Bit-Ganzzahlen. Es gibt einen Vektor von 32-Bit-Ganzzahlen zurück, nachdem der Wert des Vektors im vierten Index entfernt wurde.

fnhauptsächlich() {
Lassenmut Zahlen = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
remove_value(&mut Zahlen); // veränderliche Referenz hier
drucken!("{:?}", Zahlen);
}

Die Funktion ändert die Zahlen Vektor durch Aufrufen von remove_value und Übergeben der veränderlichen Referenz eines Vektors als Argument. Beim Drucken des Vektors existiert der vorherige vierte Index des Vektors nicht.

Beachten Sie, dass das Argument ein Verweis auf einen veränderlichen Vektor ist.

Es ist wichtig, Eigentum und Kreditaufnahme zu verstehen

Sie müssen Eigentum und Ausleihen verstehen, um effizienten, speichersicheren Rust-Code zu schreiben, der kompiliert und ausgeführt wird. Wenn Ihr Code nicht den Eigentumsregeln entspricht, wird dies vom Borrow-Checker erkannt. Sie müssen Ihr Programm speichersicher machen, damit Rust es kompilieren kann.

Der Borrow-Checker ist lästig, wenn Sie neu in Rust sind. Aber wenn Sie mehr Rust-Code schreiben, werden Sie sich daran gewöhnen und Erfahrungen mit dem Schreiben von speichersicherem Rust-Code sammeln.