„Lua (programozási nyelv)” változatai közötti eltérés

frissítés a jelenlegi verzióra, formázás
(Visszavontam 81.182.12.221 (vita) szerkesztését (oldid: 17550528))
(frissítés a jelenlegi verzióra, formázás)
| megvalósítások ='''Lua''', [http://luajit.org/ LuaJIT], [http://code.google.com/p/llvm-lua/ LLVM-Lua], [http://code.google.com/p/lua-alchemy/ Lua Alchemy]
| kiindulási nyelv = [[C++]], [[CLU (programozási nyelv)|CLU]], [[Modula-2|Modula]], [[Scheme (programozási nyelv)|Scheme]], [[SNOBOL]]
| befolyásolt nyelvek=[[Io (programozási nyelv)|Io]]<!-- 2002 -->, [[GameMonkey Script|GameMonkey]]<!-- 2003 -->, [[Squirrel (programozási nyelv)|Squirrel]]<!-- 2003 -->, [[Falcon (programozási nyelv)|Falcon]]<!-- 2003 -->, [[MiniD]]<!-- 2006 -->
| operációs rendszer = [[platformfüggetlen|többplatformos]]
}}
 
== Szintaxisa ==
 
===Nyelvi elemek===
=== Nyelvi elemek ===
 
Az azonosítók betűkből, számokból, aláhúzásjelekből építkezhetnek, ahol az első jel nem lehet szám. A betűkészlet a helyi beállításoktól függ. Egy jel betű volta ellenőrizhető az <code>isalpha</code>, szám volta az <code>isalnum</code> függvénnyel.
 
A Lua forráskódban a kis- és nagybetűk nem minősülnek azonosnak.
 
=== Típusok ===
 
A Lua beépített típusai:
*nil
*boolean
*number
*string
*table
*function
*userdata
*thread
 
* nil
A nil típusnak egyetlen eleme van, a <code>nil</code>. A globális változók alapértelmezett értéke; a változók törölhetők is úgy, hogy értéküket <code>nil</code>re állítjuk. Fontos hibaforrás, hogy a [[Ruby (programozási nyelv)|Rubyhoz]] hasonlóan csak a <code>nil</code> és a <code>false</code> hamis, az üres string vagy a nulla nem. A logikai műveletek: and, or, not.
* boolean
* number
* string
* table
* function
* userdata
* thread
 
Egy nil típusú változónak egyetlen lehetséges értéke van, a <code>nil</code>. Ez a globális változók alapértelmezett értéke; a változók törölhetők is úgy, hogy értéküket <code>nil</code>-re állítjuk.
A számok alapértelmezetten dupla pontosságú lebegőpontos számok. Nincs külön egész típus. A számokon végezhető műveletek operátorai: +, -, *, /, és a hatványozás jele, a ^. Az összehasonlításra a ==, ~=, <, >, <=, >= operátorok szolgálnak.
 
Egy logikai változónak két lehetséges értéke van: <code>true</code> és <code>false</code>. Fontos hibaforrás, hogy a [[Ruby (programozási nyelv)|Rubyhoz]] hasonlóan csak a <code>nil</code> és a <code>false</code> hamis, az üres string vagy a nulla nem. A logikai műveletek: <code>and</code>, <code>or</code>, <code>not</code>.
 
A számok alapértelmezetten dupla pontosságú lebegőpontos számok. Nincs külön egész típus. A számokon végezhető műveletek operátorai: <code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>, és a hatványozás jele, a <code>^</code>. Az összehasonlításra a <code>==</code>, <code>~=</code> (nem egyenlő), <code><</code>, <code>></code>, <code><=</code>, <code>>=</code> operátorok szolgálnak.
 
A függvények tárolhatók változókban, és átadhatók paraméterként. A C-ben írt programkönyvtárak felhasználásának elősegítésére a C függvények is kezelhetők így. Függvényhíváskor akkor is ki kell tenni a zárójelet, ha nem adunk meg paramétereket. A [[Java (programozási nyelv)|Java]]ban megszokott <code>this</code> itt <code>self</code>. Metódusok hívásakor az objektumot is fel kellene sorolni a paraméterek között:
A thread a többszálú programozás programszálainak típusa.
 
