You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on May 18, 2023. It is now read-only.
Copy file name to clipboardExpand all lines: README.md
+6-1Lines changed: 6 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,12 @@
1
1
# Stade de rédaction
2
2
3
3
La FAQ est encore régulièrement mise à jour, rédigée, mais il est possible de la lire.
4
-
Actuellement(20 novembre 2016), la FAQ a subi 4 relectures.
4
+
Actuellement(28 novembre 2016), la FAQ a subi 4 relectures.
5
+
6
+
# Remerciements
7
+
8
+
Je remercie tout particulièrement [@chaosedge278](https://github.com/Chaosedge278), [@f-leb](http://www.developpez.net/forums/u283256/f-leb/), [@Malick SECK](http://www.developpez.net/forums/u526667/malick-seck/) et [@imperio](https://github.com/GuillaumeGomez) pour leurs relectures orthographiques et techniques, ainsi que l'équipe de [developpez.com](developpez.com) en général pour avoir gentiment accepté d'héberger cette ressource.
9
+
Merci également à [@Siguillaume](http://www.developpez.net/forums/u181612/siguillaume/) pour sa disponibilité ! :)
Copy file name to clipboardExpand all lines: rust_FAQ_Markdown/rust_FAQ.md
+32-30Lines changed: 32 additions & 30 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# Introduction
2
2
3
-
cf. [README.md](README.md), s'il vous plaît.
3
+
cf. [README.md](../README.md), s'il vous plaît.
4
4
5
5
# Langage
6
6
@@ -139,11 +139,11 @@ Voir aussi : [Page officielle du langage Rust](https://www.rust-lang.org/en-US/
139
139
140
140
Rust propose l'encapsulation qui est un concept objet. On peut donc dire que Rust est orienté objet. Toutefois, l'encapsulation s'effectue à l'échelle d'un **module** et non d'une **classe/structure** comme on pourrait le remarquer en Java/C#.
141
141
142
-
Il dispose d'un aspect de la POO, de prime abord, assez primitif; Rust permet toutefois de bénéficier du polymorphisme grâce aux « traits » qui pourraient être comparées aux interfaces Java/C#.
142
+
Il dispose d'un aspect de la POO, de prime abord, assez primitif; Rust permet de bénéficier du polymorphisme grâce aux « traits » qui pourraient être comparées aux interfaces Java/C#.
143
143
144
144
Cependant, le langage ne supporte pas l'héritage multiple (ni l'héritage simple) entre les structures, comme il serait possible de le faire avec des classes, bien qu'il soit possible de le faire avec des traits.
145
145
146
-
Par conséquent, Rust est donc orienté objet, puisqu'il possède plusieurs parties de ce paradigme, mais n'est pas un langage objet *pur*.
146
+
Par conséquent, Rust est orienté objet, puisqu'il possède plusieurs parties de ce paradigme, mais n'est pas un langage objet *pur*.
147
147
148
148
Voir aussi : [Qu'est-ce qu'un « trait » ?](#quest-ce-quun-trait)
149
149
@@ -279,12 +279,12 @@ Le mot-clé `use` permet de gérer les imports d'autres modules.
279
279
Exemple :
280
280
281
281
```rust
282
-
externcrate mon_package;
282
+
externcrate mon_package;
283
283
284
-
usemon_package::mon_module::ma_fonction;
284
+
usemon_package::mon_module::ma_fonction;
285
285
286
286
fnmain() {
287
-
ma_fonction();
287
+
ma_fonction();
288
288
}
289
289
```
290
290
@@ -307,7 +307,7 @@ fn main() {
307
307
}
308
308
```
309
309
310
-
Il permet aussi de réexporter des modules vers le scope supérieur. Prenons par exemple un project possédant cette hiérarchie :
310
+
Il permet aussi de réexporter des modules vers le scope supérieur. Prenons par exemple un projet possédant cette hiérarchie :
311
311
312
312
```text
313
313
src
@@ -350,7 +350,7 @@ Le mot-clé `pub` peut être utilisé dans *trois* contextes différents :
350
350
2. Au sein [et sur] des traits;
351
351
3. Au sein [et sur] des structures.
352
352
353
-
Dans un premier temps, qu'il soit utilisé sur des `mod`ules, `trait`s, ou `struct`ures, il aura toujours la même fonction : rendre public l'objet concerné.
353
+
Dans un premier temps, qu'il soit utilisé sur des `mod`ules, `trait`s, ou `struct`ures, il aura toujours la même fonction : rendre publique l'objet concerné.
354
354
355
355
Exemple :
356
356
@@ -444,7 +444,7 @@ Bien entendu, si vous souhaitez importer un paquet qui n'est pas de vous, il vou
444
444
445
445
Voir aussi :
446
446
447
-
Pour voir un exemple de création de paquet, vous pouvez vous rendre à la Q/R : « [A quoi sert le mot-clé pub ?](#LII-A-16"A quoisert le mot-clépub ?") »
447
+
Pour voir un exemple de création de paquet, vous pouvez vous rendre à la Q/R : « [A quoi sert le mot-clé pub ?](#a-quoi-sert-le-mot-clé-pub) »
448
448
449
449
[Comment installer de nouvelles bibliothèques ?](#comment-installer-de-nouvelles-bibliothèques)
450
450
@@ -593,9 +593,9 @@ Voir aussi :
593
593
594
594
Trois règles, et seulement trois, sont brisées dans les blocs (et fonctions) `unsafe`:
595
595
596
-
1. L'accès et la modification d'une variable globale (statique) mutable sont autorisés;
597
-
2. Il est possible de déréférencer un pointeur (non-nul, donc);
598
-
3. Il est possible de faire à une fonction non-sûre.
596
+
1. L'accès et la modification d'une variable globale (statique) mutable sont autorisés;
597
+
2. Il est possible de déréférencer un pointeur (non-nul, donc);
598
+
3. Il est possible de créer une fonction non-sûre.
599
599
600
600
### Quels comportements sont considérés « non-sûrs » par Rust ?
601
601
@@ -613,9 +613,9 @@ fn ma_fonction() {
613
613
614
614
### À quoi sert le mot-clé match ?
615
615
616
-
Le mot-clé `match` nous permet d'implémenter le *pattern**matching*.
616
+
Le mot-clé `match` nous permet d'implémenter le *patternmatching*.
617
617
618
-
Ainsi, il est possible de comparer une entrée à plusieurs tokens constants et agir en conséquence. Le pattern matching est considéré comme un test *exhaustif*, car, quoi qu'il arrive, il fera en sorte de couvrir tous les cas de figure qu'on lui propose.
618
+
Ainsi, il est possible de comparer une entrée à plusieurs **tokens** constants et agir en conséquence. Le pattern matching est considéré comme un test *exhaustif*, car, quoi qu'il arrive, il fera en sorte de couvrir tous les cas de figure qu'on lui propose.
619
619
620
620
Exemple :
621
621
@@ -624,11 +624,11 @@ let foo: i32 = 117;
624
624
625
625
matchfoo {
626
626
117=>println!("foo vaut 117 !"),
627
-
_=>println!("You know nothing, Jon."), // s'efforcera de trouver une réponse
627
+
_=>println!("You know nothing, John."), // s'efforcera de trouver une réponse
628
628
}
629
629
```
630
630
631
-
Jusqu'ici, il semblerait que le mot-clé `match` ne soit pas capable de faire preuve de plus de souplesse qu'un `switch`, ce qui est bien entendu le contraire ! Vous pouvez par-exemple matcher sur un ensemble de valeur :
631
+
Jusqu'ici, il semblerait que le mot-clé `match` ne soit pas capable de faire preuve de plus de souplesse qu'un `switch`, ce qui est bien entendu le contraire ! Vous pouvez par-exemple matcher sur un ensemble de valeurs :
632
632
633
633
```rust
634
634
letfoo:i32=117;
@@ -639,7 +639,7 @@ match foo {
639
639
}
640
640
```
641
641
642
-
Le pattern matching est très puissant, n'hésitez pas à en user et en abuser !
642
+
*Le pattern matching est très puissant, n'hésitez pas à en user et en abuser !*
643
643
644
644
Voir aussi :
645
645
@@ -662,7 +662,7 @@ fn main() {
662
662
}
663
663
```
664
664
665
-
Il permet aussi de dire explicitement qu'une valeur de doit pas être "bougé"/move dans certains contextes.
665
+
Il permet aussi de dire explicitement qu'une valeur ne doit pas être "bougée"/move dans certains contextes.
666
666
667
667
### À quoi sert le mot-clé mut ?
668
668
@@ -689,7 +689,7 @@ Une macro est ce que l'on peut appeler vulgairement une fonction très puissante
689
689
690
690
Grâce aux macros, nous pouvons capturer *plusieurs* groupes *d'expressions* et ainsi écrire les instructions désirées selon *chaque* cas.
691
691
692
-
Pour grossir un peu le trait : les macros sont une extension du compilateur de Rust. Elles sont interprétées au moment de la compilation, pas pendant l'exécution de votre programme.
692
+
Pour grossir un peu le trait : *les macros sont une extension du compilateur de Rust. Elles sont interprétées au moment de la compilation, pas pendant l'exécution de votre programme*.
693
693
694
694
Voir aussi : [Comment créer une macro ?](#comment-créer-une-macro)
695
695
@@ -745,7 +745,7 @@ fn main() {
745
745
}
746
746
```
747
747
748
-
Vous aurez certainement remarqué que les paramètres passés sont assez spéciaux; au lieu d'avoir le nom de leur type après les deux points (« : »), il est écrit `expr`.
748
+
Vous aurez certainement remarqué que les paramètres passés sont assez spéciaux; au lieu d'avoir le nom de leur type après les deux points (« : »), il est écrit `expr`.
749
749
750
750
C'est ce que l'on appelle un « spécificateur » .
751
751
@@ -850,14 +850,14 @@ Hello
850
850
851
851
Avec Rust, il est possible d'effectuer une « destructuration » sur certains types de données, mais qu'est-ce que cela signifie exactement ?
852
852
853
-
Grâce au pattern matching, il est possible de créer, donc, des « modèles » pour isoler une partie de la structure et ainsi vérifier si notre entrée correspond à nos attentes.
853
+
Grâce au *pattern matching*, il est possible de créer, donc, des « modèles » pour isoler une partie de la structure et ainsi vérifier si notre entrée correspond à nos attentes.
854
854
855
855
Une destructuration peut se faire sur :
856
856
857
-
* Les listes
858
-
* Les tuples
859
-
* Les énumérations
860
-
* Les structures
857
+
* Les listes;
858
+
* Les tuples;
859
+
* Les énumérations;
860
+
* Les structures.
861
861
862
862
Voir aussi :
863
863
@@ -994,8 +994,10 @@ let foo = A {
994
994
995
995
La bibliothèque standard de Rust propose un(e) `trait`/ interface nommé(e) `PartialEq` composée de deux fonctions :
996
996
997
-
1.`fn eq(&self, other : &instance_de_la_meme_structure)`* ;*
998
-
2.`fn ne(&self, other : &instance_de_la_meme_structure) `*;*
997
+
1.`fn eq(&self, other : &instance_de_la_meme_structure)`;
998
+
2.`fn ne(&self, other : &instance_de_la_meme_structure) `.
999
+
1000
+
**Note**: Comment il est stipulé dans la documentation officielle, vous n'êtes pas forcé d'implémenter les deux fonctions : `ne()` étant simplement le contraire de `eq()` et vice versa, il serait redondant de les implémenter dans la même structure.
999
1001
1000
1002
Ci-dessous figure un exemple complet d'implémentation :
1001
1003
@@ -1070,7 +1072,7 @@ pub mod votre_conteneur {
1070
1072
}
1071
1073
```
1072
1074
1073
-
Si votre problème persiste, je vous invite à vous rendre sur les forums figurant dans la rubrique programmation pour obtenir de l'aide. Présentez clairement l'erreur que le compilateur vous renvoi dans votre post.
1075
+
Si votre problème persiste, je vous invite à vous rendre sur les forums figurant dans la rubrique [programmation](http://programmation.developpez.com/) pour obtenir de l'aide. Présentez **clairement** l'erreur que le compilateur vous renvoi dans votre post.
1074
1076
1075
1077
### À quoi servent les mot-clés `if let` ?
1076
1078
@@ -1093,7 +1095,7 @@ C'est un moyen simple et efficace d'assigner du contenu sans passer par le patte
1093
1095
1094
1096
### À quoi servent les mot-clés `while let` ?
1095
1097
1096
-
La combinaison des deux mot-clés permet d'effectuer des tests de manière concise et ainsi nous éviter de passer par le pattern matching lorsque ça n'est pas nécessaire. (`while let` peuvent s'avérer très utiles lorsqu'il faut tester à chaque itération si le fichier contient toujours quelque chose)
1098
+
La combinaison des deux mot-clés permet d'effectuer des tests concis et ainsi nous éviter de passer par le pattern matching lorsque cela n'est pas nécessaire. (`while let` peuvent s'avérer très utiles lorsqu'il faut tester à chaque itération si le fichier contient toujours quelque chose)
1097
1099
1098
1100
**[Exemple de la documentation officielle]**
1099
1101
@@ -1552,7 +1554,7 @@ Vous pouvez également préciser quelle bibliothèque mettre à jour séparémen
1552
1554
1553
1555
Pour créer nos benchmark, donc, nous allons utiliser le paquet [bencher](https://crates.io/crates/bencher).
1554
1556
1555
-
Ce module était premièrement connu sous le nom de "tester puis bencher", qui sera porté en tant que dépendance externe pour éviter les effets de bord dans les versions stables du langage.
1557
+
Ce module était premièrement connu sous le nom de "test" puis sera rebaptisé "bencher", qui sera porté en tant que dépendance externe pour éviter les effets de bord dans les versions stables du langage.
0 commit comments