Un projet d’E/S : construire un programme en ligne de commande
Ce chapitre est un récapitulatif des nombreuses compétences que vous avez acquises jusqu’ici, ainsi qu’une exploration de quelques fonctionnalités supplémentaires de la bibliothèque standard. Nous allons construire un outil en ligne de commande qui interagit avec les entrées/sorties de fichiers et de la ligne de commande pour mettre en pratique certains des concepts de Rust que vous maîtrisez désormais.
La rapidité, la sécurité, la production d’un binaire unique et la prise en charge multiplateforme de Rust en font un langage idéal pour créer des outils en ligne de commande. Pour notre projet, nous allons donc créer notre propre version du classique outil de recherche en ligne de commande grep (globally search a regular expression and print). Dans le cas d’utilisation le plus simple, grep recherche une chaîne de caractères spécifiée dans un fichier donné. Pour ce faire, grep prend en arguments un chemin de fichier et une chaîne de caractères. Ensuite, il lit le fichier, trouve les lignes qui contiennent la chaîne en argument, et affiche ces lignes.
En cours de route, nous montrerons comment faire en sorte que notre outil en ligne de commande utilise les fonctionnalités du terminal que de nombreux autres outils en ligne de commande utilisent. Nous lirons la valeur d’une variable d’environnement pour permettre à l’utilisateur de configurer le comportement de notre outil. Nous afficherons également les messages d’erreur sur le flux d’erreur standard (stderr) plutôt que sur la sortie standard (stdout), de sorte que, par exemple, l’utilisateur puisse rediriger la sortie réussie vers un fichier tout en continuant à voir les messages d’erreur à l’écran.
Un membre de la communauté Rust, Andrew Gallant, a déjà créé une version complète et très rapide de grep, appelée ripgrep. En comparaison, notre version sera assez simple, mais ce chapitre vous donnera les connaissances de base nécessaires pour comprendre un projet concret tel que ripgrep.
Notre projet grep combinera un certain nombre de concepts que vous avez appris jusqu’ici :
- Organiser le code (chapitre 7)
- Utiliser les vecteurs et les chaînes de caractères (chapitre 8)
- Gérer les erreurs (chapitre 9)
- Utiliser les traits et les durées de vie là où c’est approprié (chapitre 10)
- Écrire des tests (chapitre 11)
Nous introduirons également brièvement les fermetures, les itérateurs et les objets trait, que le chapitre 13 et le chapitre 18 couvriront en détail.