wandres.dev
Sistemas seguros, del ownership al kernel

Domina Rust
hasta nivel dios

Ownership, traits, lifetimes, async (edición 2024), unsafe/FFI, no_std, embebido, debugging y programación a nivel de tipos.

La ruta

52 niveles, de novato a dios

Cada nivel construye sobre el anterior. Sin saltos, sin huecos.

Ontología Nivel 0 · El mapa de Rust

La visión aérea: qué hace único a Rust, sus pilares (ownership, traits, seguridad) y el mapa mental del camino.

Mapa mentalPanorama

Por qué Rust Nivel 1 · seguridad sin GC, la mentalidad

Seguridad de memoria garantizada en compilación sin recolector de basura, y la mentalidad que exige.

SeguridadSin GCMentalidad

Setup y cargo Nivel 2 · rustup, cargo, edición 2024

Instalar la toolchain, cargo, y la edición 2024 (Polonius, async closures).

rustupcargoedición 2024

Variables y tipos Nivel 3 · let, mut, tipos escalares

Inmutabilidad por defecto, shadowing, tipos escalares y la inferencia de Rust.

letmuttipos

Control de flujo Nivel 4 · if, loop, while, match

if como expresión, los bucles, y la primera mirada a match.

ifloopmatch

Structs y métodos Nivel 5 · modelar datos

Structs, impl, métodos, y la diferencia con las clases de otros lenguajes.

structimplmétodos

Enums y pattern matching Nivel 6 · el superpoder de Rust

Enums con datos, match exhaustivo, if let, y modelar estados imposibles de romper.

enummatchif let

Option y Result Nivel 7 · sin null ni excepciones

Los tipos que eliminan el null y las excepciones: valores que pueden faltar o fallar, explícitos.

OptionResultsin null

Ownership Nivel 8 · move semantics

El corazón de Rust: cada valor tiene un dueño, y mover transfiere la propiedad. Sin copias ni GC.

ownershipmovedrop

Borrowing Nivel 9 · referencias y reglas

Prestar en vez de mover: referencias compartidas (&) y mutables (&mut), y la regla del prestador.

&&mutaliasing

Lifetimes Nivel 10 · validez de las referencias

Cómo Rust demuestra que una referencia nunca sobrevive a lo que apunta. Anotaciones de lifetime.

lifetimes'avalidez

Strings y slices Nivel 11 · String vs &str

El modelo de cadenas de Rust, los slices, y por qué hay dos tipos de string.

String&strslices

Domar el borrow checker Nivel 12 · pensar en ownership

Los errores clásicos del borrow checker, NLL, Polonius, y cómo reestructurar en vez de pelear.

borrow checkerNLLPolonius

Traits Nivel 13 · comportamiento compartido

Los traits definen capacidades (como interfaces), con implementaciones por defecto. La abstracción de Rust.

traitimpldefault

Genéricos Nivel 14 · código para cualquier tipo

Funciones y tipos genéricos con bounds de trait, monomorfización y abstracción de coste cero.

genéricosboundszero-cost

Trait objects Nivel 15 · dispatch dinámico

dyn Trait, dispatch estático vs dinámico, y cuándo usar cada uno.

dyndispatchvtable

Traits del sistema Nivel 16 · Clone, Copy, Debug, Default

Los traits derivables que todo tipo usa, PartialEq/Eq/Ord/Hash, y qué significa cada uno.

CloneCopyderive

Deref, Drop y operadores Nivel 17 · traits que dan superpoderes

Sobrecargar operadores, Deref coercion, y Drop (el destructor determinista de Rust).

DerefDropoperadores

Associated types y GATs Nivel 18 · el sistema de tipos avanzado

Tipos asociados, Generic Associated Types, y cómo expresan relaciones ricas entre tipos.

associatedGATstipos

Colecciones Nivel 19 · Vec, HashMap, BTreeMap

Las colecciones de la librería estándar, cuándo usar cada una y su rendimiento.

VecHashMapBTreeMap

Iteradores Nivel 20 · la pereza y su poder

El trait Iterator, la evaluación perezosa, y map/filter/fold: transformar sin bucles.

Iteratorlazymap/filter

Closures Nivel 21 · Fn, FnMut, FnOnce

Las funciones anónimas que capturan su entorno, sus tres traits, y move closures.

closuresFncapture

Iteradores avanzados Nivel 22 · adaptadores y colecciones

Adaptadores (zip, chain, flat_map), collect, y escribir tu propio iterador.

collectadaptadorescustom

Manejo de errores Nivel 23 · Result, ?, panic

El operador ?, propagar errores, y cuándo panic vs Result.

?Resultpanic

Errores propios Nivel 24 · thiserror y anyhow

Diseñar tipos de error, el trait Error, y las crates thiserror (librerías) y anyhow (apps).

thiserroranyhowError

Smart pointers Nivel 25 · Box, Rc, Arc

Punteros con semántica propia: Box (heap), Rc (contado), Arc (contado y thread-safe).

BoxRcArc

Interior mutability Nivel 26 · Cell, RefCell

Mutar a través de una referencia compartida de forma controlada, y el borrow checking en runtime.

CellRefCellruntime

Lifetimes avanzados Nivel 27 · los casos difíciles

Lifetime bounds, elisión, HRTB, y los patrones que confunden al borrow checker.

HRTBelisiónbounds

