Rust
Ownership, traits, lifetimes, async (edición 2024), unsafe/FFI, no_std, embebido, debugging y programación a nivel de tipos.
00
Nivel 0
1 temas03
Nivel 3
6 temas- 01let y la inmutabilidad por defectohechoen curso
- 02Los tipos escalares y el desbordamientohechoen curso
- 03Inferencia de tipos, anotaciones y sufijoshechoen curso
- 04Shadowing frente a mutabilidad, y las constanteshechoen curso
- 05Tipos compuestos primitivos: tuplas y arrayshechoen curso
- 06Funciones: recibir un valor y devolver un resultadohechoen curso
05
Nivel 5
5 temas- 01Definir structs: campos, tuplas y unidadeshechoen curso
- 02impl y métodos: &self, &mut self y selfhechoen curso
- 03Funciones asociadas y constructores: Self y newhechoen curso
- 04Derivar traits: Debug, Clone y el formato de depuraciónhechoen curso
- 05Organización: módulos, visibilidad y el proyectohechoen curso
06
Nivel 6
5 temas- 01Enums con y sin datos: la unión etiquetada segurahechoen curso
- 02match exhaustivo: extraer datos y blindar el futurohechoen curso
- 03Los patrones a fondo: binding, guardas, rangos y desestructuraciónhechoen curso
- 04Modelar el dominio con enums: estados inválidos irrepresentableshechoen curso
- 05Enums frente a la herencia: una cosa u otra sin claseshechoen curso
07
Nivel 7
5 temas- 01Option: la ausencia de valor sin nullhechoen curso
- 02Desenvolver Option con seguridad: de match a los métodoshechoen curso
- 03Result: el error como valor, no como excepciónhechoen curso
- 04Los combinadores: transformar sin desenvolver a manohechoen curso
- 05El operador ?: propagar errores con limpiezahechoen curso
08
Nivel 8
5 temas09
Nivel 9
5 temas- 01Prestar en vez de mover: la referencia compartida &Thechoen curso
- 02Referencias mutables &mut T: modificar sin poseerhechoen curso
- 03Las reglas del borrow checker: alias O mutaciónhechoen curso
- 04Referencias colgantes: el dato nunca muere antes que su referenciahechoen curso
- 05Borrowing en la práctica: &self, &mut self y préstamos parcialeshechoen curso
10
Nivel 10
5 temas- 01Por qué existen los lifetimes: nombrar la región donde una referencia valehechoen curso
- 02Anotar lifetimes en funciones: atar la salida a la entradahechoen curso
- 03Lifetimes en structs: cuando un tipo guarda una referencia prestadahechoen curso
- 04Elisión de lifetimes: las tres reglas que te ahorran escribirloshechoen curso
- 05'static y los patrones de lifetimes del día a díahechoen curso
11
Nivel 11
5 temas12
Nivel 12
5 temas- 01Los tres errores clásicos: qué te dice el borrow checker de verdadhechoen curso
- 02NLL: un préstamo muere en su último uso, no al cerrar la llavehechoen curso
- 03Polonius: el borrow checker de nueva generaciónhechoen curso
- 04Reestructurar en vez de pelear: split borrows, índices, funciones y scopeshechoen curso
- 05clone con criterio: cuándo copiar es la respuesta y cuándo es un síntomahechoen curso
13
Nivel 13
5 temas- 01Definir e implementar un trait: capacidades, no jerarquíashechoen curso
- 02Implementaciones por defecto: métodos requeridos y provistoshechoen curso
- 03Traits como parámetros: impl Trait, bounds y valores de retornohechoen curso
- 04Bounds múltiples y la cláusula where: firmas legibleshechoen curso
- 05Coherencia y la regla del huérfano: el patrón newtypehechoen curso
14
Nivel 14
5 temas- 01Funciones genéricas: parametrizar el código sobre el tipohechoen curso
- 02Structs y enums genéricos: contenedores para cualquier tipohechoen curso
- 03Métodos genéricos e impl condicionales: la API que el tipo se ganahechoen curso
- 04Monomorfización: la abstracción de coste cerohechoen curso
- 05Bounds múltiples, where y la síntesis: traits más genéricoshechoen curso
15
Nivel 15
5 temas- 01Dispatch estático frente a dinámico: el compromiso fundamentalhechoen curso
- 02dyn Trait por dentro: el puntero gordo y la vtablehechoen curso
- 03Object safety: qué traits pueden ser trait objectshechoen curso
- 04Box de dyn Trait y colecciones heterogéneashechoen curso
- 05Estático o dinámico: cuándo elegir cada dispatchhechoen curso
16
Nivel 16
5 temas- 01Debug y Display: imprimir para el programador y para el usuariohechoen curso
- 02Clone y Copy: la copia profunda y la duplicación de bitshechoen curso
- 03Igualdad y orden: por qué el float solo es PartialOrdhechoen curso
- 04Hash y Default: claves de mapa y valores por defectohechoen curso
- 05From, Into, TryFrom: las conversiones idiomáticashechoen curso
17
Nivel 17
5 temas- 01Sobrecarga de operadores: cada símbolo es un traithechoen curso
- 02Deref y la coerción: por qué una ref a String vale donde se pide ref a strhechoen curso
- 03Drop: el destructor determinista y por qué no puedes llamarlohechoen curso
- 04DerefMut y la transparencia de Box, Rc y compañíahechoen curso
- 05AsRef, Borrow y las conversiones ligeras: cuándo cada unahechoen curso
18
Nivel 18
5 temas- 01Tipos asociados: cuando el tipo de salida pertenece al traithechoen curso
- 02Asociados frente a genéricos: uno-a-uno o muchos-a-unohechoen curso
- 03GATs: tipos asociados que a su vez son genéricoshechoen curso
- 04Lifetimes asociados y el patrón type Item de ahechoen curso
- 05GATs en la práctica: colecciones que prestan y async en traitshechoen curso
19
Nivel 19
5 temas- 01Vec a fondo: longitud, capacidad y crecimiento amortizadohechoen curso
- 02HashMap: la API, el patrón entry y por qué exige Hash y Eqhechoen curso
- 03BTreeMap y BTreeSet: mapas ordenados y consultas por rangohechoen curso
- 04VecDeque, HashSet y BinaryHeap: y cómo elegir la colección correctahechoen curso
- 05Rendimiento y layout: por qué Vec es cache-friendly y el coste real de cada operaciónhechoen curso
20
Nivel 20
5 temas- 01El trait Iterator y next: producir valores uno a unohechoen curso
- 02La pereza: nada ocurre hasta que se consumehechoen curso
- 03Adaptadores fundamentales: map, filter, fold, sum y ziphechoen curso
- 04Los consumidores: collect, for, count, find, any y allhechoen curso
- 05IntoIterator: iter, iter_mut, into_iter y cómo for los usahechoen curso
21
Nivel 21
5 temas- 01Qué es un closure: una función que recuerda su entornohechoen curso
- 02FnOnce, FnMut y Fn: los tres traits del closurehechoen curso
- 03Closures move: forzar la captura por valorhechoen curso
- 04Closures como parámetros y retornos: impl Fn, dyn Fn y Boxhechoen curso
- 05Closures e iteradores: el estilo funcional de Rusthechoen curso
22
Nivel 22
5 temas- 01Adaptadores potentes: componer flujos de datoshechoen curso
- 02collect polimórfico: Vec, String, HashMap y el turbofishhechoen curso
- 03Iteradores falibles: collect a Result y el corto-circuitohechoen curso
- 04Escribe tu propio iterador: impl Iterator con nexthechoen curso
- 05Cadenas de iteradores: por qué son de coste cerohechoen curso
23
Nivel 23
5 temas- 01panic!: el fallo irrecuperable y su maquinariahechoen curso
- 02Result a fondo: el fallo como valor y el fin de las excepcioneshechoen curso
- 03El operador ?: propagación, desazucarado y conversión con Fromhechoen curso
- 04? más allá de Result: Option, main y closureshechoen curso
- 05unwrap y expect: el panic explícito y sus alternativas segurashechoen curso
24
Nivel 24
5 temas- 01El trait Error: la firma de un tipo que dice ser un fallohechoen curso
- 02Tu propio enum de error, y Box dyn Error para lo heterogéneohechoen curso
- 03thiserror: el boilerplate de errores, derivadohechoen curso
- 04anyhow: un solo tipo de error, con contexto, para aplicacioneshechoen curso
- 05From, ? y la estrategia: tipado en librerías, opaco en binarioshechoen curso
25
Nivel 25
5 temas- 01Box de T: el valor que vive en el heaphechoen curso
- 02Rc de T: propiedad compartida por conteo de referenciashechoen curso
- 03Arc de T: compartir entre hilos con conteo atómicohechoen curso
- 04Weak de T: referencias débiles para romper cicloshechoen curso
- 05Elegir el puntero: Box, Rc, Arc y cómo combinarloshechoen curso
26
Nivel 26
5 temas- 01El problema: mutar a través de una referencia compartidahechoen curso
- 02`Cell<T>`: mutar moviendo valores, sin prestar referenciashechoen curso
- 03`RefCell<T>`: el borrow checker mudado a tiempo de ejecuciónhechoen curso
- 04`Rc<RefCell<T>>` y `Arc<Mutex<T>>`: estado compartido y mutablehechoen curso
- 05`UnsafeCell<T>`: la primitiva sobre la que todo se construyehechoen curso
27
Nivel 27
5 temas- 01Cotas de lifetime: `T: 'a` (outlives) y `'a: 'b` (subtipado)hechoen curso
- 02Elision avanzada: donde el compilador se rinde y te obliga a anotarhechoen curso
- 03HRTB: `for<'a>`, o cuantificar sobre todos los lifetimeshechoen curso
- 04Lifetimes en trait objects: `dyn Trait + 'a` y el `'static` implicitohechoen curso
- 05Casos dificiles: estructuras autorreferenciales, temporales y como resolverloshechoen curso
28
Nivel 28
5 temas- 01El problema: mover es copiar bytes, y eso invalida los punteros internoshechoen curso
- 02Structs auto-referenciales: imposibles de nombrar, y por qué async los fabricahechoen curso
- 03`Pin<P>`: el contrato de inmovilidad, garantizado por el sistema de tiposhechoen curso
- 04`Unpin`: el permiso para moverse, y por qué casi todo lo tienehechoen curso
- 05Pin en la práctica: `Future::poll`, `pin!` y `Box::pin`hechoen curso
29
Nivel 29
5 temas- 01thread::spawn y JoinHandle: lanzar un hilo y cosechar su valorhechoen curso
- 02move y 'static: por qué el hilo debe poseer lo que tocahechoen curso
- 03Compartir datos mutables entre hilos: por qué el compilador lo bloqueahechoen curso
- 04Scoped threads: prestar de la pila del padre sin miedohechoen curso
- 05Fearless concurrency: qué garantiza Rust y por qué es revolucionariohechoen curso
30
Nivel 30
5 temas31
Nivel 31
5 temas- 01Mutex: exclusión mutua con la cerradura pegada al datohechoen curso
- 02Arc y Mutex: el patrón canónico del estado mutable compartidohechoen curso
- 03RwLock: muchos lectores o un solo escritorhechoen curso
- 04Canales mpsc: comparte memoria comunicandohechoen curso
- 05Deadlocks: Rust previene carreras de datos, no interbloqueoshechoen curso
32
Nivel 32
5 temas- 01Qué es async: concurrencia masiva de E/S sin un hilo por tareahechoen curso
- 02async fn y .await: la sintaxis de una función perezosahechoen curso
- 03Por qué Rust no trae runtime: async es del lenguaje, ejecutarlo nohechoen curso
- 04El modelo mental: una async fn es una máquina de estadoshechoen curso
- 05Tu primer programa async con Tokiohechoen curso
33
Nivel 33
5 temas- 01El trait Future: un cálculo que aún no ha terminadohechoen curso
- 02poll: Ready con el valor o Pending con un todavía nohechoen curso
- 03El Waker: cómo un future dormido pide que lo despiertenhechoen curso
- 04La máquina de estados: async fn compilada a un enum que hace pollhechoen curso
- 05Escribir un Future a mano: poll sin magia, con un temporizadorhechoen curso
34
Nivel 34
5 temas- 01Anatomía de un runtime: scheduler, driver de E/S y timerhechoen curso
- 02El runtime por dentro: tokio::main, multihilo y construcción manualhechoen curso
- 03Tareas y robo de trabajo: por qué el scheduler escalahechoen curso
- 04E/S async con Tokio: un servidor echo concurrentehechoen curso
- 05tokio::sync, spawn_blocking y el Mutex que no cruza un awaithechoen curso
35
Nivel 35
5 temas36
Nivel 36
5 temas- 01Por qué depurar async es difícil: la pila miente y la tarea no está ahíhechoen curso
- 02tracing: instrumentación estructurada que sí sigue a la tareahechoen curso
- 03tokio-console: ver en vivo la población de tareas del runtimehechoen curso
- 04Deadlocks y stalls async: cuando el await no vuelvehechoen curso
- 05Profiling async: el poll time, la contención y las herramientashechoen curso
38
Nivel 38
5 temas- 01*const T y *mut T: los punteros sin promesashechoen curso
- 02Crear y dereferenciar: de la referencia al puntero y de vueltahechoen curso
- 03Aritmética de punteros: offset, add, wrapping y la procedenciahechoen curso
- 04Conversiones y NonNull: referencias, punteros y direccioneshechoen curso
- 05Los peligros: UB, y por qué Vec se construye sobre punteros crudoshechoen curso
39
Nivel 39
5 temas- 01Llamar a C desde Rust: declarar extern C, enlazar y por qué es unsafehechoen curso
- 02Tipos compatibles con C: repr(C), los escalares de core::ffi y las cadenashechoen curso
- 03Llamar a Rust desde C: exportar con no_mangle y extern Chechoen curso
- 04Generar bindings: bindgen y cbindgen en vez de declarar a manohechoen curso
- 05Memoria y cadenas en la frontera: quién libera qué y el terminador nulohechoen curso
40
Nivel 40
5 temas- 01El patrón central: un núcleo unsafe tras una API 100% segurahechoen curso
- 02Mantener las invariantes: el contrato que hace correcto al unsafehechoen curso
- 03Un wrapper seguro sobre una API C: imposible de usar malhechoen curso
- 04Newtype y typestate: estados inválidos que ni se pueden escribirhechoen curso
- 05Documentar la seguridad: # Safety, // SAFETY y la cultura del kernelhechoen curso
41
Nivel 41
5 temas- 01no_std: enlazar contra core en vez de stdhechoen curso
- 02no_std: qué pierdes y qué conservashechoen curso
- 03El crate alloc: recuperar Vec, Box y String sin stdhechoen curso
- 04no_std: el panic_handler y el punto de entradahechoen curso
- 05Los mundos de no_std: un mismo core, muchos destinoshechoen curso
42
Nivel 42
5 temas- 01Por qué Rust en el embebido: seguridad sin red debajohechoen curso
- 02La pila embebida: del registro crudo al driver portablehechoen curso
- 03Un programa bare-metal: no_std, no_main y el LED que parpadeahechoen curso
- 04RTIC: concurrencia por interrupciones con garantías en compilaciónhechoen curso
- 05Embassy: async/await en el metal, sin heap y sin RTOShechoen curso
43
Nivel 43
5 temas- 01El trait GlobalAlloc y el atributo global_allocatorhechoen curso
- 02Escribir un allocator global que instrumenta y cuenta asignacioneshechoen curso
- 03La Allocator API: elegir el asignador por estructura de datoshechoen curso
- 04Arenas y bump allocators: reservar mucho, liberar de golpehechoen curso
- 05no_std y alloc: recuperar Box y Vec aportando tu propio allocatorhechoen curso
44
Nivel 44
5 temas- 01macro_rules!: metaprogramación por ejemplohechoen curso
- 02Especificadores de fragmento: expr, ident, ty, tt, pat, blockhechoen curso
- 03Repetición: generar código para listas variádicashechoen curso
- 04Higiene: por qué las macros de Rust no filtran variableshechoen curso
- 05Casos reales: reimplementar vec!, un mini-DSL y cuándo usar macroshechoen curso
45
Nivel 45
5 temas- 01Macros procedurales: código que se ejecuta en el compiladorhechoen curso
- 02syn y quote: parsear los tokens, generar el códigohechoen curso
- 03Un derive macro paso a paso: generar un getter por campohechoen curso
- 04Attribute macros: reescribir un item enterohechoen curso
- 05El coste de una proc-macro y cuándo vale la penahechoen curso
46
Nivel 46
5 temas- 01El sistema de tipos como lenguaje: estados inválidos que no compilanhechoen curso
- 02PhantomData: llevar información de tipo sin ocupar memoriahechoen curso
- 03Typestate: el estado de un objeto vive en su tipohechoen curso
- 04Const generics: tipos parametrizados por valoreshechoen curso
- 05Sealed traits y los límites de la programación a nivel de tiposhechoen curso
47
Nivel 47
5 temas48
Nivel 48
5 temas- 01Tests unitarios: la prueba que vive junto al códigohechoen curso
- 02Tests de integración: probar el crate desde fuerahechoen curso
- 03Doc tests: la documentación que se compila y no mientehechoen curso
- 04Property testing y fuzzing: miles de entradas contra tus invarianteshechoen curso
- 05Mocking, cobertura y CI: la disciplina del proyecto seriohechoen curso
49
Nivel 49
5 temas- 01Abstracciones de coste cero: la promesa y cómo leerla en el ensambladorhechoen curso
- 02Perfilar: samply, flamegraphs y benchmarks estadísticos con criterionhechoen curso
- 03SIMD: autovectorización, std::simd portable y cuándo bajar a los intrinsicshechoen curso
- 04Optimizaciones idiomáticas: menos asignaciones, mejor layout, cero clones de máshechoen curso
- 05Los mitos del rendimiento: por qué el idiomático es rápido y la regla del 3 %hechoen curso
51
Nivel 51
5 temas- 01El pipeline de rustc: del texto fuente al HIRhechoen curso
- 02MIR: el grafo donde vive el borrow checkerhechoen curso
- 03Monomorfización y codegen: del MIR al código máquinahechoen curso
- 04Dentro de rustc: ver los IR y contribuir al compiladorhechoen curso
- 05El futuro de Rust y el final del mapahechoen curso