¿Por qué Rust no es solo un lenguaje de moda, sino un caballo de batalla?
\n\nRust ha sido reconocido durante varios años consecutivos como el lenguaje de programación más querido según Stack Overflow. Pero detrás de este cariño de la comunidad hay un ecosistema potente: las bibliotecas de Rust, que convierten un lenguaje de sistema seguro en una herramienta universal. Si escribes en Python y estás considerando Rust para microservicios de alta carga, utilidades CLI o procesamiento de datos, este artículo es para ti.
\n\nNo enumeraremos los más de 100,000 crates (así se llaman los paquetes en Rust). En su lugar, te mostraré las 10 bibliotecas de Rust más útiles que realmente aceleran el desarrollo. Verás ejemplos de código, conocerás qué problemas resuelve cada biblioteca y entenderás por dónde empezar a sumergirte en el mundo del ecosistema de Rust.
\n\n1. Serde — el rey de la serialización
\n\nSi trabajas con JSON, YAML, TOML o cualquier otro formato de datos, necesitas serde. No es solo una biblioteca, sino un framework completo para la serialización y deserialización de estructuras de datos. Serde está en la base de miles de otros crates y es el estándar de facto.
Ejemplo: convertimos una estructura de Rust a JSON y viceversa.
\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: "Alexey".into(),\n age: 30,\n email: "alex@example.com".into(),\n };\n\n // Serialización a JSON\n let json = serde_json::to_string(&user).unwrap();\n println!("JSON: {}", json);\n\n // Deserialización de vuelta\n let decoded: User = serde_json::from_str(&json).unwrap();\n println!("Decoded: {:?}", decoded);\n}\n\nTen en cuenta: Serde funciona con cualquier formato — solo necesitas conectar el crate adaptador (serde_json, serde_yaml, etc.). Es una de las bibliotecas de Rust más populares con millones de descargas.
2. Tokio — runtime asíncrono
\n\nPara escribir aplicaciones de red de alto rendimiento en Rust se utiliza la asincronía. Tokio es el runtime asíncrono principal, que proporciona un ejecutor multihilo, temporizadores, entrada/salida de red y canales. Sin Tokio, el ecosistema de Rust moderno sería inimaginable.
\n\nUn servidor TCP echo simple con 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!("Servidor iniciado en el puerto 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 se utiliza en frameworks web (Actix, Warp), bases de datos (TiKV) e incluso en herramientas de Kubernetes. Si buscas bibliotecas de Rust para desarrollo web, Tokio será tu base.
\n\n3. Reqwest — cliente HTTP para humanos
\n\nreqwest es un elegante cliente HTTP construido sobre Tokio. Soporta solicitudes asíncronas y bloqueantes, JSON, multipart y proxies. Es ideal para escribir crawlers, integraciones con API y pruebas.
Solicitud GET asíncrona con respuesta 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