Incompréhension des lifetimes

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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

Édité par Ardakaniz

+1 -0

Cette réponse a aidé l'auteur du sujet

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.

Édité par imperio

Un tutoriel Rust (en français) est disponible à cette adresse : http://blog.guillaume-gomez.fr/Rust

+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é.

#JeSuisGrimur #OnVautMieuxQueÇa

+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.

Édité par Ksass`Peuk

First : Always RTFM - "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein

+2 -0
Auteur du sujet

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…

+0 -0

@Ardakaniz: N'hésite pas à me dire si des choses ne vont pas dedans d'ailleurs ! Sinon je pense que te mettre à l'anglais serait une bonne chose car mon tuto n'est qu'une introduction, tous les articles intéressants sur rust (et bien d'autres choses) sont en anglais.

Un tutoriel Rust (en français) est disponible à cette adresse : http://blog.guillaume-gomez.fr/Rust

+1 -0
Auteur du sujet

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.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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