Python ha sido considerado durante mucho tiempo un «lenguaje para todos», pero Lua lleva el listón aún más bajo: 22 palabras clave, 8 tipos de datos y una estructura de datos. Esto es suficiente para escribir un juego, configurar un servidor web o automatizar una infraestructura en la nube.
Debido a un núcleo tan pequeño, el lenguaje se lee como pseudocódigo, y se puede aprender literalmente en una noche. En este artículo nos sumergiremos en profundidad: veremos cómo funcionan las tablas y las corrutinas, dónde Lua gana a Python, proporcionaremos estadísticas de uso y mostraremos ejemplos en vivo.

Mínimo de sintaxis — máximo de fuerza ⏱️
-- рекурсивный факториал
function fact(n)
if n == 1 then return 1 end
return n * fact(n - 1)
end
print("fact(5) = " .. fact(5)) -- 120Los bloques se cierran end, las líneas se concatenan .., los comentarios comienzan --. Claro y sin reglas ocultas. ¿Necesitas un ciclo? for de una sola línea lo resuelve:
for i = 1, 10 do print(i) endNúmeros secos: Lua vs Python, Ruby, JavaScript 📊
Indicador | Lua 5.4 | Python 3.12 | Ruby 3.3 | Node.js 20 |
|---|---|---|---|---|
Palabras clave | 22 | 35 | 41 | 44 |
Hello World, bytes en exe (Linux, compresión UPX) | 404 KB | 27 MB | 31 MB | 61 MB |
Hora de inicio del script "vacío", ms | 6 | 22 | 38 | 45 |
Pico de memoria de script «vacío», MB | 1.9 | 9.3 | 10.8 | 15.4 |
LOC para factorial (con i/o) | 5 | 7 | 9 | 9 |
GitHub ★ por año (2024→2025) | +7 % | +3 % | −1 % | +4 % |
Kernel + stdlib, líneas de código C | 29 k | 500 k | 380 k | 620 k |
Conclusión: Lua se inicia más rápido, ocupa menos memoria y es más compacto que sus competidores, al tiempo que conserva todas las características necesarias.
Una estructura de datos: una tabla 📦
local arr = {1, 4, 9}
local map = {width = 200, height = 100}
print(arr[1]) -- 1 (индексация с 1)
print(map.width) -- 200¿Quieres una matriz? Utiliza índices numéricos. ¿Necesitas un diccionario? Asigna por nombre. ¿Quieres ambos? No hay problema: la tabla puede almacenar simultáneamente elementos posicionales y con nombre.
Ventajas de este enfoque:
Un modelo de memoria simple es un asignador.
No hay diferencia entre un objeto JSON y una matriz al intercambiar datos con JS.
El tiempo de aprendizaje se reduce: «aprendí las tablas, entendí todas las estructuras de datos de Lua».
Entorno productivo 🔧
Asignaciones múltiples y valores devueltos
local a, b = 10, 20
function size() return 800, 600 end
local w, h = size()Iteradores
ipairsypairs
for i, v in ipairs({"a","e","i"}) do print(i, v) end
for k, v in pairs({john=120, ann=80}) do print(k, v) endCorrutinas — una forma fácil de escribir código no bloqueante sin async/await:
local co = coroutine.create(function()
for i = 1,3 do print("tick", i); coroutine.yield() end
end)
coroutine.resume(co) -- tick 1
coroutine.resume(co) -- tick 2
coroutine.resume(co) -- tick 3Dónde funciona ya Lua 🚀
Proyecto / Producto | Qué hace Lua | Motivo de la elección |
Roblox | La lógica de juego de millones de juegos | Sandbox + velocidad JIT |
Blizzard WoW | Interfaz de usuario y complementos | Reinicio «en caliente» sin reconstrucción |
Nginx (OpenResty) | Renderizado dinámico y A/B | Ligereza, integración |
Adobe Lightroom | Extensiones y ajustes preestablecidos | Scripting multiplataforma |
Wireshark | Diseccionadores personalizados | Integración rápida de módulos C |
Esto es solo la punta del iceberg: Lua se puede encontrar en Redis, en los sistemas integrados de DJI e incluso en el piloto automático de Tesla.
Biblioteca estándar mínima pero potente 📚
local msg = "Hello Lua"
print(msg:sub(7):lower():reverse()) -- aulLíneas, tablas, corrutinas, sistema de archivos,
os,debug: todo ya está cosido, no es necesario importar nada.El sistema de patrones «ligero y fácil de recordar» ocupa <500 líneas de C.
El recolector de basura con un algoritmo de lista tricolor funciona automáticamente.
Gestión de errores sin dolor de cabeza 🚑
function grade(score)
if score > 100 then error{code=1002,msg=">100"} end
return score>=50 and "P" or "F"
end
for _, s in ipairs({20,120,60}) do
local ok, res = pcall(grade, s)
if ok then print("Grade:", res)
else print("Error["..res.code.."]:", res.msg) end
endpcall captura excepciones y el resultado (ok, data) simplifica el flujo de procesamiento.
Módulos sin palabras clave especiales 📦➡️📦
-- calc.lua
local M = {}
function M.add(a,b) return a+b end
return M-- main.lua
local calc = require("calc")
print(calc.add(2,3)) -- 5Sin export/import; tablas y require — ese es todo el «montaje».
Ecosistema: pequeño pero en crecimiento 🌱
LuaRocks: >9000 paquetes (crecimiento +12 % en 2024).
LuaJIT: acelera el código a velocidad C, se utiliza en Nginx y Redis.
Tendencias de vacantes: Upwork señala un aumento del 18 % en la demanda de Lua freelance para 2024.
Por qué aprender Lua ahora 🎓
Low‑code boom: las startups buscan DSL integradas: Lua se integra con dos archivos C.
Industria del juego: Roblox, Defold, Corona SDK se basan en scripts de Lua.
Mercado de IoT: los firmwares ESP con Lua ocupan <512 KB de flash.
OpenAI API? 🤖 Escribir scripts de pruebas A‑B es más barato en Lua que aumentar el full‑stack.
A través de aplicación «Kodik: aprendizaje de programación» puedes completar un curso interactivo de Lua en una tarde 🔥 y aplicar tus habilidades de inmediato.
Conclusión 🎯
Lua combina el minimalismo extremo con la practicidad: el compilador JIT, LuaRocks, las corrutinas y las metatablas te permiten escribir juegos, servidores web y scripts para DevOps. Si necesitas un lenguaje que puedas explicar a un amigo mientras tomas un café, prueba Lua. Y si quieres pasar de cero a las primeras corrutinas en un par de horas, echa un vistazo a «Código: aprendizaje de programación».
