Lua je odľahčený, imperatívny a procedurálnyprogramovací jazyk navrhnutý akoskriptovací jazyk s rozšírenousémantikou. Názov je odvodený zportugalského slova mesiac.
Lua vytvorili v roku1993Roberto Ierusalimschy,Luiz Henrique de Figueiredo aWaldemar Celes, členovia Computer Graphics Technology Group (Skupina technológie počítačové grafiky) na Pápežskej univerzite vRio de Janeiro vBrazílii. Verzie Lua pred verziou 5.0 boli uverejnené pod licenciou podobnouBSD licencii, od verzie 5.0 je Lua distribuovaný podlicenciou MIT.
Lua bol použitý v mnohých komerčných aplikáciach (napr. v dobrodružnej hre firmyLucasArtsEscape from Monkey Island a software ovládajúciroboty) rovnako ako v tých nekomerčných (Angband a jeho varianty). Medzi jeho najbližších príbuzných patríIcon pre jeho dizajn aPython pre jednoduchosť použitia aj pre ne-programátorov.
Jazyk Lua je určený ako rozširujúci alebo skriptovací jazyk a je dostatočne malý, aby se vošiel na najrôznejšie hostiteľské platformy. Podporuje iba malé množstvo atomárnych dátových štruktúr ako sú boolovské hodnoty, čísla (implicitne s dvojitou presnosťou plávajúcej čiarky) areťazce. Bežné dátové štruktúry ako súpole, množiny, hashovacie tabuľky, zoznamy a záznamy môžu byť reprezentované použitím jediné natívnej dátovej štruktúry - tabuľky, ktorá je v podstate heterogénnym asociatívnym poľom. Menné priestory a objekty môžu byť vytvorené taktiež za použitia tabuliek. Zahrnutím minimálneho počtu dátových typov sa Lua pokúša dosiahnuť rovnováhu medzi silou a veľkosťou.
Sémantika Lua môže byť rozširovaná a menená predefinovaním niektorých zabudovaných funkcií v metatabuľkách. Naviac Lua podporuje pokročilé vlastnosti, ako sú funkcie vyššieho rádu agarbage collector. Kombináciou mnohých týchto vlastností je možné v Lua písať ajobjektovo orientovanéprogramy.
Ukážka klasického programu "Hello, World!":
Výpočetfaktoriálu pomocourekurzívneho volania funkcie:
functionfactorial(n)ifn<=0thenreturn1endreturnn*factorial(n-1)end
Programy v Lua nie sú priamo interpretované, ale sú kompilované do tzv.bytecode (čítaj bajtkód), ktorý je následne spustený na Luavirtual machine (virtuálnom stroji). Proces kompilácie je často pre používateľov transparentný a robí sa za behu programu. Dá sa však vyvolať offline za účelom zvýšenia výkonu alebo omedzenia veľkosti obrazu v pamäti hosťujúceho prostredia vynechaním kompilátoru.
Nasledujúci príklad ukazuje výpis bytecode vyššie popísanej funkcie pre výpočet faktoriálu (v Lua 5.1):
function<factorial.lua:1,7>(10instructions,40bytesat0x805ee50)1param,3slots,0upvalues,1local,3constants,0functions1[2]LE00-1;comparevalueto02[2]JMP2;toline53[3]LOADK1-2;14[3]RETURN125[6]GETGLOBAL1-3;factorial6[6]SUB20-2;-17[6]CALL1228[6]MUL1019[6]RETURN1210[7]RETURN01
Lua sa uplatňuje predovšetkým v mnohých hrách, ako jeWorld of Warcraft,masívna onlinová multiplayerová hra na hrdinov, v ktorej si môžu používatelia prispôsobiť používateľské rozhranie, animácie postáv a vzhľad sveta práve v jazyku Lua, a sériiBaldur's Gate a videohreMDK2, kde je použitý ako skriptovací jazyk pre moduly. Taktiež sa objavuje v niektorýchopen source hrách, ako súBattle for Wesnoth,Daimonin a hry v štýleRogue:ToME aH-World. Skripty v jazyku Lua sú tiež využité v hráchWorms 3D,Worms 4: Mayhem aMafia II.Therescript, použitý k riadeniu vozidiel a animácií vThere, je mierne upravená verzia Lua.Správca okien Ion používa Lua pre svoje prispôsobovanie a rozširovanie. ProgramChat Mapper pre zapisovanie a ukladanie rozhovorov (napríklad medzi postavami v hrách) používa jazyk Lua k riadeniu rozhovoru. ProgramLuaTeX rozširuje primitívne príkazyTeXu o možnosť zadávania kódu v jazyku Lua.
Zoznam projektov, o ktorých sa vie, že používajú Lua, je umiestnenýna tejto stránke.
Tento článok je čiastočný alebo úplný preklad článkuLua na českej Wikipédii.