Müllsammler in Rust

Nilesh Katuwal 7 Juni 2022
Müllsammler in Rust

In diesem Artikel erfahren Sie, was Rust anstelle eines Garbage Collectors verwendet.

Müllabfuhr in Rust

Rust ist eine universelle Programmiersprache. Anstelle eines Garbage Collectors erreicht Rust diese Eigenschaften über ein ausgeklügeltes, aber komplexes Typensystem.

Dies macht Rust extrem effizient, aber relativ schwierig zu erlernen und zu verwenden.

Typischerweise erfolgt die Garbage-Collection regelmäßig oder nach Bedarf, z. B. wenn der Müllhaufen fast voll ist oder einen bestimmten Schwellenwert überschreitet. Je nach Algorithmus sucht es dann nach unbenutzten Variablen und gibt deren Speicher frei.

Rust würde beispielsweise die entsprechenden LLVM/assembly-Anweisungen einfügen, um den Speicher freizugeben, wenn die Variable den Gültigkeitsbereich des Programms verlässt oder ihre Lebensdauer zur Kompilierzeit abläuft. Rust unterstützt auch Garbage-Collection-Techniken wie das Zählen von atomaren Referenzen.

Unter Verwendung eines affinen Typsystems überwacht es, welche Variable noch ein Objekt festhält, und ruft seinen Destruktor auf, wenn der Gültigkeitsbereich dieser Variablen abläuft. Das System vom affinen Typ kann in der folgenden Operation beobachtet werden.

fn main() {
    let p: String = "Good Morning".into();
    let m = p;
    println!("{}", p);
}

Erträge:

<anon>:4:24: 4:25 error: use of moved value: `p` [E0382]
<anon>:4         println!("{}", p);

<anon>:3:13: 3:14 note: `p` moved here because it has type `collections::string::String`, which is moved by default
<anon>:3         let m = p;
                     ^

Die oben genannten Ergebnisse zeigen perfekt, dass die Eigentumsverhältnisse jederzeit auf Sprachebene nachverfolgt werden.

Rust verwendet einen relativ neuartigen Ansatz zur Speicherverwaltung, der das Konzept des Eigentums des Speichers beinhaltet. Rust-Tracks können im Speicher lesen und schreiben.

Es erkennt, wenn das Programm Speicher verwendet, und gibt ihn frei, wenn er nicht mehr benötigt wird. Es erzwingt Speicherregeln zur Kompilierzeit und macht Speicherfehler zur Laufzeit praktisch unmöglich.

Es ist nicht erforderlich, den Speicher manuell zu verfolgen. Stattdessen ist der Compiler dafür verantwortlich.

Das charakteristischste Merkmal von Rust, der Besitz, hat tiefgreifende Auswirkungen auf den Rest der Sprache. Es ist wichtig zu verstehen, wie Besitz funktioniert, weil es Rust ermöglicht, Speichersicherheitsgarantien ohne Garbage Collector zu bieten.

Rust verfolgt einen anderen Ansatz: Speicher wird automatisch zurückgegeben, wenn die Variable, die ihn besitzt, den Gültigkeitsbereich verlässt.