Lua

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
Lua
Lua-logo-nolabel.svg
Paradigma: imperativní (procedurální), strukturovaný
Vznikl v: 1993
Autor: Roberto Ierusalimschy
Waldemar Celes
Luiz Henrique de Figueiredo
Poslední verze: 5.2.3 / 7.12.2013
Poslední nestabilní verze: 5.3.0 work2 / 21.3.2014
Hlavní implementace: Lua, LuaJIT, LLVM-Lua, Lua Alchemy
Dialekty: Metalua, Idle, GSL Shell
OS: Cross-platform
Licence: MIT Licence
Web: lua.org

Lua je odlehčený, reflexivní, imperativní a procedurální programovací jazyk navržený jako skriptovací jazyk s rozšiřitelnou sémantikou. Název je odvozen z portugalského slova pro měsíc.

Historie[editovat | editovat zdroj]

Lua vytvořili v roce 1993 Roberto Ierusalimschy, Luiz Henrique de Figueiredo a Waldemar Celes, členové Computer Graphics Technology Group (Skupina technologie počítačové grafiky) na Papežské univerzitě v Rio de Janeiro v Brazílii. Verze Lua předcházející verzi 5.0 byly uveřejněny pod licencí podobnou BSD licenci, od verze 5.0 je Lua distribuován pod licencí MIT.

Lua byl použit v mnoha komerčních aplikacích (např. v adventuře firmy LucasArts Escape from Monkey Island a software ovládajícím roboty) stejně jako těch nekomerčních (Angband a jeho varianty). Mezi jeho nejbližší příbuzné lze řadit Icon pro jeho design a Python pro snadnost použití i pro neprogramátory.

Vlastnosti[editovat | editovat zdroj]

Lua je určen jako rozšiřující nebo skriptovací jazyk a je dostatečně malý, aby se vešel na nejrůznější hostitelské platformy. Podporuje jen malé množství atomárních datových struktur jako jsou boolovské hodnoty, čísla (implicitně s dvojitou přesností plovoucí čárky) a řetězce. Běžné datové struktury jako jsou pole, množiny, hashovací tabulky, seznamy a záznamy mohou být reprezentovány použitím jediné nativní datové struktury - tabulky, která je v podstatě heterogenním asociativním polem. Jmenné prostory a objekty mohou být vytvořeny taktéž za použití tabulek. Zahrnutím minimálního počtu datových typů se Lua pokouší dosáhnout rovnováhy mezi sílou a velikostí.

Sémantika Lua může být rozšiřována a měněna předefinováním některých zabudovaných funkcí v metatabulkách. Navíc podporuje Lua pokročilé vlastnosti, jako jsou funkce vyššího řádu a garbage collector. Kombinací mnoha těchto vlastností je možné v Lua psát i objektově orientované programy.

Ukázka kódu[editovat | editovat zdroj]

Klasický program Hello world lze napsat následovně:

print "Hello, world!"

Výpočet faktoriálu ukazuje rekurzivní volání funkce:

function factorial(n)
    if n <= 0 then
        return 1
    end
 
    return n * factorial(n - 1)
end

Vnitřní postupy[editovat | editovat zdroj]

Programy v Lua nejsou přímo interpretovány, ale jsou kompilovány do tzv. bytecode (čti bajtkód), který je následně spuštěn na Lua virtual machine (virtuálním stroji). Proces kompilace je obvykle pro uživatele transparentní a je prováděn za běhu programu. Lze jej však vyvolat offline za účelem zvýšení výkonu nebo omezení velikosti obrazu v paměti hostujícího prostředí vynecháním kompilátoru.

Následující příklad ukazuje výpis bytecode výše popsané funkce pro výpočet faktoriálu (v Lua 5.1):

function <factorial.lua:1,7> (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

Aplikace[editovat | editovat zdroj]

Lua se uplatňuje především v mnoha hrách, jako je World of Warcraft, masivní onlinová multiplayerová hra na hrdiny, ve které si mohou uživatelé přizpůsobit uživatelské rozhraní, animace postav a vzhled světa právě v jazyku Lua, a sérii Baldur's Gate a videohře MDK2, kde je použit jako skriptovací jazyk pro moduly. Také se objevuje v některých open source hrách, jakými jsou Battle for Wesnoth, Minecraft, Daimonin a hry ve stylu Rogue: ToME a H-World. Skripty v jazyce Lua jsou také využity u her Worms 3D, Worms 4: Mayhem a Mafia II. Therescript, použitý k řízení vozidel a animací v There, je mírně upravená verze Lua. Správce oken Ion používá Lua pro své přizpůsobování a rozšiřování. Program Chat Mapper pro zapisování a ukládání rozhovorů (například mezi postavami ve hrách) používá jazyk Lua k řízení rozhovoru.

Seznam projektů, o nichž se ví, že používají Lua, je umístěn zde.

Knihy[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]