Lua ist eine sehr minimalistische, jedoch extrem dynamische Sprache. Da sie (fast ausschließlich) in reinem ANSI-C geschrieben ist somit auch ohne großen Aufwand auf nahezu jede beliebige Plattform portierbar. Lua-Programme werden (ggf. automatisch) in einen Byte-Code kompiliert, und dann von einer sehr kleinen virtuellen Maschine ausgeführt. Meine eigenen Erfahrungen haben gezeigt, dass es selbst bei Programmierung mit einem hohen Grade an Selbstreflexion (also z.B. die automatische Generierung von Methoden oder Klassenähnlichen Konstrukten) nicht notwendig ist, auf eine eval(...)-Funktion (bei Lua entspricht dies loadstring(...)()) zurückzugreifen.
Auch wenn Lua durchaus eine Nischensprache ist, so findet sie sehr weite Verbreitung im Spielebereich, vermutlich auch dadurch bedingt, dass sie sich sehr einfach in eine C(++)-Applikation einbetten lässt, und man die Schnittstellen der virtuellen Maschine zur Aussenwelt ohne viel Aufwand gezielt einschränken kann. Selbst aus Lua heraus ist es möglich eine Funktion aus der globalen Umgebung herauszulösen, und sie einem eigenen (geschützten) Environment zuzuordnen, aus dem sie (ohne Referenzen von aussen zu bekommen) nicht mehr selbst herauskommen kann:
harmless_func = function() os.execute('ls') end
dangerous_func = function() os.execute('rm _important_file_') end
secure_environment = {}
setfenv(dangerous_func, secure_environment)
harmless_func() -- Lässt das Betriebssystem das Kommando "ls" ausführen
dangerous_func() -- Erzeugt den Fehler: "attempt to index global 'os' (a nil value)"
Die offizielle Lua-Homepage ist: http://www.lua.org/
Der Quellcode hat (komprimiert) lediglich eine Größe von 211 kB.