| Lua | ||
|---|---|---|
|
| ||
|
Roberto Ierusalimschy https://www.lua.org/ y https://www.lua.org/portugues.html | ||
| Información general | ||
| Extensiones comunes | .lua | |
| Paradigma |
Multiparadigma: interpretado, imperativo (procedural, basado en prototipos, orientado a objetos), funcional | |
| Apareció en | 1993 | |
| Diseñado por |
Roberto Ierusalimschy Waldemar Celes Luiz Henrique de Figueiredo | |
| Última versión estable | (22 de diciembre de 2025 (10 meses y 8 días)) | |
| Sistema de tipos | dinámico, fuerte, duck | |
| Implementaciones | Lua, LuaJIT, LLVM-Lua, LuaCLR, Nua, Lua Alchemy, Luvit | |
| Dialectos | Metalua, Luau | |
| Influido por | Scheme, SNOBOL, Modula, CLU, C++ | |
| Ha influido a | Io, GameMonkey, Squirrel, Falcon, Dao, MiniD | |
| Sistema operativo | Multiplataforma | |
| Licencia | MIT License | |
Lua (literalmente «luna» en portugués) es un lenguaje de programación multiparadigma, imperativo, estructurado y bastante ligero, que fue diseñado como un lenguaje interpretado con una semántica extendible. Está diseñado principalmente para ser utilizado de manera embebida en aplicaciones. Lua es un lenguaje multiplataforma y su intérprete está escrito en ANSI C.
Lua fue creado en 1993 por Roberto Ierusalimschy, Luis Enrique de Figueiredo y Waldemar Celes, miembros del Grupo de Tecnología en Computación Gráfica (Tecgraf) en la Pontificia Universidad Católica de Río de Janeiro, basándose en una estructura similar a C y Perl.
Las versiones de Lua anteriores a la 5.0 fueron distribuidas bajo una licencia similar a la BSD, de la versión 5.0 en adelante se utiliza la licencia MIT, compatible con la GPL.
Lua ha sido usado en muchas aplicaciones comerciales y no comerciales, cuyo número se incrementa cada año.
Lua es un lenguaje de programación suficientemente compacto para usarse en diferentes plataformas. En Lua las variables no tienen tipo, solo los datos y pueden ser lógicos, enteros, números de coma flotante o cadenas. Estructuras de datos como vectores, conjuntos, tablas hash, listas y registros pueden ser representadas utilizando la única estructura de datos de Lua: la tabla.
Lua es un lenguaje multiparadigma porque su semántica puede ser extendida y modificada redefiniendo funciones de las estructuras de datos utilizando metatablas, casi como en Perl (así permite implementar, por ejemplo, la herencia aunque sea ajena al lenguaje). Lua ofrece soporte para funciones de orden superior, recolector de basura. Combinando todo lo anterior, es posible utilizar Lua tanto en programación orientada a objetos como en programación funcional.
Los programas en Lua no son interpretados directamente, sino compilados a código bytecode, que es ejecutado en la máquina virtual de Lua. El proceso de compilación es normalmente transparente al usuario y se realiza en tiempo de ejecución, pero puede hacerse con anticipación para aumentar el rendimiento y reducir el uso de la memoria al prescindir del compilador.
También es posible la compilación en tiempo de ejecución utilizando LuaJIT.
El clásico programa Hola mundo puede ser escrito de la siguiente manera:
print("Hola mundo!")
También puede ser escrito como
io.write('Hello World!\n')
o el ejemplo dado en el Website de Lua Archivado el 4 de marzo de 2016 en Wayback Machine.
io.write("Hello world, from ",_VERSION,"!\n")
Los comentarios usan la siguiente sintaxis, similar a Ada, SQL y VHDL
-- Un comentario en Lua empieza con doble guion hasta la siguiente línea
--[[ Los strings y comentarios multilínea
se adornan con doble corchete]]
El factorial es un ejemplo de función recursiva.
function factorial(n)
if n == 0 then
return 1 end
return n * factorial(n - 1)
end
Lua tiene cuatro tipos de bucles: el bucle while, el bucle for numérico y genérico y el bucle repeat.
El bucle while tiene esta sintaxis:
while (condición) do
-- Bloque
end
La forma del bucle for numérico es:
local tabRes = {} local inicio, fin, paso = 10, 1, -1 -- El paso puede ser negativo, for indice = inicio, fin, paso do -- permitiendo al bucle for restar o sumar tabRes[#tabRes + 1] = indice end print(table.concat(tabRes, " "))
10 9 8 7 6 5 4 3 2 1
Otra forma del bucle for es el for genérico:
for clave, valor in pairs(_G) do
print(clave)
end
Esta forma itera la tabla _G usando el iterador estándar pairs hasta que retorne
nil
El bucle repeat:
local condición = false
repeat
-- Bloque
until condición
Se ejecuta el cuerpo del bucle al menos una vez, y mantendría el bucle hasta que “cond” se convierta en true. Este es muy similar al do while de otros lenguajes de programación, salvo que do while se repite mientras cumpla la condición y en este caso, se repetirá hasta que se cumpla la condición.
Lua está diseñado principalmente para ser un sistema embebido. Debido a lo anterior, es común que sea empleado como lenguaje principal de diversas API para el desarrollo de complementos y modificaciones. Por ejemplo, programas como ZeroBrane Studio, REAPER o Rockbox son extensibles a través del uso de Lua. Otro programa que hace uso de este lenguaje es Renoise, un DAW escrito en C++ que, en sus últimas versiones, ofrece la posibilidad de usar el código Lua para extender sus capacidades. De este modo, cualquier usuario con conocimientos del lenguaje Lua y de la propia API disponible de Renoise puede expandir las funcionalidades de este programa añadiendo nuevas funciones específicas, disparadas desde los propios menús desplegables o incluso creando ventanas flotantes con interfaz gráfica propia, combinando Lua con la compatibilidad OSC y la entrada/salida MIDI. Todo este conjunto permite una personalización adicional casi ilimitada de este programa. Incluso Renoise dispone de un terminal propio para editar y ejecutar el código Lua, facilitando enormemente la búsqueda de errores en el código.
El lenguaje también ha sido utilizado para procesar datos de entrada en sistemas complejos, configurar aplicaciones, controlar hardware y otras tareas diversas.
Lenguajes como Lua permiten a las compañías ahorrar tiempo, al simplificar el trabajo de desarrollo de un nuevo lenguaje. Por ejemplo, para portar una aplicación desarrollada con Lua de un sistema operativo a otro, solo es necesario efectuar cambios mínimos en el código fuente.
Lua es también uno de los lenguajes de programación más utilizados para el desarrollo de homebrews de la consola PSP de Sony debido a su sencillez.[cita requerida]
Gracias a su simplicidad, Lua está disponible para múltiples arquitecturas de procesadores. Existen versiones de Lua para videoconsolas como PSP, Wii y SEGA Saturn, que usa librerías propias de SEGA.
Debido a que Lua es un lenguaje ligero, relativamente rápido y con una licencia permisiva, ha ganado popularidad entre los desarrolladores de videojuegos.
Roblox utiliza Luau, una variante de Lua, como su principal lenguaje de programación para el desarrollo de videojuegos, denominados "experiencias" dentro de la plataforma, mediante su entorno de desarrollo Roblox Studio.
El motor de videojuegos LÖVE permite desarrollar videojuegos multiplataforma utilizando Lua.
Lua también ha sido utilizado en otros motores y herramientas de desarrollo de videojuegos, así como en consolas de fantasía como TIC-80, Pico-8 y LIKO-12, entre otras.
Empresas como Valve, Electronic Arts y Bethesda han utilizado Lua en diferentes partes de sus videojuegos y herramientas de desarrollo. En el caso de Bethesda y EA su uso también se ha dado en herramientas desarrolladas por la comunidad.[cita requerida] Otros videojuegos y motores de juego que hacen uso de Lua son:
Lua se puede implementar de muchas formas en el juego de rol RPG de Tibia siempre y cuando existan las funciones y acciones secundarias en tu consola, mucha gente usa el lenguaje de Lua para hacer sistemas, scripts, mods para servidores de Tibia y esto beneficia al público en general que abre un servidor de Tibia.[cita requerida]