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

  1. 01Hello WorldEl programa Nyx más simple — imprimir texto en la terminal.
  2. 02Variableslet inmutable, var mutable, tipos básicos e interpolación de strings.
  3. 03FunctionsDefinir funciones con parámetros, tipos de retorno y argumentos por defecto.
  4. 04Control Flowif/else, bucles while, for-range, for-in, break y continue.
  5. 05ArraysCrear, indexar, agregar elementos e iterar sobre arrays dinámicos.
  6. 06MapsAlmacenamiento clave-valor con Map.new(), insert, get, has e iteración de claves.
  7. 07Stringstrim, length, substring, toUpper, split, contains e interpolación.
  8. 08StructsDefinir tipos de datos con campos y agregar métodos vía impl.
  9. 09EnumsTipos de datos algebraicos con variantes que portan datos y match exhaustivo.
  10. 10ClosuresFunciones de primera clase que capturan su entorno circundante.
  11. 107continue en forSaltar al siguiente elemento dentro de un for — sobre un array y sobre un rango.

Entrada, salida y datos

  1. 11Lectura y Escritura de ArchivosLeer y escribir archivos con read_file y write_file.
  2. 12Entrada por StdinLeer entrada del usuario desde la terminal con read_line.
  3. 13Argumentos de CLIAcceder a los argumentos de línea de comandos con get_args.
  4. 14Variables de EntornoLeer variables de entorno con getenv y getenv_default.
  5. 15Parseo de JSONParsear strings JSON hacia Maps y Arrays.
  6. 16Serialización JSONConvertir estructuras de datos de vuelta a strings JSON.
  7. 17Expresiones RegularesMatch, extracción y reemplazo con regex POSIX.
  8. 18Parseo de CSVDividir líneas y campos para procesar datos tabulares.
  9. 19Fecha y HoraTimestamps, fechas formateadas y medición de tiempo.
  10. 20Spawn y ChannelCrear threads y comunicarse mediante channels.
  11. 101Errores de archivo: dos nivelesResult cuando quien llama puede reaccionar, panic cuando morir es lo honesto.
  12. 106JSON: números exactosjson_stringify reemite cada número tal como vino; json_as_float pasa por un double y pierde los ceros de más.

Tipos y patrones

  1. 21TraitsDefinir comportamiento compartido con trait e impl ... for.
  2. 22Cotas de TraitRestringir genéricos con <T: Display>.
  3. 23Derive CloneGenerar automáticamente implementaciones de Clone, Debug y otros traits.
  4. 24Option: Some y NoneManejar valores opcionales con Some y None.
  5. 25Result: Ok y ErrManejo de errores con Ok y Err.
  6. 26Operador TryPropagación de errores con cortocircuito usando ?.
  7. 27if letDesestructurar enums en condiciones con if let.
  8. 28Guardas de MatchAgregar condiciones a los brazos de match con guardas if.
  9. 29Iterator: map y filterTransformaciones perezosas con .iter().filter().map().collect().
  10. 30Iterator: foldReducir una secuencia a un único valor con fold.
  11. 105Campo Fn en un structLigar el campo a una variable antes de llamarlo — el receptor puede ser variable local, parámetro por valor o campo anidado.

Avanzado

  1. 31Iterador: enumerate()Obtener pares índice-valor durante la iteración.
  2. 32Iterador: take() y skip()Recortar secuencias con take y skip.
  3. 33RecursiónResolver problemas con funciones que se llaman a sí mismas.
  4. 34OrdenamientoOrdenar arrays de enteros y strings.
  5. 35Manejo de ErroresBloques try/catch para recuperarse de errores en tiempo de ejecución.
  6. 36Defer y CleanupLimpieza garantizada con bloques defer { ... }.
  7. 37Sleep y TemporizadoresPausar la ejecución y medir tiempo transcurrido.
  8. 38Hashing CriptográficoSHA-256, MD5 y HMAC-SHA256 para verificación de integridad.
  9. 39Números Aleatorios y UUIDGenerar números aleatorios e identificadores únicos.
  10. 40Creación de ThreadsEjecutar funciones de forma concurrente con thread_spawn.
  11. 102Motor de templates estilo FlaskInterpolación, #if, #each y partials con std/template.
  12. 109await en el navegadorUna async fn que espera al anfitrión JS sin partir el flujo en callbacks — wasm32-wasi con Asyncify.
  13. 114IndexedDB sin conexiónUn catálogo y una cola de ventas que sobreviven a un F5 — await sobre IndexedDB, sin el límite de localStorage.

