# Lua

* Aquest article tracta sobre el llenguatge de programació. Si cerqueu la utilització de Lua a la Viquipèdia, vegeu «Viquipèdia:Lua».
Lua és un llenguatge de programació imperatiu i estructurat. És bastant lleuger i es va dissenyar com a llenguatge de script amb una semàntica extensible. El nom significa «lluna» en portuguès.

## Història

El van crear l'any 1993 Robert Ierusalimschy, Luiz Henrique de Figueiredo i Waldemar Celes, membres del Grup de Tecnologia en Computació Gràfica (Tecgraf) de la Pontifícia Universitat Catòlica de Rio de Janeiro. Les versions de Lua anteriors a la 5.0 es van distribuir sota una llicència similar a la BSD. De la versió 5.0 en endavant s'utilitza la llicència MIT, compatible amb la GPL.
S'utilitza en moltes aplicacions comercials, i no comercials, les quals s'incrementen cada any.

## Característiques
### Tipus de dades

És un llenguatge d'extensió, prou compacte per a usar-se en diferents plataformes. En Lua les variables no tenen tipus,
Tipus de dades natius a Lua :
| Tipus | Descripció | Exemples |
| nil | S'utilitza per a diferenciar el valor quan hi ha o no hi ha valor (nil) assignat. | - |
| Booleà (boolean) | Inclou els valors «cert» i «fals». Sovint utilitzat per a verificació de condicions. | True, False |
| Nombre (number) | Representa nombres reals, de coma flotant de doble precisió. | 4, 0.4, 4.57e-3, 0.3e12, 5e+20 |
| Cadena de caràcters (string) | Representa una cadena de caràcters. | "Una frase" |
| Funció (function) | Representa un mètode escrit en C o Lua. | print(a), foo(b) |
| userdata | Representa dades arbitràries en C. | Qualsevol codi en C |
| Fil (thread) | Representa fils d'execució independents i s'utilitza per a implementar co-rutines. | - |
| Taula (table) | Representa matrius, taules de símbols, jocs, registres, grafs, arbres, etc, i implementa matrius associatives. Pot contenir qualsevol valor excepte «nil». Es poden indexar tant amb nombres com amb cadenes de caràcters. | {"a", "b", "c"}, {[1]="a", [2]="b", [3]="c"} |
La semàntica de Lua pot ser estesa i modificada redefinint funcions de les estructures de dades utilitzant metataules.
Lua suporta funcions d'ordre superior i col·lector d'escombraries.
Els programes en Lua no són interpretats directament, sinó compilats a codi bytecode, que s'executa a la màquina virtual de Lua. El procés de compilació és normalment transparent a l'usuari i es realitza en temps d'execució, però pot fer-se amb anticipació per augmentar el rendiment i reduir l'ús de memòria en prescindir del compilador.
També és possible la Compilació JIT utilitzant LuaJIT

## Aplicacions
### Jocs

Com que Lua en ser compilat és petit, veloç i, a més, té una llicència permissiva, ha guanyat seguidors entre els desenvolupadors de videojocs. Altres usos de Lua:
* Al joc Roblox mes concretament en Roblox Studio, pots crear els teus propis videojocs amb el llenguatje Lua.
* World of Warcraft, on l'usuari té la possibilitat de personalitzar gairebé completament la interfície creant afegits que permeten informar de qualsevol cosa al seu corresponent carpeta Interface en la qual el WoW.exe té l'intèrpret de Lua i executa en la seva Interface l'Addon creat a lua.
* També en un mod tipus «sandbox» per a Half-Life 2 anomenat Garry's Mod, que es pot modificar gairebé completament. Gran part de Garry's Mod està escrit en Lua.
* Al Joc Minecraft, en el mod del joc anomenat ComputerCraft, on l'usuari té l'opció de crear un ordinador i utilitzar (i modificar) certs programes dins del joc.
* El joc de RPGTibia* Part de STALKER - Shadow of Chernobyl , permetent al jugador modificar armes, armadures i aspectes diversos del joc.
* Grim Fandango i La Fuga de Monkey Island (quarta entrega de la saga Monkey Island ) utilitzen internament scripts en Lua per definir la història i els esdeveniments que ocorren durant la partida.
* Mitjançant un programa casolà (o homebrew), el LuaPlayer, es poden executar fitxers Lua a la coneguda consola portàtil de Sony.
* Regnum Online i TASpring utilitzen Lua per la majoria d'scripts del joc, com a la interfície, al mode de joc, les accions, etc.

### Altres aplicacions

Lua també s'ha usat per processar dades d'entrada a sistemes complexos, configurar aplicacions, controlar maquinari i moltes altres coses.
* El gestor de finestres awesome en la seva versió 3 utilitza Lua per al seu fitxer de configuració.
També s'utilitza per programar aplicacions i jocs per la consola PSP de Sony, ja que el llenguatge en què escriu la PSP és un intèrpret del Lua, tot i que es necessita un programa per executar o un eboot d'una altra aplicació que utilitzi Lua (per exemple LuaDEV).

## Enllaços externs

* Lua.org (anglès)
* LuaForge Arxivat 2005-08-31 a Wayback Machine. (anglès)