Lua: vestavitelný minimalista

10. 9. 2007
Doba čtení: 3 minuty

Sdílet

Programovací jazyk Lua možná není jazykem pro všechny a pro všechno, pokud ale hledáte minimalistický a rozšiřitelný jazyk, který by se dal velmi jednoduše a nenásilně používat jako vestavěný skriptovací jazyk vaší aplikace, určitě Luu nepřehlédněte – malá, ale šikovná, taková je Lua.

Jak Lua vznikla aneb pár slov k historii jazyka

Lua je docela mladý jazyk – světlo světa spatřila teprve v roce 1993. Kdože v tom má prsty? Roberto Ierusalimschy, Luiz Henrique de Figueiredo a Waldemar Celes z Rio de Janeira. Mezi zajímavosti patří i sám název jazyka – ten totiž pochází z portugalského slova pro měsíc.

Co to je Lua?

Lua patří mezi moderní dynamicky typované skriptovací jazyky. Jedná se o minimalistický skriptovací jazyk určený především pro rozšiřování aplikací jako jejich interní skriptovací jazyk, stejně dobře ale může sloužit sama o sobě pro psaní drobnějších samostatných aplikací. Je implementována jako knihovna napsaná v čistém ANSI C.

Pro čtenáře Roota jistě není bez zajímavostí, že Lua je od verze 2.1 uvolněna jako free software, přičemž od verze 5.0 využívá populární MIT licenci, verze předchozí byly k mání pod licencí podobné licenci BSD.

Vlastnosti jazyku Lua

V porovnání s ostatními programovacími jazyky Lua jednoznačně vyniká svou systémovou nenáročností – rychlostí a paměťovou šetrností. V porovnání s ostatními skriptovacími jazyky se jedná skutečně o značný rozdíl a má smysl uvažovat o jejím použitím i na hardwarově kritických částech aplikace.

Vzhledem k minimalismu jazyka podporuje Lua pouze několik málo základních datových struktur – nil, boolean, number a string, function, thread a userdata. Kolekce zde pak zastupuje jediná struktura – tabulka čili table. Tabulkou lze nahradit jak klasická, tak asociativní pole a nejen je – tabulky mají poměrně úctihodné možnosti a mimo jiné lze jimi nahradit i objekty. Neobávejte se, že OOP bude v takovémto podání ořezané – standardních možností jako například dědičnosti se dočkáte, i když konečné řešení je volné a závisí čistě na programátorovi.

Co se týče podporovaných programátorských technik, Lua se profiluje jako klasický moderní skriptovací jazyk – podporuje jak klasické techniky procedurálního programování, tak také obsahuje prvky z funkcionálního programování. Podpora OOP je samozřejmostí, i když v dost netradičním podání – je to spíše takové „udělej si sám“.

Kde je Lua používána?

Lua je ideální jazyk pro tvorbu her. Příkladem budiž například Baldur's Gate, Fish Fillets, World of Warcraft a mnohé další. Zde však možnosti využití Lua zdaleka nekončí, důkazem čehož může docela dobře být jak tiled window manager ION, tak například Elinks nebo APT-RPM. Pro další příklady použití se můžete podívat na domovskou stránku jazyka Lua.

Pár ukázek aneb Lua v praxi

Abyste viděli, jak se s Luou pracuje, připravil jsem si pro vás jednoduchou ukázku. Protože Hello World nic zajímavého nepoví a výpočet faktoriálu najdete na každé druhé stránce, zkusil jsem připravit něco vlastního:

#!/usr/bin/env lua
-- just a head
print [[
This program is free software.
You can use it, but it is provided as usual with no guarantees.
]]

-- functions
function salut(name, surname)
   print("Hello " .. name .. " " .. surname .. " aka " .. os.getenv("USER") .. "!")
   print("Today is " .. os.date("%d.%m.%Y"))
end

salut("Jakub", "Stastny")

Po spuštění dostanu toto:

jakubstastny@MacBoocek botanicus $ chmod +x test.lua
jakubstastny@MacBoocek botanicus $ ./test.lua
Hello Jakub Stastny aka botanicus!
Today is 09.09.2007

Nic světaborného, ale pro ilustraci to doufám stačí. Vřele doporučuji předhodit zdrojový kód nějakému editoru se zvýrazňováním syntaxe, protože že komentář začíná dvěma pomlčkami za sebou, nemusí být hned každému jasné. Váš Vim či Emacs to zvládne bez problémů.

Luu lze testovat jak klasicky zapsáním kódu do skriptu, tak také interaktivně. Do interaktivního režimu se dostanete jednoduše tak, že zavoláte interpret lua bez parametrů.

bitcoin_skoleni

Stojí za zmínku, že zdrojový kód lze pro rychlejší běh také zkompilovat do bytekódu, k čemuž poslouží utilitka luac, kompiler. Když jej poštvete na skript v Lue, vyplivne vám soubor luac.out, což je právě zmíněný bytekód. Je platformově nezávislý, alespoň v rámci stejněbitových systémů – 32bitové navzájem či 64bitové navzájem, 32 a 64bitové mezi sebou však nikoliv. Spustíte jej pomocí lua luac.out.

Závěr

Lua je pěkný a dle mého názoru neprávem opomíjený programovací jazyk. Protože patrně nejpalčivější problém malé rozšířenosti jazyka Lua v našich podmínkách je totální nedostatek informací na česky mluvícím internetu, rozhodl jsem se pomoci alespoň tímto krátkým seznamovacím článkem. Osobně mě Lua zaujala a čas od času ji alespoň na drobné skriptíky používám.

Odkazy

Autor článku

Jakub Šťastný byl v letech 2007 až 2008 redaktorem serveru Root.cz. Mezi jeho zájmy patří Linux, programování a typografický systém TeX.