1. Te damos la bienvenida a Comprehensive Rust 🦀
  2. Desarrollo del curso
    1. Estructura del curso
    2. Combinaciones de teclas
    3. Traducciones
  3. Usando Cargo
    1. Ecosistema Rust
    2. Ejemplos de Código
    3. Ejecutar Cargo a nivel local
  4. Día 1: mañana
  5. Te damos la bienvenida
  6. Hola, Mundo
    1. ¿Qué es Rust?
    2. Ventajas de Rust
    3. Playground
  7. Tipos y valores
    1. Hola, Mundo
    2. Variables
    3. Valores
    4. Aritmética
    5. Inferencia de tipos
    6. Ejercicio: Fibonacci
      1. Solución
  8. Básicos de Control de Flujo
    1. Expresiones if
    2. Bucles
      1. for
      2. loop
    3. break y continue
      1. Etiquetas
    4. Bloques y ámbitos
      1. Ámbitos y Shadowing
    5. Funciones
    6. Macros
    7. Ejercicio: secuencia de Collatz
      1. Solución
  9. Día 1: Tarde
  10. Te damos la bienvenida
  11. Tuplas y arrays
    1. Arrays
    2. Tuplas
    3. Iteración de Arreglos (Arrays)
    4. Patrones y Desestructuración
    5. Ejercicio: arrays anidados
      1. Solución
  12. Referencias
    1. Enums compartidas
    2. Referencias exclusivas
    3. Slices: &\[T\]
    4. Cadenas de texto (Strings)
    5. Ejercicio: geometría
      1. Solución
  13. Tipos definidos por el usuario
    1. Estructuras con nombre
    2. Estructuras de tuplas
    3. Enumeraciones
    4. Estático
    5. Const (constantes)
    6. Aliases de tipo
    7. Ejercicio: eventos de ascensor
      1. Solución
  14. Día 2: Mañana
  15. Te damos la bienvenida
  16. Correspondencia de Patrones
    1. Correspondencia de Valores
    2. Desestructurando Structs
    3. Desestructurando Enums
    4. Control de Flujo Let
    5. Ejercicio: evaluación de expresiones
      1. Solución
  17. Métodos y Traits
    1. Métodos
    2. Traits
      1. Implementación de Traits
      2. Supertraits
      3. Tipos de datos asociados
    3. Derivación de Traits
    4. Ejercicio: registro genérico
      1. Solución
  18. Día 2: tarde
  19. Te damos la bienvenida
  20. Genéricos
    1. Funciones genéricas
    2. Tipos de Datos Genéricos
    3. Traits Genéricos
    4. Trait Bounds
    5. impl Trait
    6. dyn Trait
    7. Ejercicio: min genérico
      1. Solución
  21. Tipos de la Biblioteca Estándar
    1. Biblioteca estándar
    2. Documentación
    3. Option
    4. Result
    5. String
    6. Vec (Vectores)
    7. HashMap
    8. Ejercicio: Contador
      1. Solución
  22. Traits de la biblioteca estándar
    1. Comparaciones
    2. Operadores
    3. From e Into
    4. Probando
    5. Read y Write
    6. Default, sintaxis de actualización de structs
    7. Cierres
    8. Ejercicio: ROT13
      1. Solución
  23. Día 3: Mañana
  24. Te damos la bienvenida
  25. Manejo de Memoria
    1. Revisión de la memoria de programas
    2. Métodos de Gestión de Memoria
    3. Ownership
    4. Semántica de movimiento
    5. Trait Clone
    6. Tipos Copy
    7. Trait Drop
    8. Ejercicio: Constructores
      1. Solución
  26. Punteros inteligentes
    1. Box<T>
    2. Rc
    3. Objetos Trait Poseídos
    4. Ejercicio: Árbol binario
      1. Solución
  27. Día 3: Tarde
  28. Te damos la bienvenida
  29. Préstamos (Borrowing)
    1. Emprestar (borrow) un valor
    2. Verificación de Préstamos
    3. Errores de Préstamo
    4. Mutabilidad Interior
    5. Ejercicio: Estadísticas de Salud
      1. Solución
  30. Duraciones de vida
    1. Anotaciones de duración de vida
    2. Elisión de duración de vida
    3. Duraciones de vida de estructuras (structs)
    4. Ejercicio: Análisis de Protobuf
      1. Solución
  31. Día 4: Mañana
  32. Te damos la bienvenida
  33. Iteradores
    1. Iterator
    2. IntoIterator
    3. FromIterator
    4. Ejercicio: Encadenamiento de métodos del iterador
      1. Solución
  34. Módulos
    1. Módulos
    2. Jerarquía del sistema de archivos
    3. Visibilidad
    4. use, super, self
    5. Ejercicio: Módulos para una biblioteca GUI
      1. Solución
  35. Probando
    1. Módulos de Pruebas
    2. Otros tipos de pruebas
    3. Lints de compiladores y Clippy
    4. Ejercicio: Algoritmo de Luhn
      1. Solución
  36. Día 4: Tarde
  37. Te damos la bienvenida
  38. Manejo de Errores
    1. Pánicos
    2. Result
    3. Operador Try (Intentar)
    4. Conversiones Try (Intentar)
    5. Trait Error
    6. thiserror y anyhow
    7. Ejercicio: Reescribir con Result
      1. Solución
  39. Unsafe Rust
    1. Unsafe
    2. Dereferenciación de Punteros Sin Formato
    3. Variables Estáticas Mutables
    4. Uniones
    5. Funciones Inseguras (Unsafe)
    6. Implementación de Traits Unsafe (Inseguras)
    7. Ejercicio: Envoltorio de FFI
      1. Solución
  40. Android
  41. Te damos la bienvenida
  42. Configurar
  43. Reglas de Compilación (Build)
    1. Binarios
    2. Biblioteca
  44. AIDL
    1. Tutorial de Servicio de Cumpleaños
      1. Interfaz
      2. API de Servicios
      3. Servicio
      4. Servidor
      5. Despliegue
      6. Cliente
      7. Cambio de API
      8. Actualizando Implementaciones
    2. Tipos AIDL
      1. Tipos Primitivos
      2. Tipos Array
      3. Enviando Objectos
      4. Variables
      5. Enviando Archívos
  45. Probando
    1. GoogleTest
    2. Simulaciones
  46. Almacenamiento de registros
  47. Interoperabilidad
    1. Con C
      1. Llamar a C con Bindgen
      2. Llamar a Rust desde C
    2. Con C++
      1. El Modulo Puente (Bridge)
      2. Rust Bridge (Puente)
      3. C++ generado
      4. Bridge en C++
      5. Tipos de datos compartidos
      6. Enums compartidos
      7. Manejo de Errores en Rust
      8. Manejo de Errores en C++
      9. Tipos adicionales
      10. Compilar en Android: C++
      11. Compilar en Android: Genrules
      12. Compilar en Android: Rust
    3. Con Java
  48. Ejercicios
  49. Chromium
  50. Te damos la bienvenida
  51. Configurar
  52. Comparación de los ecosistemas de Chromium y Cargo
  53. Política
  54. Reglas de Compilación (Build)
    1. Código inseguro
    2. Depender de código de Rust desde Chromium C++
    3. Visual Studio Code
    4. Ejercicio
  55. Probando
    1. Biblioteca rust_gtest_interop
    2. Reglas GN para pruebas de Rust
    3. Macro chromium::import!
    4. Ejercicio
  56. Interoperabilidad con C++
    1. Ejemplos
    2. Limitaciones de CXX
    3. Manejo de Errores en CXX
      1. Manejo de Errores: Ejemplo QR
      2. Manejo de Errores: Ejemplo PNG
    4. Usar CXX en Chromium
    5. Ejercicio
  57. Añadir crates de terceros
    1. Configurar Cargo.toml
    2. Configurar gnrt_config.toml
    3. Descargar crates
    4. Generar reglas de compilación gn
    5. Resolución de problemas
      1. Compilar secuencias de comandos que generan código
      2. Compilar secuencias de comandos que compilan C++ o llevan a cabo acciones arbitrarias
    6. Depender de un crate
    7. Revisiones y auditorías
    8. Comprobaciones en el código fuente de Chromium
    9. Mantener los crates actualizados
    10. Ejercicio
  58. Poner en práctica todo lo aprendido: ejercicio
  59. Soluciones de Ejercicios
  60. Bare Metal: mañana
  61. Te damos la bienvenida
  62. no_std
    1. Un Pequeño Ejemplo
    2. alloc
  63. Microcontroladores
    1. MMIO sin procesar
    2. PAC
    3. Crates HAL
    4. Crates de Soporte de Placa
    5. El Patrón de Tipo de Estado
    6. embedded-hal
    7. probe-rs y cargo-embed
      1. Depuración
    8. Otros proyectos
  64. Ejercicios
    1. Brújula
    2. Soluciones
  65. Bare Metal: tarde
  66. Procesadores de aplicaciones
    1. Iniciación a Rust
    2. Ensamblador en línea
    3. MMIO
    4. Escribir un controlador UART
      1. Más traits
    5. Un controlador UART mejor
      1. Bitflags
      2. Varios registros
      3. Conductor
      4. Cómo usarlo
    6. Almacenamiento de registros
      1. Cómo usarlo
    7. Excepciones
    8. Otros proyectos
  67. Crates útiles
    1. zerocopy
    2. aarch64-paging
    3. buddy_system_allocator
    4. tinyvec
    5. spin
  68. Android
    1. vmbase
  69. Ejercicios
    1. Controlador RTC
    2. Soluciones
  70. Concurrencia: mañana
  71. Te damos la bienvenida
  72. Hilos
    1. Hilos Simples
    2. Hilos con ámbito
  73. Canales
    1. Transmisores y Receptores
    2. Canales sin límites
    3. Canales delimitados
  74. Send y Sync
    1. Traits de Marcador
    2. Send
    3. Sync
    4. Ejemplos
  75. Estado compartido
    1. Arc
    2. Mutex
    3. Ejemplo
  76. Ejercicios
    1. La cena de los filósofos
    2. Comprobador de enlaces multihilo
    3. Soluciones
  77. Concurrencia: tarde
  78. Te damos la bienvenida
  79. Conceptos básicos de Async
    1. async/await
    2. Future
    3. Runtimes (Tiempos de Ejecución)
      1. Tokio
    4. Tasks
  80. Canales y Control de Flujo
    1. Canales asíncronos
    2. Unir
    3. Seleccionar
  81. Inconvenientes
    1. Bloqueo del ejecutor
    2. Pin
    3. Traits asíncronos
    4. Cancelación
  82. Ejercicios
    1. La cena de los filósofos
    2. Aplicación de chat de difusión
    3. Soluciones
  83. Conclusiones
  84. ¡Gracias!
  85. Glosario
  86. Otros recursos
  87. Créditos