A rövid, legfeljebb 255 karakteres stringek megadhatók egyszeres vagy kétszeres idézőjelek között. Hosszabb stringek megadhatók különböző szintű határolók között. Az ''n''-edik szintű határolók: egy nyitó zárójel, ''n'' egyenlőségjel, egy másik nyitó zárójel, majd a string végén egy hasonló jelsorozat, csak csukó zárójelekkel. A <code>[[hosszú stringek ígyszöveg]]</code>> egymásbaformában ágyazhatókis. A hosszú stringek nem értelmeződnek, a bennükstringekben levő utasítások, escape sorozatok nem hajtódnak végre. Minden fajta string tárolhat tetszőleges Unicode karaktereket, amik a C fordító <code>char</code> típusára képeződnek le. A fájlokat azonban mindig binárisan érdemes kezelni, mivel a nyelv aaz <code>stdio</code> C könyvtárat használja, ami azonban nem garantálja a különféle kódolások megfelelő kezelését. A számok és a stringek automatikusan konvertálódnak.
 
Az [[Feloldójel (informatika)|escape sorozatok]] ugyanazok, mint a C-ben.
 
A userdata C-ben típusúmegvalósított adatokatadattípusokat tárol. Módosítani, rajta műveleteket végrehajtani csak C függvényekkel lehet, a Lua csak értékadást és egyenlőségvizsgálatot biztosít hozzá.
====Táblák====
A table a Lua egyetlen összetett típusa, ami a tömbök és az asszociatív tömbök közös általánosítása. Két részből állnak, a tömb és az asszociatív tömb részből. A ciklusok végigiterálhatnak csak a tömb részen, vagy az egész táblán is. A táblák indexelése a legtöbb nyelvtől eltérően 1-től kezdődik. Explicit lehet értéket adni a nulladik elemnek, de a tömbrészen végigiteráló ciklusok ezt az elemet kihagyják.
 
==== Táblák ====
Tömb típusú táblák létrehozhatók így:
 
A table a Lua egyetlen összetett típusa, [[asszociatív tömb]]. A kulcsok lehetnek számok (ajánlottan csak egészek), stringek, másik táblák vagy függvények. A táblák automatikus indexelése a modernebb nyelvekhez hasonlóan 1-től kezdődik, mivel a 0 index hiánya nem igényel kihasználatlan helyfoglalást.
 
Bejárásuk kétféle módon lehetséges: csak az egész típusú kulcsokat (és a hozzájuk tartozó értékeket) nézzük végig 1-től az első nem létező kulcsig (<code>ipairs</code>) vagy az összes kulcs-érték párt (<code>pairs</code>).
 
Táblák létrehozhatók így:
 
