Ve druhém dílu našeho seriálu o méně známých programovacích jazycích se po stručném seznámení s červeným rubínem (Ruby) podíváme na měsíc. Respektive na skriptovací jazyk Lua. Lua v portugalštině znamená měsíc a vyslovuje se [lu-a].
Otci tohoto rozsahem malého, avšak svým použitím silného konfiguračního a aplikace rozšiřujícího jazyka, jsou Roberto Lerusalimschy, Luiz Henrique de Figueiredo a Waldemar Celes. Členové Computer Technology Group na Pontifical Catholic University v Rio de Janeiro. První verze jazyka spatřila světlo světa v roce 1993 a byla vytvořena s ohledem na stále vzrůstající potřeby brazilské olejářské společnosti PETROBRAS. Do verze 2.1. bylo bezplatné použití jazyka Lua možné pouze pro akademické účely. Od verze 2.1. je jazyk Lua šířen jako free software. Do verze 4.0 s vlastní licencí. Od verze 5.0. a dále s licencí v souladu s GPL.
Historickými předchůdci jazyka Lua jsou jednoduchý deklarativní jazyk DEL (Data Entry Language) a SOL (Simple Object Language). Oba vyvíjeny pro interní potřebu společnosti PETROBRAS.
Lua se skládá z interpretru (program Lua) a kompilátoru (program Luac). Kompilátor a interpretr ("virtual machine") jsou napsány v čistém ANSI C, a tak mohou být provozovány na každé platformě s ANSI C kompilátorem. To zahrnuje téměř všechny známé platformy.
Interpretr Lua nahrává a spouští zdrojové skripty, či předkompilované binární soubory (bytecode). Program Lua může být použit jako dávkový interpretr, nebo být spuštěn v interaktivním režimu.
Kompilátor Luac překládá zdrojový skript do již zmiňovaných binárních souborů. Výhodou použití kompilátoru je rychlejší nahrání vytvořeného skriptu. Dále pak ochrana zdrojového kódu před šťouravými uživateli a provádění kontroly syntaxe v off-line režimu, což oceníme především u velmi rozsáhlých projektů, o něž z podstaty jazyka Lua není nouze. Binární soubory vytvořené kompilátorem Luac jsou portovatelné na všechny architektury se shodnou délkou slova. To znamená, že binární soubor vytvořený na 32bitové platformě, např. Intel, může být bez změny použít na jiné 32bitové platformě, např. SPARC.
Nyní již přejděme k jazyku samotnému. Lua kombinuje jednoduchou procedurální syntaxi podobnou Pascalu se silnými datovými konstrukcemi, které jsou založeny na asociativních polích a rozšířené sémantice. Lua používá dynamické datové typy, interpretaci s bytecode a automatický management paměti s garbage kolekcemi. Zápis kódu je case-sensitive.
Všechny zmiňované odkazy v článku jsou bohužel pouze na stránky v anglickém jazyce. Jak jsem při psaní článku a hledání na Internetu zjistil, česká dokumentace a ani český popis jazyka či učebnice zřejmě neexistuje. Myslím, že je to škoda.
Základních typů Lua rozeznává osm: nil, boolean, number, string, table, function, userdata a thread. Za zmínku stojí především table a thread. Tabulky (table) jsou jediným mechanismem pro strukturovaná data. Využití mají i jako pole (array). Vlákno (thread) představuje coroutines (možnost spouštět více úloh najednou). Coroutines v Lua nejsou vlákny operačního systému nebo procesoru, ale jsou zcela ve vlastní režii jazyka.
Pro přibližnou představu kódu si nyní uvedeme dva jednoduché příklady. První klasické "Hello, World!" a pak jednoduchý program pro výpočet faktoriálu. Jak z níže uvedených příkladů uvidíme, Lua je velmi srozumitelný jazyk.
Ukázka programu Hello, World!: print "Hello, World!" Ukázka programu Faktoriál: function faktorial (n) if n == 0 then return 1 else return n * fact(n-1) end end print("Vypocet faktorialu") print("Zadej cislo:") a = io.read("*number") print("Faktorial cisla ",a, "je ",faktorial(a),".")
Protože se velmi často Lua přirovnává k Pythonu, řekněme si, v čem Lua nad Pythonem vyniká. O dost menší engine - cca 150 kB a lepší využití paměti - to jsou hlavní argumenty pro Lua. Dále vyšší rychlost zpracování úloh, jednodušší a přehlednější API pro komunikaci Lua skriptů a jazykem C, silná syntaxe a podpora několika vláken v jednom procesu.
S praktickým využitím jazyka se dnes v největší míře setkáme v herním průmyslu. Použití našel v legendárních hrách, jakými jsou Baldur's Gate, MDK, Escape from Monkey Island nebo Fish Fillets. Mimo herní průmysl pak využití jazyka Lua můžeme nalézt např. v APT-RPM, Clan Lib, Elinks. Mnoho dalších příkladů užití naleznete na domovských stránkách jazyka.