⌘ REFERENCIA · 65 elementos
Cheatsheet de Rust
El lenguaje entero en un sitio: ownership, traits, async, unsafe y el tooling. Busca por sintaxis o por lo que quieres hacer.
🦀 Sintaxis básica 5
Inmutable / mutablelet x = 5; · let mut y = 5;
Funciónfn f(x: i32) -> i32 { x }
Pattern matching exhaustivomatch x { 1 => …, _ => … }
Desenvolver un patrónif let Some(v) = opt { … }
Tipos compuestosstruct P { x: i32 } · enum E { A, B }
🔑 Ownership y borrowing 5
Move: a deja de ser válido (si no es Copy)let b = a;
Préstamo compartido / mutable&x · &mut x
Anotación de lifetimefn f<'a>(x: &'a str)
Copia explícita (cuando el move no vale)x.clone()
Dueño (heap) vs préstamo (vista)String vs &str
🧩 Tipos y traits 6
Definir un traittrait T { fn m(&self); }
Implementar un traitimpl T for Tipo { … }
Genérico con boundfn f<T: Display>(x: T)
Trait object (dispatch dinámico)dyn Trait · Box<dyn T>
Derivar traits del sistema#[derive(Debug, Clone)]
Tipo asociadotype Item; (associated)
🔁 Colecciones e iteradores 5
ColeccionesVec<T> · HashMap<K,V>
Cadena de iteradores (lazy)map().filter().collect()
Reducir a un valorfold(0, |a, x| a + x)
Closure|x| x + 1
Materializar con turbofishcollect::<Vec<_>>()
⚠️ Errores 5
Fallo / ausencia como valorResult<T, E> · Option<T>
Propagar el error hacia arribalet v = f()?;
Extraer o panic (¡cuidado!)x.unwrap() / .expect("…")
Valor por defectox.unwrap_or(default)
Errores de librería / de appthiserror / anyhow
🔐 Concurrencia 5
Crear un hilothread::spawn(move || …)
Estado compartido y mutable entre hilosArc<Mutex<T>>
Seguridad entre hilos (auto-traits)Send / Sync
Paso de mensajesmpsc::channel()
Hilos que toman prestado del padrethread::scope(|s| …)
⚡ Async 6
Función asíncrona (devuelve Future)async fn f() -> T
Esperar sin bloquearx.await
Arrancar el runtime Tokio#[tokio::main]
Lanzar una tarea asynctokio::spawn(fut)
Esperar varias / la primerajoin! · select!
Depurar asynctokio-console · tracing
📦 Punteros y memoria 5
Valor en el heapBox<T>
Propiedad compartida (un hilo / multi-hilo)Rc<T> · Arc<T>
Interior mutabilityRefCell<T> · Cell<T>
Valor que no se puede moverPin<P>
Referencia débil (rompe ciclos)Weak<T>
🔓 Unsafe y FFI 6
Desbloquear los 5 superpoderesunsafe { … }
Punteros crudos*const T · *mut T
Declarar funciones Cunsafe extern "C" { … }
Layout compatible con C#[repr(C)]
Exportar a C sin decorar el nombre#[unsafe(no_mangle)]
Justificar cada bloque unsafe// SAFETY: …
🔩 no_std y macros 6
Rust sin librería estándar (core)#![no_std]
Recuperar Vec/Box con un allocatorextern crate alloc;
Definir el allocator global#[global_allocator]
Macro declarativamacro_rules! m { … }
Macro procedural (syn + quote)#[proc_macro_derive(X)]
Programación a nivel de tiposPhantomData · typestate
🛠️ Cargo y testing 6
Crear, compilar, ejecutarcargo new / build / run
Build optimizadocargo build --release
Unit, integration y doc testscargo test
Linter y formateocargo clippy · fmt
Compilación condicional[features] · #[cfg(feature)]
Dependencias / publicar en crates.iocargo add / publish
🔬 Herramientas 5
El LSP (autocompletado, análisis)rust-analyzer
Perfilar CPU / benchmarkssamply · criterion
Ver el código que generan las macroscargo expand
Detectar UB en código unsafeMiri
Ver los IR del compiladorcargo --emit=mir / llvm-ir