aalso... das ist ein weites feld, würde briest jetzt sagen..
ich hab mich wegen son jetzt eingehender mit lua beschäftigt und ich muss sagen dass diese sprache einfach wunderbar ist.
also lua ist im grunde javascript sehr ähnlich, mit javascript 1.6 / 1.7 sogar immer mehr, denn js unterstützt jetzt auch ausdrucklisten, also etwa:
Code:
var a, b, c = 1, 2, 3; // a=1;b=2;c=3
lua passt diese listen dynamisch an, in lua wärs dann zb
Code:
a, b, c, d = 1, 2, 3 // a=1;b=2;c=3;d=nil (ein spezieller wert in lua der verschieden von allen anderen ist, sonst nichts)
dann hat lua eine art multithreading und zwar ko-routinen die unterbrochen und wiederaufgenommen werden können.
der vorteil zur eigenen scriptsprache sind ganz klar die enormen fähigkeiten der sprache die man soz. umsonst bekommt und die hohe geschwindigkeit. aber lua ist sich nicht zu fein für winz-aufgaben wie datenbeschreibung.. das ist sogar ein wichtiger verwendungszweck der sprache. es gibt zb ein syntactic sugar dass man eine funktion, die nur ein argument übernimmt, ohne klammern aufrufen kann, zb
Code:
print 'hallo welt'
wenn man mit tabellen arbeitet kann man einen funktionsaufruf, der zb einen eintrag in eine datenbank macht, wie folgt schreiben:
Code:
db_entry{
name="hugo",
address="wiesengasse 3, 60341 Frankfurt",
birthday="03/30/1997"
}
die schnittstelle ist in ansi-c geschrieben dh eigentlich nicht für c++ und oo geeignet.. zudem ist sie auf höchstmögliche flexibilität beim programmierer angelegt, man kann fast alles machen.. (leider ziemlich abstrakt)
kommuniziert mit lua wird über einen virtuellen stack, auf dem werte abgelegt werden wie zb funktionen (sind wie in js vollwertige werte (...)) oder alles andere..
zb
Code:
lua_state* L = lua_open();
luaL_openlibs(L); // öffnet standardbibliotheken, gehört zur erweiterungsbibliothek
lua_getglobal(L,"print"); // legt globalen wert von "print" auf den stack, momentan eine funktion
lua_pushstring(L,"hallo welt"); // legt das argument auf den stack
lua_call(L,1,0); // ruft die funktion auf dem stack auf, die ein argument nimmt und kein ergebnis zurückgibt, also versucht den wert an der zweitobersten stelle als funktion aufzurufen..
faktisch kann man trotz der funktionsbasierten api objektorientierte schnittstellen bauen.. für die verbindung mit c++ gibts zb zwei sehr gute bibliotheken: einmal tolua++, das eine bibliothek für das luaprogramm baut, um das c++-interface zu nutzen, zum anderen luabind, mit dem man in c++-manier eine schnittstelle in lua definieren kann.
im grunde ist es egal welche man wählt, sie sind eigentlich gleich, nur das luabind den luaprogrammierern ein intuitiveres oo-system bereitstellt