Incompréhension des lifetimes

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je suis en train d'apprendre Rust depuis la doc du site et j'en suis au chapitre sur les lifetimes, mais j'ai du mal a comprendre comment ça fonctionne.
Je sais en definir explicitement, mais l'utilité là par contre…

Donc si vous pourriez m'eclairer, je suis preneur :)

Merci,
Ardakaniz

+1 -0

C'est utile dans le cas où tu souhaites garder un objet sans le copier. Par exemple :

1
2
3
struct Foo<'a> {
    data: &'a str,
}

Ici, la durée de vie de Struct ne doit pas dépasser celle de data, sinon le contenu de ta struct sera invalide.

EDIT: D'ailleurs j'viens de penser, dans le cas où tu veux retourner une variable non mutable :

1
2
3
4
5
6
7
8
9
struct Foo {
    data: String,
}

impl Foo {
    fn get_data<'a>(&'a self) -> &'a str {
        &self.data
    }
}

Normalement, tu n'as pas besoin de préciser la lifetime de manière explicite (rustc est assez intelligent pour la deviner tout seul), mais je pense qu'ici, il est assez évident que la lifetime de la variable retournée ne doit pas dépasser celle de la struct qui la contient.

+2 -0

Dit autrement, les durées de vie, c’est la solution trouvée par Rust pour ne jamais, jamais avoir d’erreur de segmentation : dès l’étape de compilation, on sait précisément quelle donnée doit se trouver en mémoire à quel moment, et à partir de quand il est possible de l’effacer en toute sécurité.

+2 -0

C'est une version bien plus générale de RAII avec pas mal d'analyses de formes de la mémoire qu'on a ancré au sein du typage. Apparemment il y a des débuts de preuve formelle par ici : ftp://ftp.cs.washington.edu/tr/2015/03/UW-CSE-15-03-02.pdf . Mais il y a encore un peu de boulot pour avoir un modèle et une preuve complets de memory safety en particulier en présence de multi-threading, encore plus pour une preuve interactive vérifiée.

Okay merci !

Et j'ai vu que tu avais fais un tuto sur Rust imperio, en français, je pense que je vais lire celui là à la place de celui de la doc, parce que l'anglais c'est bien beau mais je suis pas bilingue donc je comprends pas tout et pour l'apprentissage d'un langage, c'est pas super…

Oui, je sais que ce serait mieux de lire en anglais mais je pense y revenir après avoir lu ton tuto pour me perfectionner.

Juste une autre petite question HS: Pourquoi Rust n'aime pas les majuscules ? Par exemple ma fonction getInput, il me met un warning en me disant que get_input serait mieux.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte