Garbage Collector à Rust

Nilesh Katuwal 7 juin 2022
Garbage Collector à Rust

Cet article vous expliquera ce que Rust utilise à la place d’un ramasse-miettes.

Collecte des ordures à Rust

Rust est un langage de programmation à usage général. Au lieu d’un ramasse-miettes, Rust réalise ces propriétés via un système de type sophistiqué mais complexe.

Cela rend Rust extrêmement efficace mais relativement difficile à apprendre et à utiliser.

En règle générale, le nettoyage de la mémoire se produit de manière périodique ou selon les besoins, par exemple lorsque le tas de déchets est presque plein ou dépasse un certain seuil. Selon l’algorithme, il recherche alors les variables inutilisées et libère leur mémoire.

Par exemple, Rust insérerait les instructions LLVM/assembly correspondantes pour libérer la mémoire lorsque la variable quitte la portée du programme ou que sa durée de vie expire au moment de la compilation. Rust prend également en charge les techniques de récupération de place, telles que le comptage de références atomiques.

À l’aide d’un système de type affine, il surveille quelle variable conserve toujours un objet et appelle son destructeur lorsque la portée de cette variable expire. Le système de type affine peut être observé dans l’opération ci-dessous.

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

Rendements :

<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;
                     ^

Les rendements ci-dessus démontrent parfaitement que la propriété est suivie à tout moment au niveau de la langue.

Rust utilise une approche relativement nouvelle de la gestion de la mémoire qui intègre le concept de “propriété” de la mémoire. Les pistes Rust peuvent lire et écrire dans la mémoire.

Il détecte lorsque le programme utilise de la mémoire et la libère lorsqu’elle n’est plus nécessaire. Il applique les règles de mémoire au moment de la compilation, ce qui rend les bogues de mémoire pratiquement impossibles à l’exécution.

Il n’est pas nécessaire de suivre la mémoire manuellement. Au lieu de cela, le compilateur en est responsable.

La caractéristique la plus distinctive de Rust, la propriété, a de profondes implications pour le reste de la langue. Il est essentiel de comprendre comment fonctionne la propriété car elle permet à Rust de fournir des garanties de sécurité mémoire sans ramasse-miettes.

Rust adopte une approche différente : la mémoire est automatiquement renvoyée lorsque la variable qui la possède sort de la portée.