Por ejemplo
Nyx por ejemplo
Recetas resueltas, en orden de dificultad. Cada una es un programa que compila y corre con la versión del pie: leerla, copiarla, cambiarla.
Fundamentos
- 01Hello WorldEl programa Nyx más simple — imprimir texto en la terminal.
- 02Variables
letinmutable,varmutable, tipos básicos e interpolación de strings. - 03FunctionsDefinir funciones con parámetros, tipos de retorno y argumentos por defecto.
- 04Control Flowif/else, bucles while, for-range, for-in, break y continue.
- 05ArraysCrear, indexar, agregar elementos e iterar sobre arrays dinámicos.
- 06MapsAlmacenamiento clave-valor con
Map.new(), insert, get, has e iteración de claves. - 07Stringstrim, length, substring, toUpper, split, contains e interpolación.
- 08StructsDefinir tipos de datos con campos y agregar métodos vía
impl. - 09EnumsTipos de datos algebraicos con variantes que portan datos y
matchexhaustivo. - 10ClosuresFunciones de primera clase que capturan su entorno circundante.
Entrada, salida y datos
- 11Lectura y Escritura de ArchivosLeer y escribir archivos con
read_fileywrite_file. - 12Entrada por StdinLeer entrada del usuario desde la terminal con
read_line. - 13Argumentos de CLIAcceder a los argumentos de línea de comandos con
get_args. - 14Variables de EntornoLeer variables de entorno con
getenvygetenv_default. - 15Parseo de JSONParsear strings JSON hacia Maps y Arrays.
- 16Serialización JSONConvertir estructuras de datos de vuelta a strings JSON.
- 17Expresiones RegularesMatch, extracción y reemplazo con regex POSIX.
- 18Parseo de CSVDividir líneas y campos para procesar datos tabulares.
- 19Fecha y HoraTimestamps, fechas formateadas y medición de tiempo.
- 20Spawn y ChannelCrear threads y comunicarse mediante channels.
- 101Errores de archivo: dos niveles
Resultcuando quien llama puede reaccionar, panic cuando morir es lo honesto.
Tipos y patrones
- 21TraitsDefinir comportamiento compartido con
traiteimpl ... for. - 22Cotas de TraitRestringir genéricos con
<T: Display>. - 23Derive CloneGenerar automáticamente implementaciones de Clone, Debug y otros traits.
- 24Option: Some y NoneManejar valores opcionales con
SomeyNone. - 25Result: Ok y ErrManejo de errores con
OkyErr. - 26Operador TryPropagación de errores con cortocircuito usando
?. - 27if letDesestructurar enums en condiciones con
if let. - 28Guardas de MatchAgregar condiciones a los brazos de match con guardas
if. - 29Iterator: map y filterTransformaciones perezosas con
.iter().filter().map().collect(). - 30Iterator: foldReducir una secuencia a un único valor con
fold.
Avanzado
- 32Iterador: take() y skip()Recortar secuencias con
takeyskip. - 33RecursiónResolver problemas con funciones que se llaman a sí mismas.
- 34OrdenamientoOrdenar arrays de enteros y strings.
- 35Manejo de ErroresBloques try/catch para recuperarse de errores en tiempo de ejecución.
- 36Defer y CleanupLimpieza garantizada con bloques
defer { ... }. - 37Sleep y TemporizadoresPausar la ejecución y medir tiempo transcurrido.
- 38Hashing CriptográficoSHA-256, MD5 y HMAC-SHA256 para verificación de integridad.
- 39Números Aleatorios y UUIDGenerar números aleatorios e identificadores únicos.
- 40Creación de ThreadsEjecutar funciones de forma concurrente con
thread_spawn. - 102Motor de templates estilo FlaskInterpolación,
#if,#eachy partials constd/template.
Redes
- 41Base64Codificación/decodificación RFC 4648 — variantes estándar y URL-safe.
- 42URL EncodePercent-encoding, query strings y escape de entidades HTML.
- 43Configuración TOMLParsear strings de configuración con
std/toml. - 44MessagePackSerialización binaria: compacta, tipada, orientada a bytes.
- 45DNS ResolveConvertir nombres de host a direcciones IP con
resolve. - 46Cliente TCPConectar, escribir y leer sobre sockets TCP crudos.
- 47Servidor TCPEscuchar, aceptar y hacer eco con
tcp_listen. - 48Socket UDPDatagramas sin conexión con
udp_bindyudp_sendto. - 49HTTP GETPeticiones de cliente HTTP de alto nivel con
std/http. - 50HTTP POSTPeticiones POST y métodos personalizados con
http_request. - 51Servidor HTTPServidor mínimo con
http_servey enrutamiento de peticiones. - 52Middleware HTTPFramework web con
App, rutas, logging y CORS. - 53WebSocketFraming RFC 6455, parseo y respuestas de handshake.
- 55SQLiteBase de datos SQL en memoria con
sqlite_openysqlite_query. - 56Escritura CSVCrear y serializar documentos CSV con
std/csv.
Concurrencia
- 57MutexProteger estado compartido entre threads con locks.
- 58Patrones de CanalesPaso de mensajes con channels con buffer y centinelas.
- 59Pool de WorkersDespachar tareas a N threads mediante channels compartidos.
- 60Productor-ConsumidorPipeline desacoplado con contrapresión de channel acotado.
- 61WaitGroupEsperar a múltiples threads con
wg_add/wg_done/wg_wait. - 62SemáforoLimitar el acceso concurrente con
sem_acquire/sem_release.
Sistemas
- 64Fork & ExecEjecutar comandos externos con
fork,execvpywaitpid. - 65PipesConectar procesos con
pipe_newydup2. - 66Manejo de SeñalesRegistrar callbacks de señales con
signal_handle. - 67Vigilante de ArchivosDetectar cambios en archivos mediante polling con
stat. - 68Control de ProcesosPID, directorio de trabajo, detección de terminal y stat de archivos.
- 69Terminal RawEntrada carácter por carácter con
raw_mode_enter. - 70Script ShebangEjecutar archivos Nyx como scripts ejecutables con
#!/usr/bin/env nyx.