<source lang="lua">
x = {3.14, [["ez egy string]], {}"}
</source>
 
Ilyenkor az egyes értékeket sorban az 1, 2, 3, ... kulcsokhoz rendeli.
Asszociatív tömb esetén az egyes kulcsokhoz egyenként kell értéket rendelni.
 
String kulcsokat így lehet használni:
 
<source lang="lua">
x =
{
nev = "Kovács János",
kor = 46,
fizetes = {ertek = 10000, penznem = "Ft"}
}
</source>
 
A táblák referencia szerint adódnak át:
 
<syntaxhighlightsource lang="lua">
a_table = {x = 10} -- Új tábla, egy kulcs-érték pár: "x" kulcs a 10-es számhoz.
print(a_table["x"]) -- A string kulcshoz tartozó érték kiíratása; itt 10.
print(b_table["x"]) -- Az új érték kiíratása: 20.
print(a_table["x"]) -- ez is 20-at ír, mert az a_table és a b_table ugyanarra a táblára hivatkozik.
</source>
</syntaxhighlight>
 
Kulcsok, értékek beszúrása, eltávolítása:
 
<syntaxhighlightsource lang="lua">
local myTable = {"a", "b"}
table.insert(myTable, "c") -- print(unpack(myTable)) --> a b c
table.remove(myTable,2) -- print(unpack(myTable)) --> eredménye: a b c
table.remove(myTable, 2)
</syntaxhighlight>
print(unpack(myTable)) -- eredménye: a c
</source>
 
=== Megjegyzések ===
 
Egysoros megjegyzés:
<source lang="lua">
</source>
 
TöbbsorosTöbb soros megjegyzés:
<source lang="lua">
--[[Ide egy
több soros
többsoros
megjegyzés
került]]
 
=== Változók ===
 
A változók nevükkel hivatkozhatók.
 
A táblában levő értékek hivatkozhatók a tömböknél megszokott módon:, pl. <code>a[i4]</code>. Ha a kulcs string, akkor szabadhasználható az <code>a[''i''"nev"]</code> és <code>a.inev</code> alakbanalak is hivatkozni rá; ez azonban különbözik az a[i] értéktől.
 
A változók láthatóság szempontjából háromfélék lehetnek: globális, lokális, és táblamezők. A változók deklarációjuktól kezdve egészen a legkisebb befoglaló blokk végéig láthatók. Egy változó lokálissá tehető, ha <code>local</code>nak kulcsszóval deklaráljuk. A függvények paraméterei is lokálisnak tekinthetők. Minden más változó globális. A deklarált, de értéket még nem kapott változók értéke <code>nil</code>. A függvények látják hívási helyük lokális változóit.
 
=== Elágazás ===
 
A Lua csak a két irányú elágazást ismeri, a több ágú elágazás valójában csak szintaktikus cukorka:
 
 
=== Ciklusok ===
 
'''Elöltesztelő [[ciklus (programozás)|ciklus]]:'''
Elöltesztelő [[ciklus (programozás)|ciklus]]:
<source lang="lua">
while (feltétel) do
Addig hajtja végre a ciklusmagot, amíg a feltétel igaz.
 
'''Hátultesztelő ciklus:'''
<source lang="lua">
repeat
A ciklusmagot egyszer mindenképpen végrehajtja, majd utána addig hajtja végre a ciklust, amíg a feltétel hamis (igazzá nem válik). Az until ciklus valójában csak szintaktikus cukorka, nem hoz létre új láthatósági tartományt.
 
'''Számlálós ciklus:'''
<source lang="lua">
for index = start,finish,delta do
</source>
 
'''Iteráló ciklus:'''
 
<source lang="lua">
A <code>lista</code> összes elemén végigiterál, egészen addig, amíg <code>nil</code> értéket nem kap.
 
== Függvények ==
 
A Luában a függvények átadhatók paraméterként, sőt, visszatérési értékek is lehetnek, ahogy a következő példa mutatja:
 
<syntaxhighlightsource lang="lua">
do
local oldprint = print -- a jelenlegi print függvény eltárolása oldprint néven
end
end
</source>
</syntaxhighlight>
 
A régi print függvény csak az új print függvényen keresztül érhető el.
A Lua a lezártakat is támogatja:
 
<syntaxhighlightsource lang="lua">
function addto(x)
-- Return a new function that adds x to the argument
fourplus = addto(4)
print(fourplus(3)) -- Prints 7
</source>
</syntaxhighlight>
 
Valahányszor meghívódik az <code>addto</code>, annyiszor új lezárt jön létre az <code>x</code> változóhoz. Így a névtelen függvény mindig hozzáfér a paraméteréhez. A lezártat, mint minden más objektumot, a szemétszedő gyűjti be.
 
=== Metatáblák ===
 
A metatáblák új lehetőségeket nyújtanak a táblák felhasználására. A következő példa egy végtelen táblát mutat be. Minden <math>n</math>-re <code>fibs[n]</code> az <math>n</math><sup>th</sup>-edik [[Fibonacci-számok|Fibonacci-szám]]ot adja a dinamikus programozás és a memorizálás segítségével:
<syntaxhighlightsource lang="lua">
fibs = { 1, 1 } -- fibs[1] fibs[2] kezdőértékei.
setmetatable(fibs, {
end
})
</source>
</syntaxhighlight>
 
Egy másik példa: a __call metametódus az objektumorientáltság érzetét adja:
 
<syntaxhighlightsource lang="lua">
newPerson = {} -- Új tábla 'newPerson' néven.
 
print(Bill.Name, Bill.Age) -- A name és az age attributumok kiíratása.
 
</source>
</syntaxhighlight>
 
====Struktúrák====
==== Struktúrák ====
 
Bár a Luában nincs adatszerkezet rekordok létrehozására, mint például C-ben a <code>struct</code>, a táblák erre a célra is használhatók. Ezt a használatot a nyelv szintaktikusan támogatja:
 
<syntaxhighlightsource lang="lua">
point = { x = 10, y = 20 } -- Új tábla
print(point["x"]) -- Az "x" koordináta kiíratása, itt 10
print(point.x) -- Ugyanaz, mint az előző sorban, csak másként.
</source>
</syntaxhighlight>
 
==== Névterek ====
 
====Névterek====
A táblák összetartozó függvényeket is tárolhatnak, ezzel átvehetik a névterek szerepét:
 
<syntaxhighlightsource lang="lua">
Point = {}
Point.new = function (x, y)
point.x = x
end
</source>
</syntaxhighlight>
 
====Tömbök====
==== Tömbök ====
 
A Lua táblák tömbökként is használhatók:
 
<syntaxhighlightsource lang="lua">
array = { "a", "b", "c", "d" } -- Az indexek automatikusan számozódnak.
print(array[2]) -- A "b"-t írja ki. A Lua 1-től kezdi a tömbelemek indexelését.
array[0] = "z" -- A 0 index használata.
print(#array) -- A nulladik index nem számítódik bele a hosszba.
</source>
</syntaxhighlight>
 
Objektumok tömbjeként:
<syntaxhighlightsource lang="lua">
function Point(x, y) -- A "Point" objektum konstruktora
return { x = x, y = y } -- Új objektum létrehozása és visszaadása
array = { Point(10, 20), Point(30, 40), Point(50, 60) } -- Pontok tömbje
print(array[2].y) -- 40-et ír ki
</source>
</syntaxhighlight>
 
A Lua táblák tömbrésszel és assziociatív tömbrésszel vannak implementálva. Korábban az egészet asszociatív tömbbel valósították meg, de ez az ábrázolás gyorsabb.<ref name=lobject_h_array>{{cite web|url=http://www.lua.org/source/5.1/lobject.h.html#array|title=Lua 5.1 Source Code|accessdate=2011-03-24|year=2006}}</ref>
 
== Felhasználói modulok ==
 
A Lua lehetővé teszi új modulok létrehozását. A modulok kezelésére rendelkezésre áll a Luarocks modulkezelő.
 
! Modul!! Leírás
|-
| LuaFileSystem || Hozzáférés a könyvtárszerkezethez és a fájlok jogaihoz
|-
| LuaDoc || Dokumentációs eszköz a Lua-kódhoz.
|-
| LuaSocket || Lua interfész a hálózati protokollokhoz: [[Hypertext Transfer Protocol|HTTP]], [[File Transfer Protocol|FTP]], [[Simple Mail Transfer Protocol|SMTP]], [[Multipurpose Internet Mail Extensions|MIME]], [[Uniform Resource Locator|URL]] és [[LTN12]].
|-
| LuaSQL || Lua interfész a következőkhöz: [[PostgreSQL]], [[Open Database Connectivity|ODBC]], [[MySQL]], [[SQLite]], [[Oracle]] és az [[OLE DB]].
|-
| stdlib || Gyakori feladatok programkönyvtára a listákhoz, táblákhoz, a funkcionális és az objektumorientált programozáshoz, meg a reguláris kifejezésekhez.
|-
| [[Message-Digest Algorithm 5|MD5]] || Egyszerű kriptográfia
|-
| Copas || Párhuzamosság támogatása, a korutinok képességeinek bővítése
|-
| LuaZip || A .zip fájlok kezeléséhez.
|-
| LuaInterface || Kapcsolatot teremt a Lua és a [[Microsoft]] [[.NET keretrendszer|.NET]] [[Common Language Runtime|Common Language Runtime (CLR)]] között.
|-
| LuaBitOps || C nyelvű kiterjesztés a számokon végzett bitenkénti műveletekhez.
|-
| LuaXML || Az XML és a Lua társítása.
|-
| Lanes || Több Lua környezet párhuzamos futtatása
|-
| Penlight || Táblák, tömbök, stringek, fájlok, könyvtárak, adatok és funkcionális eszközök kezelelésének egyszerűsítése.
|-
| Oil || Egyszerű és hatékony Object Request Broker ([[Common Object Request Broker Architecture|CORBA]]).
|}
 
== Hello, World! ==
 
A klasszikus [[„Helló, világ!” program|Hello World!]] program Lua nyelven:
<source lang="lua">
</source>
 
== A program futtatása ==
 
A virtuális gép nem közvetlenül a Lua szkriptet hajtja végre, hanem futás közben bájtkódra fordítja, és ez fut. A szkriptek futtatás nélkül is fordíthatók. Maga a fordítás átlátható.
 
10 [6] RETURN 0 1
 
== C API ==
 
A Luát alkalmazásokba ágyazott nyelvnek fejlesztették, ezért könnyen használható, robusztus C API-val látták el. Az API két részből áll: ezek a Lua core és a Lua auxiliary library.<ref name=luarefman>{{cite web| url = http://www.lua.org/manual/5.1/| title = Lua 5.1 Reference Manual| publisher = Lua.org| accessdate = 2009-05-24}}</ref> Kiküszöböli a C kézi hivatkozáskezelését. Az API a nyelvhez hasonlóan minimalisztikus; a funkcionalitás bővítéséért az auxiliary library felelős, ami preprocesszor makrókkal egyszerűsíti a táblakezelést.
 
===Verem===
=== Verem ===
 
A Lua C API verem alapú. A veremműveleteket Lua függvények valósítják meg, továbbá léteznek táblakezelő függvények is, amik a veremből is hívhatók. Ez a verem indexelhető is. A [[Python (programozási nyelv)|Python]] tömbökhöz hasonlóan negatív indexek is használhatók; ezek a verem tetejétől (-1 a legfelső elem), a pozitív indexek a verem aljától számítódnak.
 
A C ésa Lua közötti kommunikációt szintén a verem valósítja meg. A Lua függvénynek átadott argumentumok a verembe kerülnek, és az aktuális függvény <code>lua_call</code> utasítással hívható. Ha C függvényt hívunk Luából, akkor az a verem tetejéről veszi a paramétereket.
 
===Példa===
=== Példa ===
 
Lua függvény hívása C-ből:
<syntaxhighlightsource lang="c">
#include <stdio.h>
#include <stdlib.h>
return 0;
}
</source>
</syntaxhighlight>
 
Fordítás és futtatás:
Result: 8
</pre>
 
===Speciális táblák===
=== Speciális táblák ===
 
A C API speciális táblákat is elérhetővé tesz, amik pszeudoindexekkel hivatkozhatók a Lua veremből. A <code>LUA_GLOBALSINDEX</code> tárolja a globális változókat, <code>_G</code> a fő névtér. A <code>LUA_REGISTRYINDEX</code>-ben tárolják a C függvények a Lua értékeket későbbi felhasználásra.
 
===Kiterjesztés és kötés===
=== Kiterjesztés és kötés ===
 
Kiterjesztő modulok is készíthetők a Lua API használatával. Ezek a könyvtárak kiterjesztik az értelmező funkcionalitását. A Lua szempontjából ezek névterek, vagyis táblák a maguk változóival és függvényeivel. Ezek a modulok a <code>require</code> kulcsszóval tölthetők be.<ref name=luarefman />
 
Vannak csomagok a grafikus felülethez, a Perl/POSIX szabályos kifejezésekhez, a titkosításhoz, afájltömörítéshez és még sok máshoz. A legtöbb népszerű nyelvhez vannak Lua kötések, például más szkript nyelvekhez.<ref>{{cite web| url = http://lua-users.org/wiki/BindingCodeToLua| title = Binding Code To Lua| publisher = Lua-users wiki| accessdate = 2009-05-24}}</ref> A C++ megközelítés sablon alapú, és automatikus generátorokat használ.
 
== Alkalmazásai ==
 
<!--Kéretik nem videojáték témájú példákat beírni, mert akkor szinte mindegyiket felsorolhatnánk.-->
<!-- Kéretik nem videojáték témájú példákat beírni, mert akkor szinte mindegyiket felsorolhatnánk. -->
*A videojátékok fejlesztésében a játékfejlesztők elterjesztették a Luát, mivel gyors, könnyen beágyazható és könnyen tanulható.<ref>{{cite web |url=http://stackoverflow.com/questions/38338/why-is-lua-considered-a-game-language |title=Why is Lua considered a game language? |publisher=[[Stack Overflow]] |accessdate=2010-04-23}}</ref> 2012 januárjában a Game Developer Magazine a Luát hirdette győztesnek a Programming Tools kategóriában, és a Front Line Award 2011-et adományozta neki.<ref>[http://www.gdmag.com/blog/2012/01/front-line-award-winners.php Front Line Award Winners Announced]</ref> Egy példa a népszerű [[Minecraft]] nevű videojáték; a hozzá készült [[Computercraft]] mod számítógépei is Lua nyelvet használnak.
 
*A [[3DMLW]] plugin Luát használ háromdimenziós megjelenítésre és eseménykezelésre.
* A videojátékok fejlesztésében a játékfejlesztők elterjesztették a Luát, mivel gyors, könnyen beágyazható és könnyen tanulható.<ref>{{cite web |url=http://stackoverflow.com/questions/38338/why-is-lua-considered-a-game-language |title=Why is Lua considered a game language? |publisher=[[Stack Overflow]] |accessdate=2010-04-23}}</ref> 2012 januárjában a Game Developer Magazine a Luát hirdette győztesnek a Programming Tools kategóriában, és a Front Line Award 2011-et adományozta neki.<ref>[http://www.gdmag.com/blog/2012/01/front-line-award-winners.php Front Line Award Winners Announced]</ref> Egy példa a népszerű [[Minecraft]] nevű videojáték; a hozzá készült [[Computercraft]] mod számítógépei is Lua nyelvet használnak.
*Az [[Adobe Photoshop Lightroom]] felhasználói interfésznek.
* A [[3DMLW]] plugin Luát használ háromdimenziós megjelenítésre és eseménykezelésre.
*Az [[Apache HTTP Server]] a 2.3 verziótól kezdve képes Lua használatára bárhol a lekérési folyamatban.
* Az [[Adobe Photoshop Lightroom]] felhasználói interfésznek.
*Az [[Artweaver]] képszerkesztőben szkriptelésre.
* Az [[Apache HTTP Server]] a 2.3 verziótól kezdve képes Lua használatára bárhol a lekérési folyamatban.
*Az [[Awesome]] ablakkezelő részben Luában íródott. Konfigurációs fájlja is Lua szkript.
* Az [[Artweaver]] képszerkesztőben szkriptelésre.
*A [[The Canon Hack Development Kit]] (CHDK) nyílt forrású Canon kamerakezelőben a Lua a kettő közül az egyik szkript nyelv.
* Az [[Awesome]] ablakkezelő részben Luában íródott. Konfigurációs fájlja is Lua szkript.
*A [[Celestia]] csillagászat témájú tanítóprogram szkript nyelve.
* A [[The Canon Hack Development Kit]] (CHDK) nyílt forrású Canon kamerakezelőben a Lua a kettő közül az egyik szkript nyelv.
*A [[Cisco]] ezen a nyelven implementálja a Dynamic Access Policiest az Adaptive Security Appliance-ban.
* A [[Celestia]] csillagászat témájú tanítóprogram szkript nyelve.
*A [[Creative Technology Zen X-Fi2]] hordozható médialejátszó beállításai Luában is szerkeszthetők.
* A [[Cisco]] ezen a nyelven implementálja a Dynamic Access Policiest az Adaptive Security Appliance-ban.
*A [[Damn Small Linux]] Luát használ mind az ablakozó rendszer, mind a parancssor kényelmi funkcióihoz.
* A [[Creative Technology Zen X-Fi2]] hordozható médialejátszó beállításai Luában is szerkeszthetők.
*A [[Dolphin Computer Access]]ben a [[SuperNova]] képernyőolvasó is Lua szkript.
* A [[FusionDamn Small Linux]] szerkesztő Luát használ szkriptelésremind az ablakozó rendszer, mind a ésparancssor pluginkényelmi prototípushozfunkcióihoz.
* A [[Dolphin Computer Access]]ben a [[SuperNova]] képernyőolvasó is Lua szkript.
*A NES emulator FCE Ultra [[Fork (szoftverfejlesztés)|forkja]], a [[FCEUX]] lehetővé teszi a játékok szerkesztését Lua szkriptekkel.
* A [[Fusion]] szerkesztő Luát használ szkriptelésre és plugin prototípushoz.
*A [[Flame]], egy hírhedt számítógépes kémkedésre használt program.
* A NES emulator FCE Ultra [[Fork (szoftverfejlesztés)|forkja]], a [[FCEUX]] lehetővé teszi a játékok szerkesztését Lua szkriptekkel.
*A [[Foldit]], egy fehérjehajtogató játék, lehetővé teszi a Luában írt felhasználói szkriptek alkalmazását.<ref>[http://www.pnas.org/content/early/2011/11/02/1115898108 Algorithm discovery by protein folding game players]</ref>
* A [[Flame]], egy hírhedt számítógépes kémkedésre használt program.
*A [[FreePOPs]] levelezőrendszer webes felülete.
* A [[Foldit]], egy fehérjehajtogató játék, lehetővé teszi a Luában írt felhasználói szkriptek alkalmazását.<ref>[http://www.pnas.org/content/early/2011/11/02/1115898108 Algorithm discovery by protein folding game players]</ref>
*A [[Brazilian Digital Television System]] [[Ginga]] middlewarja Luát használ deklaratív környezetének szkript nyelveként.
* A [[FreePOPs]] levelezőrendszer webes felülete.
*A [[GrafX2]] pixel-art szerkesztő képes Lua szkripteket futtatni képgeneráláshoz és képfeldolgozáshoz.
* A [[Brazilian Digital Television System]] [[Ginga]] middlewarja Luát használ deklaratív környezetének szkript nyelveként.
*A [[Garry's Mod]] nevű videojátékban lehet a Lua segítségével úgynevezett "szkriptelt fegyvereket" készíteni, de objektumok is létrehozhatók.
* A [[GrafX2]] pixel-art szerkesztő képes Lua szkripteket futtatni képgeneráláshoz és képfeldolgozáshoz.
*Az [[Ipe]] képszerkesztő szkript és funkcionális kiterjesztései.
* A [[Garry's Mod]] nevű videojátékban lehet a Lua segítségével úgynevezett "szkriptelt fegyvereket" készíteni, de objektumok is létrehozhatók.
*A [[Lego Mindstorms NXT]] és az [[Lego Mindstorms NXT 2.0|NXT 2.0]] is bírja a Luát.<ref>[http://www.hempeldesigngroup.com/lego/pbLua/ pbLua]</ref>
* Az [[Ipe]] képszerkesztő szkript és funkcionális kiterjesztései.
*A [[lighttpd]] webszerver Luát használ a hook szkriptekhez a Cache Meta Language modern helyetteseként.
* A [[Lego Mindstorms NXT]] és az [[Lego Mindstorms NXT 2.0|NXT 2.0]] is bírja a Luát.<ref>[http://www.hempeldesigngroup.com/lego/pbLua/ pbLua]</ref>
*A [[Logitech]] G15 2.01 verziójának profilkezelője.
* A [[lighttpd]] webszerver Luát használ a hook szkriptekhez a Cache Meta Language modern helyetteseként.
*A [[LuaTeX]], a [[pdfTeX]] tervezett utóda ismeri a Luát.
* A [[Logitech]] G15 2.01 verziójának profilkezelője.
*A [[MediaWiki]] új sablonnyelve.<ref>https://en.wikipedia.org/wiki/Wikipedia:Wikipedia_Signpost/2012-01-30/Technology_report</ref>
* A [[LuaTeX]], a [[pdfTeX]] tervezett utóda ismeri a Luát.
*A [[MikroTik]] [[RouterOS]] bétája a Lua 4.x-et, a végleges kiadás a Lua 5.x-et támogatja.<ref>{{cite web|title=Manual:Lua|url=http://wiki.mikrotik.com/wiki/Lua|work=MikroTik Wiki|accessdate=2010-04-23}}</ref>
* A [[MediaWiki]] új sablonnyelve.<ref>https://en.wikipedia.org/wiki/Wikipedia:Wikipedia_Signpost/2012-01-30/Technology_report</ref>
*A [[Multimedia Fusion Developer 2]] Lua kiegészítője lehetővé teszi, hogy a játékok Lua szkripteket futtassanak.
* A [[MikroTik]] [[RouterOS]] bétája a Lua 4.x-et, a végleges kiadás a Lua 5.x-et támogatja.<ref>{{cite web|title=Manual:Lua|url=http://wiki.mikrotik.com/wiki/Lua|work=MikroTik Wiki|accessdate=2010-04-23}}</ref>
*A [[MySQL Workbench]] elfogad Lua nyelvű kiterjesztéseket.
* A [[Multimedia Fusion Developer 2]] Lua kiegészítője lehetővé teszi, hogy a játékok Lua szkripteket futtassanak.
*Az [[Nginx]] beágyazott Lua modulja API-t nyújt az Nginx eszközeihez, például a socketkezeléshez.<ref>http://wiki.nginx.org/HttpLuaModule</ref>
* A [[MySQL Workbench]] elfogad Lua nyelvű kiterjesztéseket.
*Az nmap hálózati biztonsági szkenner szkript nyelve, az nse Luán alapul.<ref>{{cite web|title=Nmap Scripting Engine|url=http://nmap.org/book/nse.html|accessdate=2010-04-10}}</ref>
* Az [[Nginx]] beágyazott Lua modulja API-t nyújt az Nginx eszközeihez, például a socketkezeléshez.<ref>http://wiki.nginx.org/HttpLuaModule</ref>
*A [[Wavecom GSM]] [[Open AT OS]] firmware-ja elfogad Lua nyelvű felhasználói alkalmazásokat.
* Az nmap hálózati biztonsági szkenner szkript nyelve, az nse Luán alapul.<ref>{{cite web|title=Nmap Scripting Engine|url=http://nmap.org/book/nse.html|accessdate=2010-04-10}}</ref>
*A [[Project Dogwaffle Professional]] Lua nyelvű szűrők létrehozását segíti. Ezt a DogLua szűrő segíti, és a szűrők megoszthatók a Project Dogwaffle, GIMP, Pixarra Twistedbrush és az ArtWeaver között.
* A [[Wavecom GSM]] [[Open AT OS]] firmware-ja elfogad Lua nyelvű felhasználói alkalmazásokat.
*A [[Prosody]] egy keresztplatformos Jabber/XMPP szerver Luában íródott.
* A [[Project Dogwaffle Professional]] Lua nyelvű szűrők létrehozását segíti. Ezt a DogLua szűrő segíti, és a szűrők megoszthatók a Project Dogwaffle, GIMP, Pixarra Twistedbrush és az ArtWeaver között.
*A [[Reason Digital Audio Workstation]]ben Luával írhatók le a távoli objektumok.
* A [[Prosody]] egy keresztplatformos Jabber/XMPP szerver Luában íródott.
*A [[Redis]] nyílt forrású adatbázisban a szerveren Lua szkriptek futtathatók, ezzel bővítve annak funkcionalitását.<ref>{{cite web|title=Redis Lua scripting|url=http://redis.io/commands/eval}}</ref>
* A [[Reason Digital Audio Workstation]]ben Luával írhatók le a távoli objektumok.
*A [[Rockbox]] nyílt forrású hanglejátszó támogatja a Lua nyelvű pluginokat.
* A [[Redis]] nyílt forrású adatbázisban a szerveren Lua szkriptek futtathatók, ezzel bővítve annak funkcionalitását.<ref>{{cite web|title=Redis Lua scripting|url=http://redis.io/commands/eval}}</ref>
*A [[SciTE]] új verziója bővíthető Lua szkriptekkel.
* A [[Rockbox]] nyílt forrású hanglejátszó támogatja a Lua nyelvű pluginokat.
*A Snort a 3.0-tól kezdve tartalmaz Lua értelmezőt.<ref>{{cite web|title=Lua in Snort 3.0|url=http://www.linuxsecurity.com/content/view/128135/171/|accessdate=2010-04-10}}</ref>
* A [[SciTE]] új verziója bővíthető Lua szkriptekkel.
*A [[Logitech]] [[Squeezebox]] zenelejátszója támogat Lua nyelvű pluginokat.
* A Snort a 3.0-tól kezdve tartalmaz Lua értelmezőt.<ref>{{cite web|title=Lua in Snort 3.0|url=http://www.linuxsecurity.com/content/view/128135/171/|accessdate=2010-04-10}}</ref>
*A [[Tarantool/Box]] [[NoSQL]] tárolt eljárásainak nyelve.
* A [[Logitech]] [[Squeezebox]] zenelejátszója támogat Lua nyelvű pluginokat.
*A [[TI-Nspire]] számológépek Lua alkalmazásokat tartalmaz specifikus API-val.
* A [[Tarantool/Box]] [[NoSQL]] tárolt eljárásainak nyelve.
*A [[Vim]] a 7.3-as verziójától kezdve támogatja a Lua szkriptelést.
* A [[TI-Nspire]] számológépek Lua alkalmazásokat tartalmaz specifikus API-val.
*A [[VLC]] a Luával segíti a szkriptelést.
* A [[Vim]] a 7.3-as verziójától kezdve támogatja a Lua szkriptelést.
*A [[WeeChat]] IRC kliens elfogad Lua szkripteket.
* A [[VLC]] a Luával segíti a szkriptelést.
*A [[WinGate]] proxyszerver eseménykezelője és házirendje Luával éri el a belső WinGate objektumokat.<ref>{{cite web|title=Vim documentation: if_lua|url=http://vimdoc.sourceforge.net/htmldoc/if_lua.html|accessdate=2011-08-17}}</ref>
* A [[WeeChat]] IRC kliens elfogad Lua szkripteket.
*A [[Wireshark]] hálózati csomagelemző protokoll dissectorai és post-dissectorai ismerik a Luát.<ref>{{cite web|title=Lua in Wireshark|url=http://wiki.wireshark.org/Lua|accessdate=2010-04-10}}</ref>
* A [[WinGate]] proxyszerver eseménykezelője és házirendje Luával éri el a belső WinGate objektumokat.<ref>{{cite web|title=Vim documentation: if_lua|url=http://vimdoc.sourceforge.net/htmldoc/if_lua.html|accessdate=2011-08-17}}</ref>
* A [[Wireshark]] hálózati csomagelemző protokoll dissectorai és post-dissectorai ismerik a Luát.<ref>{{cite web|title=Lua in Wireshark|url=http://wiki.wireshark.org/Lua|accessdate=2010-04-10}}</ref>
 
== Külső hivatkozások ==
 
* [http://www.lua.org/ Lua.org]
 
== Jegyzetek ==
{{jegyzetek}}
 
== Irodalom ==
 
* {{Cite book | last1 = Ierusalimschy | first1= R. | last2 = Figueiredo | first2 = L. H. | last3 = Celes | first3 = W. | title = Lua 5.1 Reference Manual | year= 2006 | publisher = Lua.org | isbn= 85-903798-3-3 | url = http://www.lua.org/manual/5.1/}}
* {{Cite book | last1 = Ierusalimschy | first1 = R. | title = Programming in Lua <!-- Blue PiL --> | edition = 2nd | year = 2006 | publisher = Lua.org | isbn = 85-903798-2-5 | url = http://www.inf.puc-rio.br/~roberto/pil2/}} (1st ed. is available [http://www.lua.org/pil/ online])