Diferencia entre revisiones de «Lua»
m →Otras aplicaciones: corrijo error |
Reemplazo la palabla "portear" por "portar". |
||
(No se muestran 305 ediciones intermedias de más de 100 usuarios) | |||
Línea 1: | Línea 1: | ||
{{distinguir|Lúa}}{{otros usos|para=el uso del lenguaje de programación Lua como tal en Wikipedia|Wikipedia:Lua}} |
|||
'''Lua''' es un [[lenguaje de programación]] [[programación imperativa|imperativo]] y [[programación estructurada|estructurado]], bastante ligero que fue diseñado como lenguaje de [[lenguaje interpretado|script]] con una [[semántica]] extendible. En [[portugués]] y en [[gallego]], ''Lua'' significa ''[[luna]]''. |
|||
{{Ficha de lenguaje de programación |
|||
| nombre = Lua |
|||
| logo = Lua-Logo.svg |
|||
| tamaño_logo = 128px |
|||
| extensiones_comunes = .lua |
|||
| paradigma = [[Lenguaje de programación multiparadigma|Multiparadigma]]:<br />[[Lenguaje de programación interpretado|interpretado]],<br />[[Programación imperativa|imperativo]]<br />([[Programación por procedimientos|procedural]],<br />[[Programación basada en prototipos|basado en prototipos]],<br />[[Programación orientada a objetos|orientado a objetos]]),<br />[[Programación funcional|funcional]] |
|||
| año = 1993 |
|||
| diseñador = [[Roberto Ierusalimschy]]<br /> Waldemar Celes<br /> Luiz Henrique de Figueiredo |
|||
| desarrollador = |
|||
| última_versión = 5.4.7<ref>http://www.lua.org/news.html</ref> |
|||
| fecha_última_versión = {{fecha de lanzamiento|25|6|2024}} |
|||
| tipo_dato = [[Tipado dinámico|dinámico]], [[Lenguaje de programación#Tipos débiles y tipos fuertes|fuerte]], [[Duck typing|duck]] |
|||
| implementaciones = '''Lua''', [http://luajit.org/ LuaJIT], [http://code.google.com/p/llvm-lua/ LLVM-Lua], [https://web.archive.org/web/20090520130002/http://www.lua.inf.puc-rio.br/luaclr LuaCLR], [http://www.codeplex.com/Nua Nua], [http://code.google.com/p/lua-alchemy/ Lua Alchemy], [http://luvit.io Luvit] |
|||
| dialectos = [http://metalua.luaforge.net Metalua], [https://luau-lang.org Luau] |
|||
| influido_por = [[Scheme]], [[SNOBOL]], [[Modula-2|Modula]], [[CLU]], [[C++]] |
|||
| ha_influido = [[Io (lenguaje de programación)|Io]]<!--2002-->, [[GameMonkey Script|GameMonkey]]<!--2003-->, [[Squirrel (programming language)|Squirrel]]<!--2003-->, [[Falcon (lenguaje de programación)|Falcon]]<!--2003-->, [[Dao (lenguaje de programación)|Dao]]<!--2006-->, [[MiniD]]<!--2006--> |
|||
| sistema_operativo = [[Multiplataforma]] |
|||
| licencia = [[MIT License]] |
|||
| website = http://www.lua.org |
|||
}} |
|||
'''Lua''' es un [[lenguaje de programación]] [[Lenguaje de programación multiparadigma|multiparadigma]], [[Programación imperativa|imperativo]], [[Programación estructurada|estructurado]] y bastante ligero, que fue diseñado como un lenguaje [[Lenguaje de programación interpretado|interpretado]] con una [[semántica]] extendible. Está diseñado principalmente para ser utilizado de manera [[Script|incorporada]] en aplicaciones.<ref name=":0">{{Cita web|url=https://www.lua.org/spe.html|título=Lua - an extensible extension language|fechaacceso=2021-11-25|sitioweb=www.lua.org}}</ref> Lua es un lenguaje [[multiplataforma]] y su intérprete está escrito en [[ANSI C]]. El nombre significa «luna» en [[Idioma portugués|portugués]]. |
|||
== Historia == |
== Historia == |
||
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 (lenguaje de programación)|C]] y [[Perl]]. |
|||
Las versiones de Lua anteriores a la 5.0 fueron distribuidas bajo una licencia similar a la [[licencia BSD|BSD]], de la versión 5.0 en adelante se utiliza la [[MIT License|licencia MIT]], compatible con la [[GNU General Public License|GPL]]. |
|||
Lua ha sido usado en muchas [[Aplicación |
Lua ha sido usado en muchas [[Aplicación informática|aplicaciones]] comerciales y no comerciales, cuyo número se incrementa cada año.<ref>{{Cita web|url=https://pypl.github.io/PYPL.html|título=PYPL PopularitY of Programming Language index|fechaacceso=2021-04-27|sitioweb=pypl.github.io|idioma=en}}</ref> |
||
== Características == |
== Características == |
||
Lua es un lenguaje de programación suficientemente compacto para usarse en diferentes plataformas. En Lua las [[variable (programación)|variables]] no tienen [[tipo de dato|tipo]], solo los [[dato]]s y pueden ser [[Tipo de dato lógico|lógicos]], [[Entero (tipo de dato)|enteros]], [[Tipo de dato real|números de coma flotante]] o [[cadena de caracteres|cadenas]]. [[Estructura de datos|Estructuras de datos]] como [[Vector (informática)|vectores]], [[Conjunto (informática)|conjuntos]], [[Tabla hash|tablas hash]], [[Lista (informática)|listas]] y [[Registro (programación)|registros]] pueden ser representadas utilizando la única estructura de datos de Lua: la tabla. |
|||
Lua es un lenguaje '''[[lenguaje de programación multiparadigma|multiparadigma]]''' porque su semántica puede ser extendida y modificada redefiniendo [[subrutina|funciones]] de las estructuras de datos utilizando ''metatablas'', casi como en [[Perl]] (así permite implementar, por ejemplo, la [[herencia (informática)|herencia]] aunque sea ajena al lenguaje). Lua ofrece soporte para [[Función de orden superior|funciones de orden superior]], [[recolector de basura]]. Combinando todo lo anterior, es posible utilizar Lua en [[programación orientada a objetos]]. |
|||
Lua es un [[lenguaje de extensión]], suficientemente compacto para usarse en diferentes plataformas. En lua las [[variable (programación)|variables]] no tienen [[tipo de dato|tipo]], sólo los [[dato]]s y pueden ser [[tipo de dato lógico|lógicos]], [[tipo de dato entero|enteros]], [[tipo de dato real|números con punto flotante]] o [[cadena de caracteres|cadenas]]. [[estructura de datos|Estructuras de datos]] como [[array|matrices]], [[conjunto (programación)|conjuntos]], [[Tabla hash|tablas hash]], [[Lista (estructura de datos)|listas]] y [[registro (programación)|registros]] pueden ser representadas utlizando la única estructura de datos de Lua: la tabla. |
|||
La semántica de Lua puede ser extendida y modificada redefiniendo [[subrutina|funciones]] de las estructuras de datos utilizando metatablas. Lua ofrece soporte para [[funciones de orden superior]], [[Recolección de basura|colector de basura]]. Combinando todo lo anterior, es posible utilizar Lua en [[programación orientada a objetos]]. |
|||
== Funcionamiento interno == |
== Funcionamiento interno == |
||
Los programas en Lua no son interpretados directamente, sino [[Compilador|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 (informática)|memoria]] al prescindir del compilador. |
|||
También es posible la [[compilación en tiempo de ejecución]] utilizando [[LuaJIT]]. |
|||
Los programas en Lua no son interpretados directamente, sino [[compilador|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 [[memoria de ordenador|memoria]] al prescindir del compilador. |
|||
=== Códigos de ejemplo === |
|||
También es posible la [[Compilación JIT]] utilizado [http://luajit.org LuaJIT] |
|||
El clásico programa [[Hola mundo]] puede ser escrito de la siguiente manera: |
|||
== Aplicaciones == |
|||
<syntaxhighlight lang="lua"> |
|||
print("Hola mundo!") |
|||
</syntaxhighlight> |
|||
También puede ser escrito como |
|||
=== Juegos === |
|||
<syntaxhighlight lang="lua"> |
|||
Debido a que Lua compilado es pequeño, veloz y tiene una licencia permisiva ha ganado seguidores entre los desarrolladores de videojuegos. Algunos usos de Lua: |
|||
io.write('Hello World!\n') |
|||
</syntaxhighlight> |
|||
o el ejemplo dado en el [http://www.lua.org/cgi-bin/demo?hello Website de Lua] {{Wayback|url=http://www.lua.org/cgi-bin/demo?hello |date=20160304095806 }} |
|||
*''[[World of Warcraft]]'', donde el usuario tiene la posibilidad de personalizar casi completamente la [[gui|interfaz]] creando añadidos que permiten informarle de cualquier cosa. |
|||
<syntaxhighlight lang="lua"> |
|||
*También en un mod tipo "sandbox" para ''[[Half-Life 2]]'' llamado ''Garry's Mod'', pudiendo modificarlo casi completamente. Gran parte de ''Garry's Mod'' está escrito en lua. |
|||
io.write("Hello world, from ",_VERSION,"!\n") |
|||
*También en un mod para ''[[Half-Life 2]]'' llamado ''[[Fortress Forever]]'' que permite configurar altamente los mapas. |
|||
</syntaxhighlight> |
|||
*El RTS a gran escala ''[[Supreme Commander]]'', el cual es modificable por el usuario en casi todos sus aspectos. |
|||
*El juego de RPG ''Tibia'' |
|||
*Parte de ''[[S.T.A.L.K.E.R. - Shadow Of Chernobyl]]'', permitiendo al jugador modificar armas, armaduras y aspectos varios del juego. |
|||
*''[[Grim Fandango]]'' y ''La Fuga de Monkey Island'' (cuarta entrega de la saga ''[[Monkey Island]]'') utilizan internamente scripts en Lua para definir la historia y los eventos que ocurren durante la partida. |
|||
*''Worms 4: mayhem'' utiliza lua y xml para definir las misiones y desafios. |
|||
*Mediante un programa casero(o homebrew), el LuaPlayer, permite ejecutar archivos .lua en la conocida consola portatil de Sony. |
|||
Los [[Comentario (informática)|comentarios]] usan la siguiente sintaxis, similar a [[Ada (lenguaje de programación)|Ada]], [[SQL]] y [[VHDL]] |
|||
=== Otras aplicaciones === |
|||
<syntaxhighlight lang="lua"> |
|||
-- Un comentario en Lua empieza con doble guion hasta la siguiente línea |
|||
--[[ Los strings y comentarios multilínea |
|||
se adornan con doble corchete]] |
|||
</syntaxhighlight> |
|||
El [[factorial]] es un ejemplo de función [[Recursión (ciencias de computación)|recursiva]]. |
|||
Lua también se ha usado para procesar datos de entrada a sistemas complejos, configurar aplicaciones, controlar [[hardware]] y muchos otras cosas. |
|||
<syntaxhighlight lang="lua"> |
|||
function factorial(n) |
|||
* En el gestor de ventanas [[Ion]] es posible utilizar Lua para personalizar la apariencia y extender su funcionalidad. |
|||
if n == 0 then |
|||
return 1 end |
|||
return n * factorial(n - 1) |
|||
end |
|||
</syntaxhighlight> |
|||
=== Bucles === |
|||
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: |
|||
<syntaxhighlight lang="lua"> |
|||
while (condición) do |
|||
-- Bloque |
|||
end |
|||
</syntaxhighlight> |
|||
La forma del bucle for numérico es: |
|||
<syntaxhighlight lang="lua"> |
|||
local inicio, fin, paso = 10, 1, -1 -- El paso puede ser negativo, permitiendo al bucle for restar o sumar |
|||
for índice = inicio, fin, paso do |
|||
print(índice) |
|||
end |
|||
</syntaxhighlight> |
|||
Otra forma del bucle for es el for genérico: |
|||
<syntaxhighlight lang="lua"> |
|||
for clave, valor in pairs(_G) do |
|||
print(clave) |
|||
end |
|||
</syntaxhighlight> |
|||
Esta forma itera la tabla _G usando el iterador estándar pairs hasta que retorne <syntaxhighlight lang="lua>nil</syntaxhighlight> |
|||
El bucle repeat: |
|||
<syntaxhighlight lang="lua"> |
|||
local condición = false |
|||
repeat |
|||
-- Bloque |
|||
until condición |
|||
</syntaxhighlight> |
|||
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. |
|||
== Aplicaciones == |
|||
Lua está diseñado principalmente para ser incorporado en aplicaciones.<ref name=":0" /> Debido a lo anterior, es común que sea empleado como lenguaje principal de diversas [[Interfaz de programación de aplicaciones|API]] para el desarrollo de [[Complemento (informática)|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.<ref>[http://lua-users.org/wiki/LuaUses Usos de Lua]</ref> |
|||
* En el gestor de ventanas [[Ion WM|Ion]] es posible utilizar Lua para personalizar la apariencia y extender su funcionalidad. |
|||
* El gestor de ventanas [[awesome]] en su versión 3 utiliza Lua para su fichero de configuración. |
* El gestor de ventanas [[awesome]] en su versión 3 utiliza Lua para su fichero de configuración. |
||
Lenguajes como Lua permiten a las compañías ahorrar costes,{{Citation needed}} al simplificar el trabajo de desarrollo de nuevo software. Por ejemplo, para [[Portabilidad|''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. |
|||
La lista de usos reportados se puede encontrar [http://www.lua.org/uses.html aquí]. |
|||
Lua es también uno de los lenguajes de programación más utilizados para el desarrollo de ''[[homebrew]]s'' de la consola [[PlayStation Portable|PSP]] de [[Sony]] debido a su sencillez.{{Citation needed}} |
|||
=== Portabilidad === |
|||
Gracias a su simplicidad, Lua está disponible para múltiples [[Arquitectura de computadoras|arquitecturas de procesadores]]. Existen versiones de Lua para videoconsolas como [[PlayStation Portable|PSP]], [[Wii]] y [[Sega_Saturn|SEGA Saturn]], que usa librerías propias de [[SEGA]]. |
|||
=== En videojuegos === |
|||
Debido a que Lua es un lenguaje ligero, relativamente rápido y tiene una licencia permisiva, ha ganado seguidores entre los desarrolladores de [[videojuego]]s. El motor gráfico de [[Crytek]], [[CryEngine]], está programado en Lua, además de en C++.{{Citation needed}} LÖVE2D es otro motor de videojuegos que permite la creación de videojuegos multiplataforma utilizando Lua.<ref>{{Cita web|url=https://love2d.org/|título=LÖVE - Free 2D Game Engine|fechaacceso=2021-11-25|sitioweb=love2d.org}}</ref> Empresas como [[Valve Corporation|Valve]], [[Electronic Arts]] y [[Bethesda Softworks|Bethesda]] han cambiado porciones de [[Base de código|bases de código]] de C++ a Lua.{{Citation needed}} |
|||
Otros videojuegos y motores de juego que hacen uso de Lua son: |
|||
* ''[[World of Warcraft]]'', donde el usuario tiene la posibilidad de personalizar casi completamente la [[Interfaz gráfica de usuario|interfaz gráfica]]. |
|||
* También en un mod de tipo ''sandbox'' para ''[[Half-Life 2]]'' llamado ''[[Garry's Mod]]'', pudiendo modificarlo casi completamente. Gran parte de ''Garry's Mod'' está escrito en Lua. |
|||
* También en un mod para ''[[Half-Life 2]]'' llamado ''[[Fortress Forever]]'' que permite configurar altamente los mapas. |
|||
* El [[videojuego de estrategia en tiempo real]] a gran escala ''[[Supreme Commander]]'', el cual es modificable por el usuario en casi todos sus aspectos. |
|||
* El [[videojuego de rol]] ''[[Tibia_(videojuego)|Tibia]]'', modificable casi totalmente (poderes, mapas, etc) junto con [[Extensible Markup Language|XML]]. |
|||
* Parte de ''[[S.T.A.L.K.E.R.: Shadow of Chernobyl]]'', permitiendo al jugador modificar armas, armaduras y aspectos varios del juego. |
|||
* ''[[Grim Fandango]]'' y ''La Fuga de Monkey Island'' (cuarta entrega de la saga ''[[Monkey Island]]'') utilizan internamente scripts en Lua para definir la historia y los eventos que ocurren durante la partida. |
|||
* ''Worms 4: Mayhem'' utiliza Lua y XML para definir las misiones y desafíos. |
|||
* Mediante un programa casero (o homebrew), el LuaPlayer, permite ejecutar archivos .lua en la conocida consola portátil de Sony. |
|||
* ''[[Ragnarok Online]]'' usa Lua para programar la inteligencia artificial de los homúnculos. |
|||
* ''[[Regnum Online]]'' usa Lua para la mayoría de scripts del juego como interfaz, modo de juego, acciones, étc. |
|||
* ''[[TASpring]]'' un juego de estrategia en tiempo real, usa Lua para la mayoría de scripts del juego como interfaz, modo de juego, acciones, étc. |
|||
* [[Multi Theft Auto|Multi Theft Auto: San Andreas]] usa Lua para diseñar modos de juego, mapas y scripts. Este programa es una modificación multijugador que permite al usuario jugar Grand Theft Auto San Andreas en línea con otro usuario de computador a computador. |
|||
*[[Blitzkrieg (videojuego)|Blitzkrieg]]: Se usa el lenguaje Lua en los editores de mapas e incluso los puede escribir uno mismo. |
|||
*[[Counter-Strike|Counter-Strike 2D]]: Permite utilizar scripts Lua para crear, por ejemplo, modos de juego completamente nuevos mediante una interfaz de "hooks, tablas, variables y arrays" |
|||
*[[StepMania]]: Se usa el lenguaje Lua para desarrollar la implementación de animaciones del entorno gráfico, y asimismo la ejecución de comandos internos relacionados con la jugabilidad. |
|||
*[[Wolfenstein: Enemy Territory]]: Algunos modos de este juego vienen con el lenguaje Lua para correr scripts como mini-modos, scripts de administración, modificación de mapas, etc. |
|||
* ''[[Hedgewars]]'': Utiliza Lua en los scripts, misiones y mapas. |
|||
* ''[[Transformice]]'' utiliza Lua y XML para definir los desafíos y parte del diseño, como también se usa como una herramienta, en este caso, LUA para la construcción de minijuegos y XML para la construcción de mapas. |
|||
* [[RailWorks|Railworks: Train Simulator]]: Se utiliza en los scripts para modificar o definir el funcionamiento de los objetos. |
|||
* [[YGOPro: Dueling System]]: Desde efectos de cartas hasta la misma inteligencia artificial utiliza este lenguaje. |
|||
* ''[[The Binding of Isaac: Rebirth]]'': En enero de 2017 se publicó el DLC Afterbirth+, en el mismo se añadió el soporte para Mods programados con este lenguaje. |
|||
* [[Factorio]]: Utiliza este lenguaje (LUA) como base y para implementar mods al juego. |
|||
* [[Roblox]]: Utiliza una versión modificada de Lua conocida como RBX.lua. Actualmente su nombre es luau y es de código abierto. |
|||
*[[Detroit: Become Human|Detroit Become Human]] |
|||
*[[Sonic Robo Blast 2]] |
|||
*[[Minetest]]: Permite crear mods o videojuegos completos. |
|||
*[[FiveM]]: Permite crear modificaciones del juego [[Grand Theft Auto 5]] usando el lenguage nativo del juego. |
|||
*[[Teardown (videojuego)|Teardown]]: Utiliza LUA para la gran mayoría de cosas y también para implementar mods. |
|||
===Tibia.com o servidores=== |
|||
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.{{Citation needed}} |
|||
== Véase también == |
|||
* [[X10]] |
|||
== Referencias == |
|||
{{listaref}} |
|||
== Enlaces externos == |
== Enlaces externos == |
||
* [http://www.lua.org/ Lua. |
* [http://www.lua.org/manual/5.1/es/ Manual de Lua 5.1] (en español) |
||
* [http://lua |
* [http://www.lua.org Sitio web oficial de Lua] (en inglés) |
||
* [http://www.luaforge.net |
* [http://www.luaforge.net LuaForge] {{Wayback|url=http://www.luaforge.net/ |date=20050831150057 }} (en inglés) |
||
* [http://search.cpan.org/perldoc?Inline::Lua Inline::Lua] módulo [[Perl]] en [[CPAN]] para programar en Lua dentro de programas Perl (en inglés) |
|||
{{Control de autoridades}} |
|||
[[Categoría:Lenguajes de programación|Lua]] |
|||
[[Categoría:Lenguajes |
[[Categoría:Lenguajes de programación imperativa]] |
||
[[Categoría:Lenguajes de programación basados en prototipos]] |
|||
[[Categoría:Lenguajes interpretados]] |
|||
[[Categoría:Software libre]] |
[[Categoría:Software libre]] |
||
[[Categoría: |
[[Categoría:Software de 1993]] |
||
[[cs:Lua]] |
|||
[[da:Lua (programmeringssprog)]] |
|||
[[de:Lua]] |
|||
[[en:Lua (programming language)]] |
|||
[[eo:Lua]] |
|||
[[eu:Lua]] |
|||
[[fi:Lua]] |
|||
[[fr:Lua]] |
|||
[[gl:Lua (linguaxe de programación)]] |
|||
[[it:Lua]] |
|||
[[ja:Lua]] |
|||
[[ko:루아 (프로그래밍 언어)]] |
|||
[[ms:Lua]] |
|||
[[nl:Lua (programmeertaal)]] |
|||
[[pl:Lua]] |
|||
[[pt:Lua (linguagem de programação)]] |
|||
[[ru:Lua]] |
|||
[[sv:Lua]] |
|||
[[uk:Lua]] |
|||
[[vi:Lua]] |
|||
[[zh:Lua]] |
Revisión actual - 16:41 6 nov 2024
Lua | ||
---|---|---|
Roberto Ierusalimschy https://lua.org | ||
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 | 5.4.7[1] (25 de junio de 2024 (5 meses y 9 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 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 incorporada en aplicaciones.[2] Lua es un lenguaje multiplataforma y su intérprete está escrito en ANSI C. El nombre significa «luna» en portugués.
Historia
[editar]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.[3]
Características
[editar]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 en programación orientada a objetos.
Funcionamiento interno
[editar]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.
Códigos de ejemplo
[editar]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
Bucles
[editar]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 inicio, fin, paso = 10, 1, -1 -- El paso puede ser negativo, permitiendo al bucle for restar o sumar
for índice = inicio, fin, paso do
print(índice)
end
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.
Aplicaciones
[editar]Lua está diseñado principalmente para ser incorporado en aplicaciones.[2] 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.[4]
- En el gestor de ventanas Ion es posible utilizar Lua para personalizar la apariencia y extender su funcionalidad.
- El gestor de ventanas awesome en su versión 3 utiliza Lua para su fichero de configuración.
Lenguajes como Lua permiten a las compañías ahorrar costes,[cita requerida] al simplificar el trabajo de desarrollo de nuevo software. 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]
Portabilidad
[editar]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.
En videojuegos
[editar]Debido a que Lua es un lenguaje ligero, relativamente rápido y tiene una licencia permisiva, ha ganado seguidores entre los desarrolladores de videojuegos. El motor gráfico de Crytek, CryEngine, está programado en Lua, además de en C++.[cita requerida] LÖVE2D es otro motor de videojuegos que permite la creación de videojuegos multiplataforma utilizando Lua.[5] Empresas como Valve, Electronic Arts y Bethesda han cambiado porciones de bases de código de C++ a Lua.[cita requerida]
Otros videojuegos y motores de juego que hacen uso de Lua son:
- World of Warcraft, donde el usuario tiene la posibilidad de personalizar casi completamente la interfaz gráfica.
- También en un mod de tipo sandbox para Half-Life 2 llamado Garry's Mod, pudiendo modificarlo casi completamente. Gran parte de Garry's Mod está escrito en Lua.
- También en un mod para Half-Life 2 llamado Fortress Forever que permite configurar altamente los mapas.
- El videojuego de estrategia en tiempo real a gran escala Supreme Commander, el cual es modificable por el usuario en casi todos sus aspectos.
- El videojuego de rol Tibia, modificable casi totalmente (poderes, mapas, etc) junto con XML.
- Parte de S.T.A.L.K.E.R.: Shadow of Chernobyl, permitiendo al jugador modificar armas, armaduras y aspectos varios del juego.
- Grim Fandango y La Fuga de Monkey Island (cuarta entrega de la saga Monkey Island) utilizan internamente scripts en Lua para definir la historia y los eventos que ocurren durante la partida.
- Worms 4: Mayhem utiliza Lua y XML para definir las misiones y desafíos.
- Mediante un programa casero (o homebrew), el LuaPlayer, permite ejecutar archivos .lua en la conocida consola portátil de Sony.
- Ragnarok Online usa Lua para programar la inteligencia artificial de los homúnculos.
- Regnum Online usa Lua para la mayoría de scripts del juego como interfaz, modo de juego, acciones, étc.
- TASpring un juego de estrategia en tiempo real, usa Lua para la mayoría de scripts del juego como interfaz, modo de juego, acciones, étc.
- Multi Theft Auto: San Andreas usa Lua para diseñar modos de juego, mapas y scripts. Este programa es una modificación multijugador que permite al usuario jugar Grand Theft Auto San Andreas en línea con otro usuario de computador a computador.
- Blitzkrieg: Se usa el lenguaje Lua en los editores de mapas e incluso los puede escribir uno mismo.
- Counter-Strike 2D: Permite utilizar scripts Lua para crear, por ejemplo, modos de juego completamente nuevos mediante una interfaz de "hooks, tablas, variables y arrays"
- StepMania: Se usa el lenguaje Lua para desarrollar la implementación de animaciones del entorno gráfico, y asimismo la ejecución de comandos internos relacionados con la jugabilidad.
- Wolfenstein: Enemy Territory: Algunos modos de este juego vienen con el lenguaje Lua para correr scripts como mini-modos, scripts de administración, modificación de mapas, etc.
- Hedgewars: Utiliza Lua en los scripts, misiones y mapas.
- Transformice utiliza Lua y XML para definir los desafíos y parte del diseño, como también se usa como una herramienta, en este caso, LUA para la construcción de minijuegos y XML para la construcción de mapas.
- Railworks: Train Simulator: Se utiliza en los scripts para modificar o definir el funcionamiento de los objetos.
- YGOPro: Dueling System: Desde efectos de cartas hasta la misma inteligencia artificial utiliza este lenguaje.
- The Binding of Isaac: Rebirth: En enero de 2017 se publicó el DLC Afterbirth+, en el mismo se añadió el soporte para Mods programados con este lenguaje.
- Factorio: Utiliza este lenguaje (LUA) como base y para implementar mods al juego.
- Roblox: Utiliza una versión modificada de Lua conocida como RBX.lua. Actualmente su nombre es luau y es de código abierto.
- Detroit Become Human
- Sonic Robo Blast 2
- Minetest: Permite crear mods o videojuegos completos.
- FiveM: Permite crear modificaciones del juego Grand Theft Auto 5 usando el lenguage nativo del juego.
- Teardown: Utiliza LUA para la gran mayoría de cosas y también para implementar mods.
Tibia.com o servidores
[editar]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]
Véase también
[editar]Referencias
[editar]- ↑ http://www.lua.org/news.html
- ↑ a b «Lua - an extensible extension language». www.lua.org. Consultado el 25 de noviembre de 2021.
- ↑ «PYPL PopularitY of Programming Language index». pypl.github.io (en inglés). Consultado el 27 de abril de 2021.
- ↑ Usos de Lua
- ↑ «LÖVE - Free 2D Game Engine». love2d.org. Consultado el 25 de noviembre de 2021.
Enlaces externos
[editar]- Manual de Lua 5.1 (en español)
- Sitio web oficial de Lua (en inglés)
- LuaForge Archivado el 31 de agosto de 2005 en Wayback Machine. (en inglés)