Pin y auto-referencias Nivel 28 · estructuras que se apuntan a sí mismas

Por qué Rust prohíbe mover ciertos valores, Pin, y la base de los futures async.

Pinself-refUnpin

Concurrencia con threads Nivel 29 · fearless concurrency

Crear hilos, mover datos entre ellos, y por qué Rust hace imposibles las data races.

threadspawnfearless

Send y Sync Nivel 30 · la seguridad entre hilos

Los dos traits marcadores que el compilador usa para garantizar concurrencia segura.

SendSyncmarker

Estado compartido Nivel 31 · Arc, Mutex, channels

Compartir datos entre hilos con Arc<Mutex>, y comunicar con canales (paso de mensajes).

MutexchannelsArc

async/await Nivel 32 · fundamentos

La sintaxis async/await, qué es una función async, y por qué Rust no trae runtime.

asyncawaitFuture

Futures y poll Nivel 33 · el modelo de Rust

El trait Future, el modelo poll/wake, y cómo una función async es una máquina de estados.

Futurepollwaker

Tokio Nivel 34 · el runtime

El runtime async de facto: el scheduler work-stealing, el I/O driver, tasks y spawn.

tokioruntimework-stealing

async avanzado Nivel 35 · streams, select, cancelación

Streams, select!, join!, la cancelación por drop, y las async closures de la edición 2024.

streamsselectcancelación

Depurar async Nivel 36 · tokio-console, tracing

Observar y depurar código async: tokio-console, tracing, y los deadlocks async.

tokio-consoletracingdebug

Unsafe Nivel 37 · cuándo y por qué

Qué desbloquea unsafe, por qué existe, y la responsabilidad que implica.

unsafeinvariantesUB

Punteros crudos Nivel 38 · los cinco superpoderes

Raw pointers, dereferenciarlos, y las cinco cosas que solo unsafe permite.

*const*mutraw

FFI con C Nivel 39 · interoperar

Llamar C desde Rust y Rust desde C, extern, bindgen, y la ABI.

FFIexternbindgen

Abstracciones seguras Nivel 40 · envolver unsafe

El patrón clave: encapsular unsafe tras una API segura cuyas invariantes garantizas tú.

safe wrapperinvariantesAPI

no_std Nivel 41 · Rust sin librería estándar

El atributo #![no_std], el crate core, y programar sin sistema operativo.

no_stdcorebare metal

Embebido Nivel 42 · microcontroladores

Rust en microcontroladores: embedded-hal, PACs, RTIC y Embassy (async embebido).

embedded-halEmbassyMCU

Allocators y memoria Nivel 43 · a bajo nivel

GlobalAlloc, allocators a medida, y la gestión de memoria de bajo nivel.

GlobalAllocallocmemoria

Macros declarativas Nivel 44 · macro_rules!

Generar código con macro_rules!: patrones, repetición, y la higiene de macros.

macro_rulespatroneshigiene

Macros procedurales Nivel 45 · derive y attribute

Macros que manipulan el AST: derive, attribute y function-like, con syn y quote.

proc-macroderivesyn

Programación a nivel de tipos Nivel 46 · el sistema de tipos como lenguaje

Typestate, phantom types, y usar el sistema de tipos para prevenir errores en compilación.

typestatePhantomDatatipos

Cargo a fondo Nivel 47 · workspaces, features, perfiles

Workspaces, features condicionales, perfiles de build, y el ecosistema de crates.

workspacesfeaturesperfiles

Testing Nivel 48 · unit, integration, doc, property

Los tests integrados, doc tests, y el testing basado en propiedades (proptest).

testsdoc testproptest

Rendimiento Nivel 49 · zero-cost, SIMD

Las abstracciones de coste cero, perfilar (samply), SIMD, y optimización guiada por datos.

zero-costSIMDperf

Publicar y ecosistema Nivel 50 · crates.io, docs.rs

Publicar un crate, documentar, semver, y las herramientas del ecosistema.

crates.iodocs.rssemver

PhD: internals y el futuro Nivel 51 · MIR, el compilador, el futuro

Cómo funciona el compilador de Rust (HIR, MIR, borrow checker), y hacia dónde va el lenguaje.

MIRcompiladorfuturo
256lecciones
52niveles
0→∞de cero a dios
Qué vas a dominar

Todo lo que hace a un experto

🦀

Ownership y borrowing

El sistema que garantiza seguridad de memoria sin recolector de basura.

🧩

Traits y genéricos

Abstracción sin coste, el sistema de tipos más expresivo de los lenguajes de sistemas.

Lifetimes

Cómo el borrow checker demuestra que tus referencias son válidas.

Async (edición 2024)

async/await, futures, tokio y las async closures del edición 2024.

🔓

Unsafe y FFI

Cuando necesitas bajar al metal: unsafe, punteros crudos e interop con C.

🔩

no_std y embebido

Rust sin librería estándar: embebido, allocators y el kernel.

🐞

Debugging y profiling

Las herramientas para depurar y optimizar Rust en producción.

🔱

Metaprogramación

Macros y programación a nivel de tipos: el nivel PhD de Rust.

cargoOwnershiptraitsasyncno_stdunsafeedición 2024tokio

¿Listo para dominar Rust?

Empieza por los fundamentos y sube nivel a nivel hasta el dominio total.

Comenzar el camino →