
Programmation Rust
Description
Introduction au livre
Il couvre des fonctionnalités plus avancées et est plus convivial que le « Guide officiel de la programmation Rust » !
Ce livre montre comment les fonctionnalités de Rust, qui allient sécurité de la mémoire et concurrence fiable à des performances prévisibles, offrent aux programmeurs un meilleur contrôle sur la consommation de mémoire et l'utilisation du processeur.
Les programmeurs système expérimentés trouveront ce guide pratique utile pour apprendre à concilier avec succès performance et sécurité en Rust.
Ce livre montre comment les fonctionnalités de Rust, qui allient sécurité de la mémoire et concurrence fiable à des performances prévisibles, offrent aux programmeurs un meilleur contrôle sur la consommation de mémoire et l'utilisation du processeur.
Les programmeurs système expérimentés trouveront ce guide pratique utile pour apprendre à concilier avec succès performance et sécurité en Rust.
- Vous pouvez consulter un aperçu du contenu du livre.
Aperçu
indice
Préface du traducteur xii
Revue du lecteur bêta xvi
À partir de 19
CHAPITRE 1 : Programmeurs système, prenez votre envol avec des outils incontournables
Sécurité 3 : Réduire la charge de travail des programmeurs
Programmation parallèle 4 : Faites ce que vous voulez
Néanmoins, un rythme effréné à ne pas manquer
5 environnements de développement qui facilitent la collaboration
CHAPITRE 2 : Visite de Rust 6
Rustup et Cargo 7
Fonction Rust 10
Écrire et exécuter des tests unitaires 12
Gestion des arguments de ligne de commande 13
Création d'un service Web 18
Simultanéité 24
Système de fichiers et outils en ligne de commande 45
CHAPITRE 3 Types de base 54
Type numérique 57 de taille fixe
booléen type 67
Caractère 67
Tuple 69
Pointeur de type 71
Tableaux, vecteurs et tranches 74
Type de chaîne 81
Alias de type 88
Aller plus loin 88
CHAPITRE 4 : Posséder et déménager 89
Propriété 91
Déplacement 96
Type de copie : Exception au déplacement 107
Rc et Arc : Propriété partagée 110
CHAPITRE 5 RÉFÉRENCES 114
Référence à la valeur 115
Références de manipulation 119
Sécurité de référence 125
Partagé contre
Changer 140
Face à la mer des objets 148
CHAPITRE 6 EXPRESSIONS 151
Langage d'expression 151
Priorité et associativité 153
Blocs et points-virgules 155
Déclaration 157
si et correspond à 159
si soit 162
Boucle 162
Flux de contrôle dans les boucles 164
retourner l'expression 166
Pourquoi Rust a des boucles 167
Appel de fonctions et de méthodes 169
Champs et éléments 171
Opérateur de référence 173
Opérateurs arithmétiques, bit à bit, de comparaison et logiques 173
Devoir 175
Moulage de caractères 175
Clojure 177
En avant, en avant ! 178
CHAPITRE 7 Gestion des erreurs 179
Panique 179
Résultat 182
CHAPITRE 8 CAISSES ET MODULES 198
Caisse 199
Module 204
Conversion d'un programme en bibliothèque 216
répertoire src/bin 218
Attribut 220
Tests et documentation 223
Spécification des dépendances 233
Publication d'une caisse sur crates.io 237
Espace de travail 239
Plus de choses cool 240
CHAPITRE 9 Structure 242
Structure 243 avec champs nommés
Structure de type tuple 246
Structure de type unité 247
Plan de structure 248
Définition des méthodes avec Impl 249
Constante d'association 254
Structure générique 255
Structure générique 257 avec paramètres de durée de vie
Structures génériques à paramètres constants 259
Implémentation des traits communs dans les types de structures 262
Variabilité interne 263
CHAPITRE 10 : Inium et motifs 268
Inium 269
Modèle 280
Vue d'ensemble 295
CHAPITRE 11 : CARACTÉRISTIQUES ET GÉNÉRIQUES 297
Utilisation des traits 299
Définition et mise en œuvre des traits 311
Appel de méthode avec tous les qualificateurs 321
Caractéristique 323, qui définit les relations entre les types
Ingénierie inverse liée 332
Caractéristique en tant que fondement 336
CHAPITRE 12 Surcharge de l'opérateur 337
Opérateurs arithmétiques et binaires 339
Comparaison équivalente 345
Comparaison des commandes 349
Index et IndexMut 352
Autres opérateurs 355
CHAPITRE 13 CARACTÉRISTIQUES D'UTILITÉ 357
Chute 359
Taille 362
Clone 366
Copie 367
Deref et DerefMut 368
Valeur par défaut 372
AsRef et AsMut 374
Emprunter et EmprunterMut 376
De et dans 378
TryFrom et TryInto 382
ToOwned 383
Emprunter + Posséder = Vache 384
CHAPITRE 14 Clôture 387
Capture des variables 389
Types de fonctions et de fermetures 392
Performance Clojure 395
Fermetures et sécurité 396
Rappel 403
Utilisation efficace de la fermeture 408
CHAPITRE 15 Itérateurs 411
Traits Iterator et IntoIterator 413
Création d'un itérateur 415
Adaptateur d'itérateur 423
Itérateurs consommateurs 443
Implémentation de votre propre itérateur 460
CHAPITRE 16 COLLECTION 466
Parcourir 467
Vec〈T〉 468
VecDeque〈T〉 486
Tas binaire〈T〉 489
HashMap〈KV〉 et BTreeMap〈KV〉 490
HashSet〈T〉 et BTreeSet〈T〉 498
Hachage 502
Utilisation d'un algorithme de hachage personnalisé 504
Allant plus loin que la collection standard 506
CHAPITRE 17 Chaînes de caractères et texte 507
Quelques informations générales sur Unicode 508
caractère 511
Chaîne et str 516
Valeurs de mise en forme 537
Expression régulière 552
Normalisation 555
CHAPITRE 18 Entrée et sortie 559
Leader et écrivain 560
Fichiers et répertoires 577
Réseautage 587
CHAPITRE 19 : Concurrence 590
Traitement parallèle Fork-Join 592
Canal 605
État partagé modifiable 620
Voici ce que signifie écrire du code concurrent en Rust 638
CHAPITRE 20 Programmation asynchrone 639
641 du synchrone à l'asynchrone
Client et serveur asynchrones 667
Contrats à terme intégrés et exécuteurs : quand est-il prudent de réévaluer les contrats à terme ? 689
Réglage de la broche 695
Quand est-il approprié d'utiliser du code asynchrone ? 703
CHAPITRE 21 Macro 706
Principes de base des macros 708
Macro intégrée 715
Débogage des macros 718
Création d'une macro JSON ! 719
Éviter les erreurs de syntaxe lors de la correspondance 733
On va encore plus loin avec les macro-règles ! 734
CHAPITRE 22 Code dangereux 736
Qu'est-ce qui vous met en danger ? 737
Bloc 739 non sécurisé
Exemple : Type de chaîne ASCII efficace 740
Fonction non sécurisée 743
Blocs non sécurisés vs. Fonctions non sécurisées 745
Action indéfinie 746
Caractéristique dangereuse 749
Pointeur brut 751
Réinterpréter la mémoire avec les syndicats 774
Correspondance syndicale 777
Emprunt syndical 777
CHAPITRE 23 Fonctions externes 778
Trouver des représentations de données communes 779
Déclaration des fonctions et variables externes 783
Utilisation des fonctions de la bibliothèque 785
Interface brute pour libgit2 790
Interface sécurisée 797 de libgit2
Conclusion 810
Recherche 812
Revue du lecteur bêta xvi
À partir de 19
CHAPITRE 1 : Programmeurs système, prenez votre envol avec des outils incontournables
Sécurité 3 : Réduire la charge de travail des programmeurs
Programmation parallèle 4 : Faites ce que vous voulez
Néanmoins, un rythme effréné à ne pas manquer
5 environnements de développement qui facilitent la collaboration
CHAPITRE 2 : Visite de Rust 6
Rustup et Cargo 7
Fonction Rust 10
Écrire et exécuter des tests unitaires 12
Gestion des arguments de ligne de commande 13
Création d'un service Web 18
Simultanéité 24
Système de fichiers et outils en ligne de commande 45
CHAPITRE 3 Types de base 54
Type numérique 57 de taille fixe
booléen type 67
Caractère 67
Tuple 69
Pointeur de type 71
Tableaux, vecteurs et tranches 74
Type de chaîne 81
Alias de type 88
Aller plus loin 88
CHAPITRE 4 : Posséder et déménager 89
Propriété 91
Déplacement 96
Type de copie : Exception au déplacement 107
Rc et Arc : Propriété partagée 110
CHAPITRE 5 RÉFÉRENCES 114
Référence à la valeur 115
Références de manipulation 119
Sécurité de référence 125
Partagé contre
Changer 140
Face à la mer des objets 148
CHAPITRE 6 EXPRESSIONS 151
Langage d'expression 151
Priorité et associativité 153
Blocs et points-virgules 155
Déclaration 157
si et correspond à 159
si soit 162
Boucle 162
Flux de contrôle dans les boucles 164
retourner l'expression 166
Pourquoi Rust a des boucles 167
Appel de fonctions et de méthodes 169
Champs et éléments 171
Opérateur de référence 173
Opérateurs arithmétiques, bit à bit, de comparaison et logiques 173
Devoir 175
Moulage de caractères 175
Clojure 177
En avant, en avant ! 178
CHAPITRE 7 Gestion des erreurs 179
Panique 179
Résultat 182
CHAPITRE 8 CAISSES ET MODULES 198
Caisse 199
Module 204
Conversion d'un programme en bibliothèque 216
répertoire src/bin 218
Attribut 220
Tests et documentation 223
Spécification des dépendances 233
Publication d'une caisse sur crates.io 237
Espace de travail 239
Plus de choses cool 240
CHAPITRE 9 Structure 242
Structure 243 avec champs nommés
Structure de type tuple 246
Structure de type unité 247
Plan de structure 248
Définition des méthodes avec Impl 249
Constante d'association 254
Structure générique 255
Structure générique 257 avec paramètres de durée de vie
Structures génériques à paramètres constants 259
Implémentation des traits communs dans les types de structures 262
Variabilité interne 263
CHAPITRE 10 : Inium et motifs 268
Inium 269
Modèle 280
Vue d'ensemble 295
CHAPITRE 11 : CARACTÉRISTIQUES ET GÉNÉRIQUES 297
Utilisation des traits 299
Définition et mise en œuvre des traits 311
Appel de méthode avec tous les qualificateurs 321
Caractéristique 323, qui définit les relations entre les types
Ingénierie inverse liée 332
Caractéristique en tant que fondement 336
CHAPITRE 12 Surcharge de l'opérateur 337
Opérateurs arithmétiques et binaires 339
Comparaison équivalente 345
Comparaison des commandes 349
Index et IndexMut 352
Autres opérateurs 355
CHAPITRE 13 CARACTÉRISTIQUES D'UTILITÉ 357
Chute 359
Taille 362
Clone 366
Copie 367
Deref et DerefMut 368
Valeur par défaut 372
AsRef et AsMut 374
Emprunter et EmprunterMut 376
De et dans 378
TryFrom et TryInto 382
ToOwned 383
Emprunter + Posséder = Vache 384
CHAPITRE 14 Clôture 387
Capture des variables 389
Types de fonctions et de fermetures 392
Performance Clojure 395
Fermetures et sécurité 396
Rappel 403
Utilisation efficace de la fermeture 408
CHAPITRE 15 Itérateurs 411
Traits Iterator et IntoIterator 413
Création d'un itérateur 415
Adaptateur d'itérateur 423
Itérateurs consommateurs 443
Implémentation de votre propre itérateur 460
CHAPITRE 16 COLLECTION 466
Parcourir 467
Vec〈T〉 468
VecDeque〈T〉 486
Tas binaire〈T〉 489
HashMap〈KV〉 et BTreeMap〈KV〉 490
HashSet〈T〉 et BTreeSet〈T〉 498
Hachage 502
Utilisation d'un algorithme de hachage personnalisé 504
Allant plus loin que la collection standard 506
CHAPITRE 17 Chaînes de caractères et texte 507
Quelques informations générales sur Unicode 508
caractère 511
Chaîne et str 516
Valeurs de mise en forme 537
Expression régulière 552
Normalisation 555
CHAPITRE 18 Entrée et sortie 559
Leader et écrivain 560
Fichiers et répertoires 577
Réseautage 587
CHAPITRE 19 : Concurrence 590
Traitement parallèle Fork-Join 592
Canal 605
État partagé modifiable 620
Voici ce que signifie écrire du code concurrent en Rust 638
CHAPITRE 20 Programmation asynchrone 639
641 du synchrone à l'asynchrone
Client et serveur asynchrones 667
Contrats à terme intégrés et exécuteurs : quand est-il prudent de réévaluer les contrats à terme ? 689
Réglage de la broche 695
Quand est-il approprié d'utiliser du code asynchrone ? 703
CHAPITRE 21 Macro 706
Principes de base des macros 708
Macro intégrée 715
Débogage des macros 718
Création d'une macro JSON ! 719
Éviter les erreurs de syntaxe lors de la correspondance 733
On va encore plus loin avec les macro-règles ! 734
CHAPITRE 22 Code dangereux 736
Qu'est-ce qui vous met en danger ? 737
Bloc 739 non sécurisé
Exemple : Type de chaîne ASCII efficace 740
Fonction non sécurisée 743
Blocs non sécurisés vs. Fonctions non sécurisées 745
Action indéfinie 746
Caractéristique dangereuse 749
Pointeur brut 751
Réinterpréter la mémoire avec les syndicats 774
Correspondance syndicale 777
Emprunt syndical 777
CHAPITRE 23 Fonctions externes 778
Trouver des représentations de données communes 779
Déclaration des fonctions et variables externes 783
Utilisation des fonctions de la bibliothèque 785
Interface brute pour libgit2 790
Interface sécurisée 797 de libgit2
Conclusion 810
Recherche 812
Image détaillée

