ici rust est intelligent et devine que myvector a pour unit but d'etre passer en valeur de retour, et donc ne sera pas "copier" (en C++ si je me trompe pour avoir la meme chose on aurait du passer myvector en tant que parametre par reference ?)
En fait, en C++, ça donne dans ce cas la même chose, c'est la RVO.
pareil pour i_as_string ce qui en c++ aurait du forcer l'utilisation de fonction special de std::vector introduite uniquement recemment
Rust gère les types affines, appelé en C++11 "move". Mais en rust, c'est réellement intérgé : lorsqu'on a mové un objet, si on essaye de l'utiliser ensuite, le compilo te le dit (erreur).
Box offrant la garantie qu'on ai le seul a posseder ce pointeur
Pour les gens connaissant le C++11, Box<T> en rust, c'est en gros la même chose que std::unique_ptr<T> qui peut pas être à nullptr (l'équivalent strict de std::unique_ptr<T> est Option<Box<T>>, qui est d'ailleurs directement compatible avec T* en C).
Pour mon use je dis "je peux utiliser l'objet temporairement, mais je dois le rendre intacte a celui qui me l'a passe"
&T et à peut près équivalent à T const& en C++ (si on pinaille, c'est plus proche de T const* qu'on peut pas mettre à nullptr).
et pour mon free je dis "on me passe l'objet et j'en deviens l'unique detenteur, vu que je n'en fais rien, alors je peux le detruire et liberer sa memoire sans creer d'effet de bord
En fait, l'objet est mové dans la fonction, puis détruit à la sortie de la fonction car personne ne peut y référencer. On peut même simplifier le code à
[^] # Re: Une question
Posté par TeXitoi (site web personnel) . En réponse au journal Bref j'ai créé une bibliothèque Rust et un moteur ibus (et je cherche comment les packager). Évalué à 2.
create_vector_of_stringen plus simple (et aussi efficace):En fait, en C++, ça donne dans ce cas la même chose, c'est la RVO.
Rust gère les types affines, appelé en C++11 "move". Mais en rust, c'est réellement intérgé : lorsqu'on a mové un objet, si on essaye de l'utiliser ensuite, le compilo te le dit (erreur).
Pour les gens connaissant le C++11,
Box<T>en rust, c'est en gros la même chose questd::unique_ptr<T>qui peut pas être ànullptr(l'équivalent strict destd::unique_ptr<T>estOption<Box<T>>, qui est d'ailleurs directement compatible avecT*en C).&Tet à peut près équivalent àT const&en C++ (si on pinaille, c'est plus proche deT const*qu'on peut pas mettre ànullptr).En fait, l'objet est mové dans la fonction, puis détruit à la sortie de la fonction car personne ne peut y référencer. On peut même simplifier le code à
Oui, juste une fonction vide, d'ailleurs, c'est exactement l'implémentation de drop, les génériques en moins : http://doc.rust-lang.org/0.12.0/src/core/home/rustbuild/src/rust-buildbot/slave/dist2-linux/build/src/libcore/mem.rs.html#348
J'ai un peu formalisé certains trucs et fait les parallèles avec C++, mais sinon, je confirme, c'est très bien ce que tu dis là ;)