Redes

  1. 41Base64Codificación/decodificación RFC 4648 — variantes estándar y URL-safe.
  2. 42URL EncodePercent-encoding, query strings y escape de entidades HTML.
  3. 43Configuración TOMLParsear strings de configuración con std/toml.
  4. 44MessagePackSerialización binaria: compacta, tipada, orientada a bytes.
  5. 45DNS ResolveConvertir nombres de host a direcciones IP con resolve.
  6. 46Cliente TCPConectar, escribir y leer sobre sockets TCP crudos.
  7. 47Servidor TCPEscuchar, aceptar y hacer eco con tcp_listen.
  8. 48Socket UDPDatagramas sin conexión con udp_bind y udp_sendto.
  9. 49HTTP GETPeticiones de cliente HTTP de alto nivel con std/http.
  10. 50HTTP POSTPeticiones POST y métodos personalizados con http_request.
  11. 51Servidor HTTPServidor mínimo con http_serve y enrutamiento de peticiones.
  12. 52Middleware HTTPFramework web con App, rutas, logging y CORS.
  13. 53WebSocketFraming RFC 6455, parseo y respuestas de handshake.
  14. 55SQLiteBase de datos SQL en memoria con sqlite_open y sqlite_query.
  15. 56Escritura CSVCrear y serializar documentos CSV con std/csv.
  16. 103Un modelo escrito una sola vez#[derive(Fields)] y std/postgres: el struct es la única fuente de verdad del esquema.
  17. 104Sin driver de por mediostd/postgres habla el protocolo wire v3 y SCRAM-SHA-256 en Nyx puro — conectar, versionar migraciones y parametrizar sin libpq.
  18. 108HTTP: plazo y causaUn cliente que se rinde a tiempo y distingue POR QUÉ falló: tls, timeout, connection.
  19. 110Eventos del servidor (SSE)Un canal que no ocupa un worker: la ruta pasa por el pipeline entero y después difunde a un room.
  20. 113Correo saliente con std/smtpMensaje, adjunto y dot-stuffing armados en Nyx puro — STARTTLS en 587 o TLS desde el saludo en 465.
  21. 115Claves repetidas de formulario/queryform_values/query_values recuperan todos los valores de una clave repetida — casillas, <select multiple> — donde req.form se queda callado con la última.

Concurrencia

  1. 57MutexProteger estado compartido entre threads con locks.
  2. 58Patrones de CanalesPaso de mensajes con channels con buffer y centinelas.
  3. 59Pool de WorkersDespachar tareas a N threads mediante channels compartidos.
  4. 60Productor-ConsumidorPipeline desacoplado con contrapresión de channel acotado.
  5. 61WaitGroupEsperar a múltiples threads con wg_add/wg_done/wg_wait.
  6. 62SemáforoLimitar el acceso concurrente con sem_acquire/sem_release.

Sistemas

  1. 64Fork & ExecEjecutar comandos externos con fork, execvp y waitpid.
  2. 65PipesConectar procesos con pipe_new y dup2.
  3. 66Manejo de SeñalesRegistrar callbacks de señales con signal_handle.
  4. 67Vigilante de ArchivosDetectar cambios en archivos mediante polling con stat.
  5. 68Control de ProcesosPID, directorio de trabajo, detección de terminal y stat de archivos.
  6. 69Terminal RawEntrada carácter por carácter con raw_mode_enter.
  7. 70Script ShebangEjecutar archivos Nyx como scripts ejecutables con #!/usr/bin/env nyx.
  8. 111nyx test --coverageQué función de src/ ninguna prueba llamó — homónimas de módulos distintos no se mezclan al medir.
  9. 112include_bytesUn recurso binario que viaja dentro del ejecutable, leído al compilar — sin depender de que el archivo llegue a disco.
Nyx, paso a pasoInstalarlo, escribir un primer programa, armar un proyecto y entregárselo a un asistente.Abrir →