Lua

Lua je odľahčený, imperatívny a procedurálny programovací jazyk navrhnutý ako skriptovací jazyk s rozšírenou sémantikou. Názov je odvodený z portugalského slova mesiac.
História.
Lua vytvorili v roku 1993 Roberto Ierusalimschy, Luiz Henrique de Figueiredo a Waldemar Celes, členovia Computer Graphics Technology Group (Skupina technológie počítačové grafiky) na Pápežskej univerzite v Rio de Janeiro v Brazílii. Verzie Lua pred verziou 5.0 boli uverejnené pod licenciou podobnou BSD licencii, od verzie 5.0 je Lua distribuovaný pod licenciou MIT.
Lua bol použitý v mnohých komerčných aplikáciach (napr. v dobrodružnej hre firmy LucasArts "Escape from Monkey Island" a software ovládajúci roboty) rovnako ako v tých nekomerčných (Angband a jeho varianty). Medzi jeho najbližších príbuzných patrí Icon pre jeho dizajn a Python pre jednoduchosť použitia aj pre ne-programátorov.
Vlastnosti.
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) a reť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 a garbage collector. Kombináciou mnohých týchto vlastností je možné v Lua písať aj objektovo orientované programy.
Ukážka kódu.
Ukážka klasického programu "Hello, World!":
print("Hello, World!")
Výpočet faktoriálu pomocou rekurzívneho volania funkcie:
function factorial(n)
 if n &lt;= 0 then
 return 1
 end
 return n * factorial(n - 1)
end
Vnútorné postupy.
Programy v Lua nie sú priamo interpretované, ale sú kompilované do tzv. "bytecode" (čítaj bajtkód), ktorý je následne spustený na Lua "virtual 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 &lt;factorial.lua:1,7&gt; (10 instructions, 40 bytes at 0x805ee50)
1 param, 3 slots, 0 upvalues, 1 local, 3 constants, 0 functions
 1 [2] LE 0 0 -1 ; compare value to 0
 2 [2] JMP 2 ; to line 5
 3 [3] LOADK 1 -2 ; 1
 4 [3] RETURN 1 2
 5 [6] GETGLOBAL 1 -3 ; factorial
 6 [6] SUB 2 0 -2 ; - 1
 7 [6] CALL 1 2 2
 8 [6] MUL 1 0 1
 9 [6] RETURN 1 2
 10 [7] RETURN 0 1
Aplikácie.
Lua sa uplatňuje predovšetkým v mnohých hrách, ako je World 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érii Baldur's Gate a videohre MDK2, kde je použitý ako skriptovací jazyk pre moduly. Taktiež sa objavuje v niektorých open source hrách, ako sú Battle for Wesnoth, Daimonin a hry v štýle : ToME a H-World. Skripty v jazyku Lua sú tiež využité v hrách Worms 3D, a Mafia II. Therescript, použitý k riadeniu vozidiel a animácií v There, je mierne upravená verzia Lua. Správca okien Ion používa Lua pre svoje prispôsobovanie a rozširovanie. Program Chat Mapper pre zapisovanie a ukladanie rozhovorov (napríklad medzi postavami v hrách) používa jazyk Lua k riadeniu rozhovoru. Program LuaTeX rozširuje primitívne príkazy TeXu 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.