@@ -4,6 +4,10 @@ references:
44 title : Specialization
55 url : https://github.com/rust-lang/rfcs/blob/master/text/1210-impl-specialization.md
66 id : RFC-1210
7+ - type : web
8+ title : The Rustonomicon
9+ url : https://doc.rust-lang.org/stable/nomicon/
10+ id : nomicon
711---
812
913# Bibliothèque standard
@@ -28,8 +32,8 @@ réel : une implémentation incorrecte peut mener à un **comportement indéfini
2832Heureusement, dans la plupart des cas, il n'est pas nécessaire de fournir une
2933implémentation. En Rust, la quasi-totalité des types primitifs implémente
3034` Send ` et ` Sync ` , et dans la majorité des cas, Rust fournit de manière
31- automatique une implémentation pour les types composés. Quelques exceptions
32- notables sont :
35+ automatique une implémentation pour les types composés. Comme rappelé dans
36+ [ @ nomicon ] , quelques exceptions notables sont :
3337
3438- les pointeurs ` raw ` , qui n'implémentent ni ` Send ` , ni ` Sync ` , puisqu'ils
3539 n'offrent aucune garantie quant à la sûreté ;
@@ -41,26 +45,10 @@ notables sont :
4145
4246L'implémentation automatique de ` Send ` (respectivement ` Sync ` ) a lieu pour les
4347types composés (structures ou énumérations) lorsque tous les champs contenus
44- implémentent ` Send ` (respectivement ` Sync ` ). Une fonctionnalité notable, mais
45- ** instable** , de Rust (depuis 1.37.0) permet d'empêcher cette implémentation
46- automatique en annotant explicitement le type considéré avec une
47- _ négation d'implementation_ :
48-
49- ``` rust,ignore,noplaypen
50- #![feature(option_builtin_traits)]
48+ implémentent ` Send ` (respectivement ` Sync ` ).
5149
52- struct SpecialType(u8);
53- impl !Send for SpecialType {}
54- impl !Sync for SpecialType {}
55- ```
56- L'implémentation négative de ` Send ` ou ` Sync ` est également utilisée dans la
57- bibliothèque Rust pour les exceptions, et est automatiquement implémentée
58- lorsque cela est approprié. En résultat, la documentation générée est toujours
59- explicite : un type implémente soit ` Send ` (respectivement ` Sync ` ), soit
60- ` !Send ` (respectivement ` !Sync ` ).
61-
62- En guise d'alternative * stable* à l'implémentation négative, il est possible
63- d'utiliser un champ typé par un type fantôme (` PhantomData ` ) :
50+ Afin d’empêcher * artificiellement* qu'un type n'implémente ` Send ` ou ` Sync ` ,
51+ il est possible d'utiliser un champ typé par un type fantôme (` PhantomData ` ) :
6452
6553``` rust,noplaypen
6654# use std::marker::PhantomData;
0 commit comments