Le concept de “propriétaire” ou “ownership” en Rust

Nunes Nelson
2 min readSep 18, 2020

Vous venez de commencer le Rust, et tout ce que vous écrivez ne compile pas ? Bienvenu dans le monde Rust, ou le compilateur fait la loi pour votre bien !

Quand on vient du monde merveilleux des langages a ramasse miette (Garbage collector), on oublie assez facilement qu’en dessous, c’est une armée de pointeur qui se balade d’adresse en adresse, et qu’un superviseur (le GC) est responsable de faire respecter la loi (libérer l’espace).

Quand on a fait un peu de C/C++, on se souvient bien qu’il fallait libérer les différents pointeurs, est ce que pour autant, a l’exécution on était protéger de “fuite de mémoire”: non ! Sans pouvoir retrouver le lien, Microsoft indiquait que 60% de ses bogues étaient dus a des fuites de mémoire !

Okay, Rust a fait le choix de vous filer les clés du camion (pas de garbage collector, et pas d’api pour libérer vous même la mémoire); tout en vous en filant un super GPS (le compilateur) qui en plus de vous indiquer le bon chemin (les messages d’erreurs sont particulièrement lisible et compréhensible), vous bloque lorsque vous faites des opérations dangereuses !

Le concept de propriétaire est relativement simple au sens Rust :

  • Chaque valeur est associé à une variable dit son “propriétaire”
  • Une valeur ne peut pas avoir plus d’un propriétaire (d’où la notion de transfert de propriété)
  • Quand une variable (ie un propriétaire) sort du scope (une fonction par exemple), sa valeur est supprimée (ou libéré)

La notion de propriétaire commence via une assignation:

La notion de propriétaire implique aussi qu’en dehors de son scope, sa valeur n’existe plus :

Ré-assigné une valeur déplace la propriété (ce qu’on appel un move) :

Dans le cas d’un type primitif (comme ci-dessous), ce n’est pas tout a fait un “move” mais plus une copie :

En synthèse :

  • Je ré-assigne une valeur primitive, je crée alors une copie
  • Je ré-assigne une valeur non primitive, je déplace alors la propriété

Le “Borrowing” ou “Transfert” qui permet de prêter une valeur sans perdre la propriété

Je prête une valeur à une ou plusieures variables, mais elle ne peut pas être modifié par celui qui l’emprunte

Je prête une valeur à une seule variable, tout en la laissant modifiable

Je ferais un autre article sur la notion de lifetime :)

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

No responses yet

Write a response