Te damos la bienvenida a Comprehensive Rust 🦀
1.
Desarrollo del curso
❱
1.1.
Estructura del curso
1.2.
Combinaciones de teclas
1.3.
Traducciones
2.
Usando Cargo
❱
2.1.
Ecosistema Rust
2.2.
Ejemplos de Código
2.3.
Ejecutar Cargo a nivel local
Día 1: mañana
3.
Te damos la bienvenida
4.
¡Hola, mundo!
❱
4.1.
¿Qué es Rust?
4.2.
¡Hola, mundo!
4.3.
Benefits of Rust
4.4.
Playground
5.
Types and Values
❱
5.1.
Variables
5.2.
Values
5.3.
Arithmetic
5.4.
Cadenas de texto (Strings)
5.5.
Inferencia de tipos
5.6.
Exercise: Fibonacci
❱
5.6.1.
Soluciones
6.
Control de Flujo
❱
6.1.
Conditionals
6.2.
Bucles for
6.3.
break y continue
6.4.
Blocks and Scopes
6.5.
Funciones
6.6.
Macros
6.7.
Exercise: Collatz Sequence
❱
6.7.1.
Soluciones
Día 1: Tarde
7.
Te damos la bienvenida
8.
Tuples and Arrays
❱
8.1.
Tuples and Arrays
8.2.
Integración de Cargo
8.3.
Correspondencia de Patrones
8.4.
Desestructurando Enums
8.5.
Exercise: Nested Arrays
❱
8.5.1.
Soluciones
9.
Referencias
❱
9.1.
Referencias
9.2.
Referencias colgantes
9.3.
Exercise: Geometry
❱
9.3.1.
Soluciones
10.
User-Defined Types
❱
10.1.
Structs
10.2.
Estructuras de tuplas
10.3.
Enums
10.4.
static y const
10.5.
Type Aliases
10.6.
Exercise: Elevator Events
❱
10.6.1.
Soluciones
Día 2: Mañana
11.
Te damos la bienvenida
12.
Correspondencia de Patrones
❱
12.1.
Desestructurando Enums
12.2.
Control de Flujo
12.3.
Exercise: Expression Evaluation
❱
12.3.1.
Soluciones
13.
Read y Write
❱
13.1.
Métodos
13.2.
Traits
13.3.
Derivación de Traits
13.4.
Objetos Trait
13.5.
Exercise: Generic Logger
❱
13.5.1.
Soluciones
14.
Genéricos
❱
14.1.
Funciones Externas
14.2.
Tipos de Datos Genéricos
14.3.
Trait Bounds
14.4.
impl Trait
14.5.
Exercise: Generic min
❱
14.5.1.
Soluciones
Día 2: tarde
15.
Te damos la bienvenida
16.
Biblioteca estándar
❱
16.1.
Biblioteca estándar
16.2.
Pruebas de Documentación
16.3.
Duration
16.4.
Option, Result
16.5.
String
16.6.
Vec
16.7.
HashMap
16.8.
Ejercicios
❱
16.8.1.
Soluciones
17.
Biblioteca estándar
❱
17.1.
Comparaciones
17.2.
Iteradores
17.3.
From e Into
17.4.
Probando
17.5.
Read y Write
17.6.
Default, struct update syntax
17.7.
Cierres
17.8.
Ejercicios
❱
17.8.1.
Soluciones
Día 3: Mañana
18.
Te damos la bienvenida
19.
Manejo de Memoria
❱
19.1.
Review of Program Memory
19.2.
Gestión Automática de la Memoria
19.3.
Ownership
19.4.
Semántica de movimiento
19.5.
Clone
19.6.
Tipos compuestos
19.7.
Drop
19.8.
Exercise: Builder Type
❱
19.8.1.
Soluciones
20.
Smart Pointers
❱
20.1.
Box<T>
20.2.
Rc
20.3.
Exercise: Binary Tree
❱
20.3.1.
Soluciones
Día 3: Tarde
21.
Te damos la bienvenida
22.
Préstamos (Borrowing)
❱
22.1.
Préstamos (Borrowing)
22.2.
Préstamos (Borrowing)
22.3.
Interoperabilidad
22.4.
Estadísticas de salud
❱
22.4.1.
Soluciones
23.
Tiempos de vida
❱
23.1.
Slices: &\[T\]
23.2.
Referencias colgantes
23.3.
Tiempos de Vida en Llamadas a Función
23.4.
Tiempos de vida
23.5.
Tiempos de vida
23.6.
Exercise: Protobuf Parsing
❱
23.6.1.
Soluciones
Día 4: Mañana
24.
Te damos la bienvenida
25.
Iteradores
❱
25.1.
Iterator
25.2.
IntoIterator
25.3.
FromIterator
25.4.
Exercise: Iterator Method Chaining
❱
25.4.1.
Soluciones
26.
Módulos
❱
26.1.
Módulos
26.2.
Jerarquía del sistema de archivos
26.3.
Visibilidad
26.4.
use, super, self
26.5.
Exercise: Modules for a GUI Library
❱
26.5.1.
Soluciones
27.
Probando
❱
27.1.
Módulos de Pruebas
27.2.
Otros proyectos
27.3.
Crates útiles
27.4.
GoogleTest
27.5.
Mocking
27.6.
Compiler Lints and Clippy
27.7.
Algoritmo de Luhn
❱
27.7.1.
Soluciones
Día 4: Tarde
28.
Te damos la bienvenida
29.
Manejo de Errores
❱
29.1.
Panics
29.2.
Iteradores
29.3.
Conversiones Implícitas
29.4.
Error
29.5.
From e Into
29.6.
Gestión Estructurada de Errores con Result
❱
29.6.1.
Soluciones
30.
Unsafe Rust
❱
30.1.
Unsafe Rust
30.2.
Dereferenciación de Punteros Sin Formato
30.3.
Variables Estáticas Mutables
30.4.
Uniones
30.5.
Llamar Funciones Unsafe (Inseguras)
30.6.
Implementación de Traits Unsafe (Inseguras)
30.7.
Envoltorio de FFI Seguro
❱
30.7.1.
Soluciones
Android
31.
Te damos la bienvenida
32.
Configurar
33.
Reglas de Compilación (Build)
❱
33.1.
Binarios
33.2.
Biblioteca
34.
AIDL
❱
34.1.
Interfaz
34.2.
Implementación
34.3.
Servidor
34.4.
Despliegue
34.5.
Cliente
34.6.
Cambio de API
35.
Almacenamiento de registros
36.
Interoperabilidad
❱
36.1.
Con C
❱
36.1.1.
Llamar a C con Bindgen
36.1.2.
Llamar a Rust desde C
36.2.
Con C++
❱
36.2.1.
Módulos de Pruebas
36.2.2.
Binarios de Rust
36.2.3.
Generated C++
36.2.4.
C++ Bridge
36.2.5.
Tipos escalares
36.2.6.
Shared Enums
36.2.7.
Manejo de Errores
36.2.8.
Manejo de Errores
36.2.9.
Additional Types
36.2.10.
Building for Android: C++
36.2.11.
Construir componentes en Rust.
36.2.12.
Construir componentes en Rust.
36.3.
Con Java
37.
Ejercicios
Chromium
38.
Te damos la bienvenida
39.
Configurar
40.
Comparing Chromium and Cargo Ecosystems
41.
Policy
42.
Reglas de Compilación (Build)
❱
42.1.
Unsafe Rust
42.2.
Depending on Rust Code from Chromium C++
42.3.
Visual Studio Code
42.4.
Ejercicios
43.
Probando
❱
43.1.
rust_gtest_interop Library
43.2.
GN Rules for Rust Tests
43.3.
chromium::import! Macro
43.4.
Ejercicios
44.
Interoperabilidad con C
❱
44.1.
Ejemplos
44.2.
Limitations of CXX
44.3.
Manejo de Errores
❱
44.3.1.
Manejo de Errores
44.3.2.
Manejo de Errores
44.4.
Using CXX in Chromium
44.5.
Ejercicios
45.
Adding Third Party Crates
❱
45.1.
Configuring Cargo.toml
45.2.
Configuring gnrt_config.toml
45.3.
Downloading Crates
45.4.
Generating gn Build Rules
45.5.
Resolving Problems
❱
45.5.1.
Build Scripts Which Generate Code
45.5.2.
Build Scripts Which Build C++ or Take Arbitrary Actions
45.6.
Depending on a Crate
45.7.
Reviews and Audits
45.8.
Checking into Chromium Source Code
45.9.
Keeping Crates Up to Date
45.10.
Ejercicios
46.
Bringing It Together - Exercise
47.
Soluciones
Bare Metal: mañana
48.
Te damos la bienvenida
49.
no_std
❱
49.1.
Un Pequeño Ejemplo
49.2.
alloc
50.
Microcontroladores
❱
50.1.
MMIO sin procesar
50.2.
PAC
50.3.
Crates HAL
50.4.
Crates de Soporte de Placa
50.5.
El Patrón de Tipo de Estado
50.6.
embedded-hal
50.7.
probe-rs, cargo-embed
❱
50.7.1.
Depuración
50.8.
Otros proyectos
51.
Ejercicios
❱
51.1.
Brújula
51.2.
Soluciones
Bare Metal: tarde
52.
Procesadores de aplicaciones
❱
52.1.
Iniciación a Rust
52.2.
Ensamblador en línea
52.3.
MMIO
52.4.
Escribir un controlador UART
❱
52.4.1.
Más traits
52.5.
Un controlador UART mejor
❱
52.5.1.
Bitflags
52.5.2.
Varios registros
52.5.3.
Conductor
52.5.4.
Cómo usarlo
52.6.
Almacenamiento de registros
❱
52.6.1.
Cómo usarlo
52.7.
Excepciones
52.8.
Otros proyectos
53.
Crates útiles
❱
53.1.
zerocopy
53.2.
aarch64-paging
53.3.
buddy_system_allocator
53.4.
tinyvec
53.5.
spin
54.
Android
❱
54.1.
vmbase
55.
Ejercicios
❱
55.1.
Controlador RTC
55.2.
Soluciones
Concurrencia: mañana
56.
Te damos la bienvenida
57.
Hilos
❱
57.1.
Hilos con ámbito
58.
Canales
❱
58.1.
Canales sin límites
58.2.
Canales delimitados
59.
Send y Sync
❱
59.1.
Send
59.2.
Sync
59.3.
Ejemplos
60.
Estado compartido
❱
60.1.
Arc
60.2.
Mutex
60.3.
Ejemplo
61.
Ejercicios
❱
61.1.
La cena de los filósofos
61.2.
Comprobador de enlaces multihilo
61.3.
Soluciones
Concurrencia: tarde
62.
Conceptos básicos de Async
❱
62.1.
async/await
62.2.
Future
62.3.
Runtimes (Tiempos de Ejecución)
❱
62.3.1.
Tokio
62.4.
Tasks
62.5.
Canales asíncronos
63.
Control de Flujo
❱
63.1.
Unir
63.2.
Seleccionar
64.
Inconvenientes
❱
64.1.
Bloqueo del ejecutor
64.2.
Pin
64.3.
Traits asíncronos
64.4.
Cancelación
65.
Ejercicios
❱
65.1.
La cena de los filósofos
65.2.
Aplicación de chat de difusión
65.3.
Soluciones
Conclusiones
66.
Gracias.
67.
Glossary
68.
Otros recursos
69.
Créditos
Light
Rust
Coal
Navy
Ayu
Comprehensive Rust 🦀
English
Brazilian Portuguese (Português do Brasil)
Chinese Simplified (汉语)
Chinese Traditional (漢語)
Korean (한국어)
Spanish (Español)
Smart Pointers
In this segment:
Box
(10 minutes)
Rc
(5 minutes)
Exercise: Binary Tree
(30 minutes)
This segment should take about 45 minutes