Guía de estilo de Rust
La nueva guía de estilo de Rust de Google está provocando un debate sobre si las convenciones estrictas orientadas a humanos siguen importando cuando los grandes codebases se escriben y revisan cada vez más con ayuda de IA. Muchos comentaristas sostienen que las APIs consistentes, la estructura de crates y patrones (como preferir enums frente a bools, crates pequeños y una propiedad clara frente a Rc/Arc) son aún más importantes para la legibilidad, la seguridad y la coordinación en equipos grandes, especialmente en monorepos y sistemas distribuidos. El hilo también se amplía hacia un argumento más general sobre el papel de Rust frente a C y C++, el mantenimiento a largo plazo en un mundo asistido por IA y cuánto peso dar hoy a las directrices de ingeniería de Google.
Papel de las guías de estilo en una era de LLM/“agentic”
- Algunos sostienen que las guías de estilo son menos relevantes porque el código será generado por LLM y se leerá sobre todo mediante explicaciones de IA, no directamente por humanos.
- Otros replican con fuerza que:
- El estilo sigue importando para la legibilidad, el mantenimiento a largo plazo y el trabajo entre equipos.
- Un diseño consistente de la API y de la implementación es útil independientemente de quién escriba el código.
- En un mundo “agentic”, reglas claras ayudan a los humanos a revisar y controlar de forma significativa la salida de la IA.
- Algunos cuentan que les dan guías de estilo a los LLM; los modelos no siempre las siguen, y hacerlas cumplir manualmente es difícil sin una autoridad fuerte o linters automatizados.
Rust frente a C/C++ y el futuro
- Debate sobre si todavía se sigue escribiendo nuevo C/C++:
- Muchos dicen que sí: defensa, sistemas embebidos, HPC, juegos, grandes bases de código existentes y proyectos importantes siguen usando C/C++ de forma intensa.
- Otros afirman que Rust está “comiéndose” a C/C++, especialmente en sistemas nuevos y sensibles a la seguridad, con algunas empresas “all in” con Rust.
- Contraargumentos:
- Los ecosistemas (por ejemplo, desarrollo de juegos) tardarán muchos años en migrar, si es que alguna vez lo hacen.
- Ciertos dominios (rendimiento extremo, diseños orientados a datos) pueden encontrar el borrow checker de Rust costoso ergonómicamente en comparación con C++.
- Algunos creen que los LLM harán que la elección del lenguaje importe menos, o incluso relegarán Rust a una representación intermedia.
Reglas específicas de estilo en debate
- Enums vs bools: Muy apreciados; los enums restringen la interpretación y evitan banderas confusas.
- Rc/Arc vs lifetimes:
- Un bando: usar Rc/Arc libremente para datos que salen de la pila; los lifetimes son “raros”.
- Otro bando: la propiedad compartida oculta quién posee qué; los lifetimes son más claros y Rc/Arc debería reservarse para necesidades genuinas de compartición.
- Nombres de getters/setters:
- La guía prefiere nombres de método desnudos para los getters y
set_/estilo builder para los setters, en línea con la stdlib/protos de Rust. - Algunos prefieren lo contrario por fluidez y coherencia en APIs de estilo builder para UI/TUI.
- La guía prefiere nombres de método desnudos para los getters y
- Enums
#[non_exhaustive]:- Críticos: socavan la comprobación de exhaustividad y convierten la seguridad en tiempo de compilación en errores en tiempo de ejecución.
- Partidarios (especialmente a “escala Google” y en sistemas distribuidos): necesarios para la evolución de APIs y para evitar cambios rompientes masivos entre muchos equipos; combinados con lints para señalar patrones omitidos.
Prácticas específicas de Google/Chromium
- Preferencia por muchos crates pequeños y por evitar anidamientos profundos de módulos:
- Justificación: compilaciones más rápidas y paralelizables; dependencias más granulares; mejor capacidad de caché con Blaze/Bazel (sin compilación incremental de crates).
- Desaconsejar async/await en Rust para Chromium por ahora.
- Énfasis en distinguir entre código de biblioteca y de aplicación, y en reglas que sean aplicables de forma uniforme a escala de gran empresa, aunque no siempre sean “ideales” para proyectos pequeños.
Detalles de herramientas y nombres
- rustfmt existe, pero la guía cubre preocupaciones más amplias de diseño/estilo.
- Hay desacuerdo sobre:
- Importar tipos sin calificar frente a usar nombres totalmente calificados para mayor claridad.
- El uso de mayúsculas/minúsculas en literales hexadecimales (la guía prefiere minúsculas) y otros pequeños ajustes de legibilidad.