Patrones de Desarrollo Rust
Patrones idiomáticos y buenas prácticas de Rust para construir aplicaciones seguras, eficientes y mantenibles.
Cuándo Usar
- Escribir código Rust nuevo
- Revisar código Rust
- Refactorizar código Rust existente
- Diseñar la estructura de crates y la organización de módulos
Cómo Funciona
Este skill refuerza las convenciones idiomáticas de Rust en seis áreas clave: ownership y borrowing para prevenir data races en tiempo de compilación, propagación de errores con Result/? usando thiserror para bibliotecas y anyhow para aplicaciones, enums y pattern matching exhaustivo para hacer imposibles los estados inválidos, traits y genéricos para abstracciones de costo cero, concurrencia segura con Arc<Mutex<T>>, canales y async/await, y superficies pub mínimas organizadas por dominio.
Principios Fundamentales
1. Ownership y Borrowing
El sistema de ownership de Rust previene data races y bugs de memoria en tiempo de compilación.
Usar Cow para Ownership Flexible
Manejo de Errores
Usar Result y ? — Nunca unwrap() en Producción
Errores de Biblioteca con thiserror, Errores de Aplicación con anyhow
Combinadores de Option en Lugar de Matching Anidado
Enums y Pattern Matching
Modelar Estados con Enums
Matching Exhaustivo — Sin Comodín en Lógica de Negocio
Traits y Genéricos
Aceptar Genéricos, Retornar Tipos Concretos
Trait Objects para Dispatch Dinámico
Patrón Newtype para Seguridad de Tipos
Structs y Modelado de Datos
Patrón Builder para Construcción Compleja
Iteradores y Closures
Preferir Cadenas de Iteradores sobre Bucles Manuales
Usar collect() con Anotación de Tipo
Concurrencia
Arc<Mutex<T>> para Estado Mutable Compartido
Canales para Paso de Mensajes
Async con Tokio
Código Unsafe
Cuándo Unsafe Es Aceptable
Cuándo Unsafe NO Es Aceptable
Sistema de Módulos y Estructura de Crates
Organizar por Dominio, No por Tipo
Visibilidad — Exponer el Mínimo
Integración con Herramientas
Comandos Esenciales
Referencia Rápida: Modismos Rust
Anti-Patrones a Evitar
Recuerda: Si compila, probablemente es correcto — pero solo si evitas unwrap(), minimizas unsafe y dejas que el sistema de tipos trabaje para ti.

