Pourquoi Rust n'est pas qu'un langage à la mode, mais un véritable cheval de bataille ?
\n\nRust est reconnu depuis plusieurs années comme le langage de programmation le plus apprécié selon Stack Overflow. Mais derrière cet engouement se cache un écosystème puissant — les bibliothèques Rust, qui transforment ce langage système sécurisé en un outil universel. Si vous codez en Python et que vous vous intéressez à Rust pour des microservices à forte charge, des utilitaires CLI ou du traitement de données, cet article est pour vous.
\n\nNous n'allons pas énumérer les 100 000+ crates (c'est ainsi que l'on nomme les paquets en Rust). À la place, je vais vous présenter les 10 bibliothèques Rust les plus utiles qui accélèrent réellement le développement. Vous verrez des exemples de code, découvrirez les problèmes que chaque bibliothèque résout, et comprendrez par où commencer votre immersion dans l'écosystème Rust.
\n\n1. Serde — le roi de la sérialisation
\n\nSi vous travaillez avec JSON, YAML, TOML ou tout autre format de données, vous avez besoin de serde. Ce n'est pas qu'une simple bibliothèque, mais un véritable framework de sérialisation et désérialisation de structures de données. Serde est à la base de milliers d'autres crates et constitue le standard de facto.
Exemple : transformons une structure Rust en JSON et inversement.
\n\nuse serde::{Serialize, Deserialize};\n\n#[derive(Serialize, Deserialize, Debug)]\nstruct User {\n name: String,\n age: u8,\n email: String,\n}\n\nfn main() {\n let user = User {\n name: "Алексей".into(),\n age: 30,\n email: "alex@example.com".into(),\n };\n\n // Sérialisation en JSON\n let json = serde_json::to_string(&user).unwrap();\n println!("JSON: {}", json);\n\n // Désérialisation inverse\n let decoded: User = serde_json::from_str(&json).unwrap();\n println!("Decoded: {:?}", decoded);\n}\n\nRemarque : Serde fonctionne avec tous les formats — il suffit d'ajouter le crate adaptateur (serde_json, serde_yaml, etc.). C'est l'une des bibliothèques Rust les plus populaires avec des millions de téléchargements.
2. Tokio — le runtime asynchrone
\n\nPour écrire des applications réseau haute performance en Rust, on utilise l'asynchrone. Tokio est le principal runtime asynchrone, fournissant un exécuteur multi-thread, des minuteurs, des entrées-sorties réseau et des canaux. Sans Tokio, l'écosystème Rust moderne est inimaginable.
\n\nUn simple serveur TCP echo avec Tokio :
\n\nuse tokio::net::TcpListener;\nuse tokio::io::{AsyncReadExt, AsyncWriteExt};\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n let listener = TcpListener::bind("127.0.0.1:8080").await?;\n println!("Serveur démarré sur le port 8080");\n\n loop {\n let (mut socket, _) = listener.accept().await?;\n tokio::spawn(async move {\n let mut buf = [0; 1024];\n loop {\n let n = socket.read(&mut buf).await.unwrap();\n if n == 0 { break; }\n socket.write_all(&buf[0..n]).await.unwrap();\n }\n });\n }\n}\n\nTokio est utilisé dans les frameworks web (Actix, Warp), les bases de données (TiKV) et même dans les outils Kubernetes. Si vous cherchez des bibliothèques Rust pour le développement web, Tokio sera votre fondation.
\n\n3. Reqwest — un client HTTP pour les humains
\n\nreqwest est un client HTTP élégant, construit sur Tokio. Il prend en charge les requêtes asynchrones et bloquantes, JSON, le multipart et les proxys. Idéal pour écrire des crawlers, des intégrations d'API et des tests.
Requête GET asynchrone avec réponse JSON :
\n\nuse reqwest::Client;\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n let client = Client::new();\n let resp = client\n .get("https://api.github.com/repos/rust-lang/rust")\n .header("User-Agent", "my-rust-app")\n