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.
  13. 116Códigos de barras y QRstd/barcode devuelve datos, no dibujos — QR, Code 128 y EAN-13 en Nyx puro, el mismo programa nativo y en wasm.
  14. 118Factura en PDFuna factura tamaño carta en Nyx puro — montos alineados a la derecha, una tabla hecha con text+line, un logo PNG y un QR, nativo y en wasm.
  15. 123Armar y leer un archivo .zipstd/zip en Nyx puro, sin zlib: DEFLATE por entrada, CRC-32 verificado al leer, topes contra bombas zip.
  16. 124Un libro contable en .xlsxstd/xlsx escribe un libro de verdad en Nyx puro: celdas con tipo, celdas combinadas, encabezado fijo, autofiltro y separador de miles.
  17. 125Leer una hoja .xlsxxlsx_read devuelve cada celda con su tipo, fechas ISO, los huecos como celdas vacías y topes por omisión contra bombas zip.
  18. 133Miniaturas de la foto de un productostd/image decodifica con la mayor reducción posible, saca varios tamaños de una decodificación y aplana la transparencia sobre blanco.
  19. 138Una plantilla .xlsx de carga masiva con listas desplegablesvalidate_list y validate_list_range restringen una columna a valores permitidos; xlsx_fill marca las filas rechazadas.
  20. 139Un PDF que calca una hoja preimpresastd/pdf fase 2: grosor de línea, sombreado gris y en color, Times y Courier, texto girado, estado gráfico por página.
  21. 140Miniaturas de hojas escaneadasstd/image sobre escaneos tamaño carta: casi no hay reducción, así que importa el modo de compilación.
  22. 143Dibujar una página de un PDF como imagenstd/pdf_render dibuja una página de un PDF en una Image en el servidor, sin programas externos; lo que no sabe dibujar es un error o una lista que se revisa.
  23. 145Un CSV grande sin split() por filaindexOf ubica las comas y string_to_float_range parsea el número directo de los bytes, sin crear un substring por campo.
  24. 146Un CSV grande por columnastry_csv_read parsea un CSV en una pasada directo a columnas tipadas; una columna cat llega como códigos enteros más un diccionario, así que agrupar es indexar un arreglo.

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.
  12. 135Sombrear un nombre dentro de un bloqueUn nombre redeclarado en un if, un ciclo, un brazo de match o un try es otra variable que desaparece al cerrar la llave.
  13. 136defer corre al cerrar su bloquedefer se dispara al salir del bloque donde está escrito — caída al final, return, ?, break o continue — en orden LIFO.

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.
  14. 117Web Serial: ticket de impresora térmicabytes ESC/POS directo a una impresora de punto de venta desde wasm32-wasi con await — sin diálogo de impresión, con corte y gaveta.
  15. 121Guardar un valor entre eventos wasmarena_persist copia un String o Array fuera de la arena por evento para que otro evento lo lea intacto — el arreglo para la memoria reciclada en silencio.
  16. 128Verificar un aviso de pago firmadostd/rsa comprueba una firma RSA-SHA256 con la clave pública del proveedor: PKCS#1 v1.5 o PSS, verdadero, falso o error.
  17. 131Fórmulas de usuario seguras para una nóminastd/expr compila una vez, evalúa por empleado con decimales de punto fijo y dice la posición de cada error.
  18. 132Una PWA que habla con un servidor de la red localPermiso de red local más un plazo en fetch y SSE, para que una tablet no espere minutos a un servidor apagado.

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.
  22. 119LISTEN/NOTIFY como bus en vivoPostgreSQL reparte una notificación a las salas SSE de todos los procesos, solo si hace commit — sin Redis en el medio.
  23. 120Conexiones keep-alive ociosasworkers es cuántos pedidos corren a la vez, no cuántas conexiones quedan abiertas — una pestaña ociosa se estaciona en el event loop y no cuesta un hilo.
  24. 122HTTPS a un sitio con la cadena mal armadaHttpOpts.cas_extra suma el certificado intermedio que falta para UNA petición, sin apagar la verificación.
  25. 126gzip automático en std/serveLas respuestas de texto de 1 KiB o más salen comprimidas cuando el cliente manda Accept-Encoding: gzip — sin escribir código.
  26. 127Topes de cuerpo y límite de peticiones en std/serveUn tope de cuerpo por ruta (413) y un limitador de peticiones por origen (429 con Retry-After), compartido por todos los workers.
  27. 129HTTPS con certificado de clienteTLS mutuo por petición: HttpOpts presenta tu certificado y clave, validados ANTES de conectar.
  28. 130Subir un archivo binario con multipartmultipart_build y try_http_post_multipart envían campos de texto más un archivo binario, y un servidor local comprueba que los bytes llegan intactos.
  29. 134Convertir el correo entrante en casosstd/imap, std/mime y un punto de avance por UID atan la respuesta del cliente al hilo de la cotización que contesta.
  30. 137OAuth2 para un buzón de Gmail o Microsoft 365std/oauth2 arma la URL de login con PKCE, renueva tokens y soporta device code — el token que esperan imap_auth_xoauth2 y smtp_auth_xoauth2.
  31. 141Un correo con versión de texto Y versión HTMLsmtp_message_alternative arma multipart/alternative, se combina con adjuntos y no inventa el texto por ti.
  32. 142Verificar SPF, DKIM y DMARC antes de enviar correostd/dns lee registros TXT y CNAME y distingue NXDOMAIN de NODATA; la lógica de comprobación es pura y se prueba sin red.
  33. 144Reenviar una respuesta por partes apenas llegatry_http_stream lee de a poco la respuesta de otra API y sse_broadcast reenvía cada evento al navegador en cuanto llega.

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 →