wandres.dev
El lenguaje mínimo que está en todas partes

Domina Lua
hasta nivel dios

Lua a fondo: tablas y metatablas, closures y upvalues, corrutinas, el recolector y la máquina virtual de registros, la API C, embeber el lenguaje y LuaJIT.

La ruta

22 niveles, de novato a dios

Cada nivel construye sobre el anterior. Sin saltos, sin huecos.

Ontología Nivel 0 · El mapa de Lua

La visión aérea: un lenguaje diminuto construido sobre tablas y closures, su máquina virtual de registros, la API C que lo hace embebible, y dónde vive hoy.

Mapa mentalLua

El lenguaje Nivel 1 · minimalismo como doctrina

De dónde sale Lua, la obsesión por el tamaño y la portabilidad, y por qué acabó dentro de juegos, de nginx, de Redis y de tu editor.

historiafilosofíaembebido

Valores y tipos Nivel 2 · ocho tipos y ya

Los tipos de Lua, la ausencia de declaraciones, `nil` frente a `false`, la verdad en Lua, y la diferencia entre valor e identidad.

tiposnilverdad

Números Nivel 3 · enteros y flotantes

La división de números desde 5.3: subtipo entero y flotante, aritmética, división entera, conversiones implícitas y desbordamiento.

integerfloataritmética

Strings Nivel 4 · inmutables e internadas

Las cadenas por dentro: inmutabilidad, internamiento de cadenas cortas, escapes, cadenas largas, y las cadenas externas de 5.5.

stringinternado5.5

Tablas I Nivel 5 · el único tipo compuesto

La tabla como array, diccionario, objeto, módulo y espacio de nombres a la vez; constructores, claves, y el idioma de la tabla vacía.

tablaarrayclave

Tablas II Nivel 6 · por dentro

La representación real: parte array y parte hash, el rehash y su coste, los arrays compactos de 5.5, y por qué el operador de longitud es traicionero.

rehashcompact arraylongitud

Funciones Nivel 7 · valores de primera clase

Funciones como valores, retornos múltiples y sus reglas de ajuste, `...` y los varargs, y las tablas de varargs con nombre de 5.5.

funciónmultiretvarargs

Closures y upvalues Nivel 8 · el mecanismo real

Qué captura exactamente un closure: upvalues abiertos y cerrados, closures que comparten estado, y por qué esto define el estilo de Lua.

closureupvaluecaptura

Ámbito y globales Nivel 9 · _ENV lo explica todo

Locales frente a globales, el coste de un global, `_ENV` como upvalue implícito, entornos personalizados, y las declaraciones de globales de 5.5.

_ENVgloballocal

Metatablas I Nivel 10 · cambiar el comportamiento

El mecanismo que hace flexible a Lua: metatablas y metamétodos, `__index` con tabla y con función, `__newindex`, y las tablas de solo lectura.

metatabla__index__newindex

Metatablas II Nivel 11 · el catálogo completo

Operadores aritméticos y de comparación, `__call`, `__tostring`, `__len`, `__gc`, y las variables to-be-closed con `__close`.

__call__gc__close

Objetos en Lua Nivel 12 · prototipos con metatablas

La orientación a objetos que no viene de fábrica: el idioma de la clase, `self` y los dos puntos, herencia, y las alternativas sin metatablas.

OOselfherencia

Módulos Nivel 13 · require por dentro

Cómo carga Lua un módulo: `package.path` y `package.cpath`, los searchers, el caché de `package.loaded`, y escribir un módulo bien.

requirepackagemódulo

Errores Nivel 14 · pcall y nada más

El modelo de errores sin excepciones: `error` y sus niveles, `pcall` y `xpcall`, tracebacks, y el idioma de devolver `nil` con un mensaje.

pcallerrortraceback

Corrutinas I Nivel 15 · el modelo asimétrico

Corrutinas de verdad: `create`, `resume`, `yield` y el paso de valores en ambos sentidos; su estado, y en qué se diferencian de los hilos.

coroutineyieldresume

Corrutinas II Nivel 16 · construir sobre ellas

Lo que se puede edificar encima: generadores, productores y consumidores, y cómo se implementa async sobre corrutinas en bibliotecas reales.

generadorasyncpatrones

Iteradores Nivel 17 · el protocolo del for

El `for` genérico por dentro: la tripleta de función, estado y control; iteradores con y sin estado, y escribir los tuyos.

foriteradorpairs

La biblioteca estándar Nivel 18 · pequeña a propósito

Todo lo que trae Lua: `string`, `table`, `math`, `os`, `io`, `utf8`; qué falta deliberadamente y por qué no hay batteries included.

stdlibioutf8

Patrones Nivel 19 · no son expresiones regulares

El lenguaje de patrones propio de Lua: clases, cuantificadores, capturas, anclas, `gsub` y `gmatch`, y sus límites frente a una regex.

patronesgsubcapturas

Metaprogramación Nivel 20 · código que hace código

`load` y la compilación en tiempo de ejecución, funciones como datos, generar Lua desde Lua, y los riesgos de hacerlo.

loadgeneracióndinámico

El recolector Nivel 21 · incremental y generacional

La gestión de memoria: marcado y barrido incremental, el modo generacional, los cambios de 5.5, tablas débiles y finalizadores.

GCweakfinalizador
106lecciones
22niveles
0→∞de cero a dios

¿Listo para dominar Lua?

Empieza por los fundamentos y sube nivel a nivel hasta el dominio total.

Comenzar el camino →