Lua on kevyt ja kooltaan pieni skriptikieli. Se on tarkoitettu lähinnä ohjelmien helppoon laajentamiseen, mutta sillä voi myös tehdä laajempiakin kokonaisuuksia. Kielen nimi tulee portugalin sanasta lua, joka tarkoittaa kuuta. Luan logona onkin kuu.
Lua on pääasiassa proseduraalinen kieli, mutta Lua tukee funktionaalisesta ohjelmoinnista ja olio-ohjelmoinnista tunnettuja ominaisuuksia. Luassa on muun muassa ensimmäisen kertaluokan funktiot täydellä leksikaalisella näkyvyydellä. Muita kielen ominaisuuksia ovat assosiatiiviset taulukot, vuoroittaisrutiinit sekä metataulut. Kielessä on mahdollista käyttää moniperintää.
Lua on julkaistu MIT-lisenssillä, joka sallii hyvin vapaan käytön jopa kaupallisiin tarkoituksiin. Luaa käytetäänkin paljon erilaisissa sovellusohjelmissa (esim. VLC, Lightroom) ja tietokonepelien sisäisenä skriptikielenä (esim. World of Warcraft). Neovim-tekstieditori mahdollistaa lisäosien ja konfiguraation kirjoittamisen Vimscriptin lisäksi Lualla.
Lua on suunniteltu helposti yhdistettäväksi muihin ohjelmointikieliin. Alkuperäisessä toteutuksessa on rajapinta, jota voi käyttää C- ja C++-ohjelmointikielillä. Tämän lisäksi rajapintoja löytyy muun muassa Pascalille, .NET:lle sekä Adalle.
Historia
Kielen edeltäjiä ovat Petrobrasin kehittämät DEL (Data Entry Language) ja SOL (Simple Object Language).
Toteutus
Lua käännetään omalle virtuaalikoneelle. Ohjelmat voi kääntää virtuaalikoneen binääreiksi, mutta yleisempi käyttötapa on, että Lua-kääntäjä kääntää ohjelman muistiin ja suorittaa sen suoraan virtuaalikoneessa. Luan virtuaalikone on rekisteripohjainen erona pinopohjaisista virtuaalikoneista. Rekisteripohjainen virtuaalikone julkaistiin Lua-versiossa 5.0 vuonna 2003.
Kielessä ei ole C-kielen kaltaista switch-lausetta, mutta vastaava toiminnallisuus voidaan toteuttaa käyttämällä hakutaulua (lookup-taulua) apuna.
Lua tukee säännöllisiä lausekkeita, mutta ei POSIX-standardin mukaisessa muodossa vaan merkittävästi yksinkertaisempana.
Esimerkkejä
Esimerkkiohjelma tulostaa rivin "Hei maailma!":
print("Hei maailma!")
Seuraava ohjelma laskee annetun luvun kertoman:
-- Kertoma-funktio function fact (n) if n == 0 then return 1 else return n * fact(n-1) end end print("Anna luku:") a = io.read("*number") -- Lue luku print(fact(a))
Kommentti alkaa kahdella viivalla --, useammalle riville ulottuva kommentti merkitään hakasulkeisiin.
--[[Kommenttityypit Luassa]]-- -- Tämä on yksirivinen kommentti print("Hei maailma!") --[[ Tämä on kommentti, joka kattaa useamman rivin ]] print("Hei ".."maailma!") -- yhdistää "Hei " ja "maailma!"
Aiheesta muualla
- Luan kotisivut
- pas2lua (Arkistoitu – Internet Archive) Lähdekoodit joilla Luan voi ottaa käyttöön Delphissä, FreePascalissa ja Lazaruksessa.