Dans le livre
Le traducteur, qui aime tout voir sous un angle décalé, a eu des doutes tout au long du processus de traduction de ce livre en coréen, se disant : « Si je suis prudent, autant écrire du code sûr en C++. » Mais à chaque fois, cette phrase écrite par l'auteur expérimenté au début du chapitre 1 lui revenait en mémoire.
« Dire qu'on peut éviter les comportements indéfinis en C et C++ revient à dire qu'on peut gagner une partie d'échecs parce qu'on connaît les règles. » Je ne pouvais pas contester cela.
--- p.xiv
Le mot « paresseux » dans ce message d'erreur n'est pas péjoratif, mais plutôt un terme argotique de notre secteur pour désigner tout mécanisme qui reporte le calcul jusqu'à ce que la valeur soit réellement nécessaire.
En Rust, il est d'usage qu'un itérateur n'effectue que le minimum de travail nécessaire pour satisfaire chaque appel suivant, mais dans l'exemple précédent, il n'y a pas d'appel suivant du tout, donc rien ne se passe.
--- p.426
Bien sûr, la recherche binaire ne fonctionne que si les tranches sont effectivement triées dans l'ordre spécifié.
Sinon, les résultats seront aléatoires.
C'est comme dire : « Là où vous plantez des haricots, des haricots pousseront, et là où vous plantez des haricots rouges, des haricots rouges pousseront » (on récolte ce qu'on sème).
--- p.483
Au début, écrire du code concurrent est facile et amusant.
Des outils comme les threads, les verrous et les files d'attente sont faciles à choisir et à utiliser sans aucune hésitation.
Il est vrai qu'il existe de nombreux pièges, mais heureusement, ce sont tous des problèmes bien connus, il suffit donc de faire attention à ne pas commettre d'erreurs.
Puis, au fil du temps, lorsque vous vous retrouvez à devoir déboguer le code multithread de quelqu'un d'autre, vous arrivez, à moitié volontairement, à moitié involontairement, à la conclusion qu'il ne faut vraiment pas laisser tout le monde avoir ces outils entre les mains.
Et lorsque vient le moment de déboguer votre propre code multithread, vous arrivez à la même conclusion.
--- p.590
Nous connaissons bien la manière dont l'accès &mut est transmis du parent à l'enfant, et du conteneur à l'élément.
Par exemple, je pense que vous pouvez appeler la méthode &mut self sur starships[id].engine uniquement si vous avez une référence &mut aux vaisseaux que vous souhaitez lancer (bien sûr, cela s'applique également si vous possédez les vaisseaux).
Félicitations, Elon Musk !
Rust adopte par défaut ce comportement familier, car il n'existe aucun moyen de forcer un enfant à avoir un accès exclusif à son parent à moins qu'il n'ait également un accès exclusif au parent.
« Dire qu'on peut éviter les comportements indéfinis en C et C++ revient à dire qu'on peut gagner une partie d'échecs parce qu'on connaît les règles. » Je ne pouvais pas contester cela.
--- p.xiv
Le mot « paresseux » dans ce message d'erreur n'est pas péjoratif, mais plutôt un terme argotique de notre secteur pour désigner tout mécanisme qui reporte le calcul jusqu'à ce que la valeur soit réellement nécessaire.
En Rust, il est d'usage qu'un itérateur n'effectue que le minimum de travail nécessaire pour satisfaire chaque appel suivant, mais dans l'exemple précédent, il n'y a pas d'appel suivant du tout, donc rien ne se passe.
--- p.426
Bien sûr, la recherche binaire ne fonctionne que si les tranches sont effectivement triées dans l'ordre spécifié.
Sinon, les résultats seront aléatoires.
C'est comme dire : « Là où vous plantez des haricots, des haricots pousseront, et là où vous plantez des haricots rouges, des haricots rouges pousseront » (on récolte ce qu'on sème).
--- p.483
Au début, écrire du code concurrent est facile et amusant.
Des outils comme les threads, les verrous et les files d'attente sont faciles à choisir et à utiliser sans aucune hésitation.
Il est vrai qu'il existe de nombreux pièges, mais heureusement, ce sont tous des problèmes bien connus, il suffit donc de faire attention à ne pas commettre d'erreurs.
Puis, au fil du temps, lorsque vous vous retrouvez à devoir déboguer le code multithread de quelqu'un d'autre, vous arrivez, à moitié volontairement, à moitié involontairement, à la conclusion qu'il ne faut vraiment pas laisser tout le monde avoir ces outils entre les mains.
Et lorsque vient le moment de déboguer votre propre code multithread, vous arrivez à la même conclusion.
--- p.590
Nous connaissons bien la manière dont l'accès &mut est transmis du parent à l'enfant, et du conteneur à l'élément.
Par exemple, je pense que vous pouvez appeler la méthode &mut self sur starships[id].engine uniquement si vous avez une référence &mut aux vaisseaux que vous souhaitez lancer (bien sûr, cela s'applique également si vous possédez les vaisseaux).
Félicitations, Elon Musk !
Rust adopte par défaut ce comportement familier, car il n'existe aucun moyen de forcer un enfant à avoir un accès exclusif à son parent à moins qu'il n'ait également un accès exclusif au parent.
--- p.626
Avis de l'éditeur
À lire absolument après le « Guide officiel de la programmation Rust » !
Le livre Rust numéro 1 sur Amazon !
La programmation système constitue le fondement du monde informatique.
L'écriture de code sensible aux performances nécessite un langage de programmation qui permette aux programmeurs de contrôler l'utilisation de la mémoire, du temps processeur et des autres ressources système.
Le langage de programmation système Rust combine ce contrôle avec un système de types moderne qui détecte un large éventail d'erreurs, allant des erreurs de gestion de la mémoire aux conflits d'accès aux données entre les threads.
Ce livre montre comment les fonctionnalités de Rust, qui allient sécurité de la mémoire et concurrence fiable à des performances prévisibles, offrent aux programmeurs un meilleur contrôle sur la consommation de mémoire et l'utilisation du processeur.
Les programmeurs système expérimentés trouveront ce guide pratique utile pour apprendre à concilier avec succès performance et sécurité en Rust.
• Les types de données de base de Rust et les concepts fondamentaux de propriété et d'emprunt
• Comment écrire du code flexible et efficace en utilisant les traits et les génériques
Comment écrire du code multithread rapide sans contention de données
Les outils principaux de Rust : les fermetures, les itérateurs et la programmation asynchrone
Collections, chaînes de caractères et texte, entrées et sorties, macros, code non sécurisé, interfaces de fonctions externes
Le livre Rust numéro 1 sur Amazon !
La programmation système constitue le fondement du monde informatique.
L'écriture de code sensible aux performances nécessite un langage de programmation qui permette aux programmeurs de contrôler l'utilisation de la mémoire, du temps processeur et des autres ressources système.
Le langage de programmation système Rust combine ce contrôle avec un système de types moderne qui détecte un large éventail d'erreurs, allant des erreurs de gestion de la mémoire aux conflits d'accès aux données entre les threads.
Ce livre montre comment les fonctionnalités de Rust, qui allient sécurité de la mémoire et concurrence fiable à des performances prévisibles, offrent aux programmeurs un meilleur contrôle sur la consommation de mémoire et l'utilisation du processeur.
Les programmeurs système expérimentés trouveront ce guide pratique utile pour apprendre à concilier avec succès performance et sécurité en Rust.
• Les types de données de base de Rust et les concepts fondamentaux de propriété et d'emprunt
• Comment écrire du code flexible et efficace en utilisant les traits et les génériques
Comment écrire du code multithread rapide sans contention de données
Les outils principaux de Rust : les fermetures, les itérateurs et la programmation asynchrone
Collections, chaînes de caractères et texte, entrées et sorties, macros, code non sécurisé, interfaces de fonctions externes
SPÉCIFICATIONS DES PRODUITS
- Date d'émission : 16 janvier 2023
Nombre de pages, poids, dimensions : 852 pages | 1 586 g | 188 × 257 × 41 mm
- ISBN13 : 9791192469751
- ISBN10 : 1192469755
Vous aimerez peut-être aussi
카테고리
Langue coréenne
Langue coréenne