Schon wieder eine neue Programmiersprache, die keiner braucht, wird sich vielleicht mancher denken, der noch nie von Lua [1] gehört hat. Lua ist jedoch keine neue Erfindung, sondern feiert dieses Jahr bereits den 20. Geburtstag. Ein Grund dafür, dass Lua einen geringeren Bekanntheitsgrad als etwa Python oder Perl besitzt, ist, dass Lua seltener als eigenständige Programmiersprache eingesetzt wird, sondern meistens als eingebettete Skripting-Sprache für einzelne Programme.
Besonders bei Spielen und Game Engines ist Lua sehr weit verbreitet. Beinahe 150 Spiele mit Lua-Einsatz listet Wikipedia gar in einer eigenen Kategorie "Lua-scripted video games" auf. Lua ist aber auch in einer Vielzahl von Netzwerk- und Systemprogrammen zu finden, etwa in dem Netzwerk-Analyzer Wireshark, dem Scanner Nmap [2], dem MySQL-Proxy [3], der Antispam-Lösung Rspamd, der VoIP-Software FreeSwitch, der Redis-NoSQL-Datenbank, dem Webserver Apache [4] und Nginx (siehe den Artikel zu OpenResty in diesem Heft).
Entwickelt wurde Lua an der Katholischen Universität von Rio de Janeiro von Roberto Ierusalimschy, Luiz Henrique de Figueiredo und Waldemar Celes. Weil Brasilien bis 1992 starken Importbeschränkungen für Hard- und Software unterlag, hatten die drei sich entschieden, für ihre Zwecke eine eigene Skriptsprache zu entwickeln, die schließlich in Lua (portugiesisch für "Mond") mündete. Ierusalimschy steuert noch heute die Entwicklung und hat das Standardwerk "Programming in Lua" verfasst, das Anfang dieses Jahres in der dritten Auflage erschienen ist (auf deutsch bei Open Source Press erhältlich). Online ist die erste Auflage, die sich mit Lua 5.0 beschäfigt, unter [5] zu finden. Mittlerweile gibt es die Version 5.2, aber das Online-Buch ist noch zu großen Teilen aktuell.
Wie angesprochen, ist Lua im Wesentlichen als Bibliothek konzipiert, die Anwendungsprogrammierer in ihre Software integrieren können, um sie mit Skripting-Fähigkeiten auszustatten. Das bedeutet aber nicht, dass man Lua nicht ohne Zusatzsoftware nutzen könnte. Die Lua-Distribution, die es für alle gängigen Betriebssysteme gibt, enthält einen Interpreter, der nur wenige hundert Zeilen umfasst und sonst auf die vorhandenen Bibliotheksfunktionen zurückgreift. Gerade diese Kompaktheit (Abbildung 1), die die gesamte Lua-Distribution auszeichnet, zusammen mit einer recht hohen Ausführungsgeschwindigkeit, gehört zu den immer wieder gepriesenen Vorzügen von Lua. Dennoch bietet der Interpreter auch Features wie Garbage Collection, also die automatische Bereinigung nicht mehr verwendeter Datenstrukturen und damit Freigabe von Speicher.
Konzeptuell bietet Lua wenige aufregende Features. Die Syntax ist recht konventionell und markiert beispielsweise Blöcke statt mit geschweiften Klammern mit den Schlüsselwörtern »do
«
und »end
«
. Insgesamt bietet Lua nur etwa 20 reservierte Schlüsselwörter, die in Tabelle 1 zu finden sind, und ist damit recht schnell erlernbar.
Tabelle 1
Lua-Schlüsselwörter
and |
break |
do |
else |
elseif |
|
end |
false |
for |
function |
if |
|
in |
local |
nil |
not |
or |
|
repeat |
return |
then |
true |
until |
while |
Lua ist eine dynamisch typisierte Sprache, die die Typen »nil
«
, »boolean
«
, »number
«
, »string
«
, »function
«
, »thread
«
, »table
«
und »userdata
«
kennt. Der Typ einer Variablen wird also bestimmt, wenn ein Skript abläuft, und gegebenfalls auch in einen anderen Typ umgewandelt. Es ist also kein Problem, einer Variable beispielsweise eine Zahl zuzuweisen und später im Programm dann einen String. Beim Boolean-Typ, der Wahrheitswerte aufnimmt, verhält es sich so, dass »false
«
und »nil
«
für falsch stehen, während ein leerer String oder 0 einen wahren Wert repräsentieren. Das ist eindeutig und anders als etwa in PHP, wo die Zuweisung beliebiger Typen zu Wahrheitswerten eher dem Chaos-Prinzip folgt als einer bestimmten Methode.