Cuando empecé a explorar Rust como lenguaje para herramientas de línea de comandos, venía con la mentalidad de alguien que había pasado años en Python y Java. Las primeras semanas fueron frustrantes: el compilador parecía diseñado para rechazar exactamente el código que mi intuición me dictaba escribir.
Meses después, entiendo que esa fricción inicial era precisamente el punto.
¿Por qué CLI tools en Rust?
La respuesta corta: porque cuando una herramienta de desarrollo tarda 3 segundos en ejecutarse, pierdes la fluidez del pensamiento. Las mejores herramientas son invisibles —responden antes de que tu cerebro registre que las has invocado.
Rust ofrece un perfil de rendimiento que compite con C/C++ pero con garantías de seguridad de memoria en tiempo de compilación. Para herramientas CLI esto se traduce en:
- Arranque instantáneo: sin JVM, sin intérprete Python, sin GC.
- Binarios autocontenidos: un solo ejecutable sin dependencias externas.
- Consumo de memoria predecible: sin peaks de GC en momentos críticos.
Un ejemplo práctico: procesador de logs académicos
Para mi uso en investigación, escribí una herramienta que procesa los logs de Moodle exportados en CSV y genera informes de actividad del alumnado. La primera versión en Python tardaba ~4 segundos en procesar archivos de 100k líneas. La versión Rust equivalente: 180ms.
use std::fs::File;
use std::io::{BufRead, BufReader};
use std::collections::HashMap;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let file = File::open("moodle_logs.csv")?;
let reader = BufReader::new(file);
let mut activity: HashMap<String, u32> = HashMap::new();
for line in reader.lines().skip(1) {
let line = line?;
let fields: Vec<&str> = line.split(',').collect();
if let Some(user) = fields.get(1) {
*activity.entry(user.to_string()).or_insert(0) += 1;
}
}
let mut sorted: Vec<_> = activity.iter().collect();
sorted.sort_by(|a, b| b.1.cmp(a.1));
for (user, count) in sorted.iter().take(10) {
println!("{}: {} acciones", user, count);
}
Ok(())
}
Lo que me resulta pedagógicamente interesante de este ejemplo es que muestra el sistema de ownership de Rust en acción: no hay gestión manual de memoria, pero tampoco hay GC. El compilador razona sobre la vida útil de cada valor.
La curva de aprendizaje como inversión
Enseño programación en CFGS y una pregunta recurrente de los alumnos es: “¿merece la pena aprender Rust?”. Mi respuesta es que Rust te hace mejor programador incluso si acabas usando otro lenguaje.
Entender por qué el borrow checker rechaza ciertos patrones te da un modelo mental más preciso sobre la gestión de recursos que se aplica en cualquier contexto. Es como aprender latin: no lo vas a usar en el día a día, pero transforma tu comprensión de la estructura del lenguaje.
Para profesionales del desarrollo que trabajan principalmente en Python o Java, recomendaría dedicar un mes a completar The Rust Book y construir una pequeña herramienta CLI. No para usarla en producción necesariamente, sino para que el ejercicio mental cambie la manera en que piensas sobre el código que escribes a diario.