Lua
Z Wikipedie, otevřené encyklopedie
Lua je odlehčený, reflexivní, imperativní a procedurální programovací jazyk navržený jako skriptovací jazyk s rozšířitelnou sémantikou. Název je odvozen z portugalského slova pro měsíc.
Obsah |
[editovat] Historie
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.
[editovat] Vlastnosti
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.
[editovat] Ukázka kódu
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
[editovat] Vnitřní postupy
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 (viruá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.0):
function <factorial.lua:1> (10 instructions, 40 bytes at 00326DA0) 1 param, 3 stacks, 0 upvalues, 1 local, 3 constants, 0 functions 1 [2] EQ 0 0 250 ; compare value to 0 2 [2] JMP 0 2 ; to line 5 3 [3] LOADK 1 1 ; 1 4 [3] RETURN 1 2 0 5 [6] GETGLOBAL 1 2 ; fact 6 [6] SUB 2 0 251 ; - 1 7 [6] CALL 1 2 2 8 [6] MUL 1 0 1 9 [6] RETURN 1 2 0 10 [7] RETURN 0 1 0
[editovat] Aplikace
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 Daimonin a hry ve stylu Rogue: ToME a H-World.
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í.
Seznam projektů, o nichž se ví, že používají Lua, je umístěn zde.
[editovat] Knihy
[editovat] Externí odkazy
- Lua.org
- Lua-users wiki
- LuaForge hosting a katalog projektů v Lua.
- LuaBind pro vázání funkcí a tříd z C++ ke kódu v Lua.
- CPB knihovna pro spojení kódu v C++ a Lua.
- použití Lua pro applety webové grafiky
- přístup ke kódu C/C++ z Lua
- Grokking the Virtual Machine Lua pro programátory v JavaScriptu
Programovací jazyky | |||
ABAP | Ada | AWK | Assembler | C | C++ | C# | COBOL | ColdFusion | Clean | D | Eiffel | Erlang | Flex | Fortran | JADE | Java | JavaScript | Lisp | Lua | Oberon | Object Pascal | Objective-C | Pascal | Perl | PHP | Python | REALbasic | REBOL | RPG | Ruby | SQL / PL/SQL | Tcl / Tcl/Tk | Visual Basic / VBScript | VB.NET | Visual FoxPro
|