(Polo)skriptovací jazyk Lua

16. 6. 2006 20:26 (aktualizováno) František Fuka

Nesnáším programování v jazyce C. Kdysi jsem v C cosi napsal (jednoduchou hudební knihovnu pro AdLib), ale předtím a potom jsem poznal několik desítek jiných programovacích jazyků a málokterý se mi hnusil tak, jako C. Kromě toho se mi hnusí také Java, takže bych se asi „v reálném programátorském světě“ programováním moc neuživil.

Naštěstí nemusím s nikým spolupracovat „v reálném programátorském světě“ a když něco programuji, mohu si to naprogramovat v čem já sám uznám za vhodné.

Problém je v tom, že při většině programování potřebujete knihovny. Některé programovací jazyky (např. Perl, Python, Ruby) jsou natolik rozšířené, že k nim existují „bindingy“ (jak se to řekne česky?) pro mnoho knihoven. Tudíž jsem si mohl například naprogramovat v Ruby aplikaci, používající plné GUI (GTK2), aniž bych musel napsat jediný řádek v C. Ale tyto „nenativní verze“ knihoven (pokud existují) jsou často špatně dokumentované a mají zpoždění za svými nativními verzemi.

A k čemu tím vším směřuji? K jazyku Lua, který byl vymyšlen pro lidi, kteří potřebují používat C knihovny a nemají rádi C.

U většiny programovacích jazyků to funguje tak, že se knihovny nějakým mechanismem linkují k existujícímu jádru jazyka. Lua to má víceméně obráceně: Je tak malá a jednoduchá, že se celá snadno přilinkuje k existujícím C nebo C++ knihovnám. Musíte pouze napsat a zkompilovat nějaké své rutiny, zajišťující komunikaci mezi Luou a C (což je slušně zdokumentováno, protože je to základní pointa jazyka, a zvládnu to tudíž i já).

Lua je velmi krátká (celý její zdrojový kód je i s příklady a dokumentací ve 200KB archivu), protože toho vlastně moc neumí. Kromě standardních typů jako „číslo“, „řetězec“, „nil“ má vpodstatě jen jednu speciální datovou strukturu: Tabulku (ekvivalent toho, čemu se třeba v Ruby říká Hash), tedy pole indexované čímkoliv.

Vtip je v tom, že Lua umožňuje pomocí „metatabulek“ expandovat sama sebe velmi vychytaným způsobem, takže si pomocí pár řádků můžete například nadefinovat objekty a dědičnost (které Lua „sama od sebe“ nemá). Nebo vlastní datové struktury. A všechny ty C knihovny pak můžete z Luy volat tak, jak to vám vyhovuje. To vše díky tabulkám a díky faktu, že kus kódu nebo funkce je v Lue objekt jako každý jiný a dá se s ním dělat to, co s jakýmkoliv jiným objektem (v tomto směru se Lua dost inspiroval funkcionálními jazyky).

Lua je interpretovaný jazyk s automatickou kompilací do bytekódu a ve výsledku je velmi, velmi rychlý (podstatně rychlejší než Ruby nebo Python). Výsledkem tedy je aplikace, která je rychlá (to, co musí být rychlé, je v ní napsáno v C) a při jejímž odlaďování si nemusíte dělat starosti s garbage collection, nulovými pointery, nepovoleným zápisem do paměti atd…

A je také triviální použít Luu k tomu, aby bylo možno jednoduše skriptovat a odlaďovat nějakou vaši už existující aplikaci. Například ve videohrách je běžné, že multimediální rutiny jsou naprogramovány v C, zatímco logiku hry řídí Lua.

Koneckonců, podívejte se, kde všude se Lua používá.

Sdílet

Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).