Lua

Lesezeit: 5 Minuten

Lua ist eine plattformunabhängige, interpretierte, dynamisch typisierte Skriptsprache, die objektorientierte, funktionale und aspektorientierte Programmierung unterstützt. Die Sprache wurde 1993 von den Brasilianern Roberto Ierusalimschy, Luiz Henrique de Figueiredo und Waldemar Celes in der Computer Graphics Technology Group der Päpstlichen Katholischen Universität von Rio de Janeiro entwickelt.

Für die Sprache als Nachfolger der Simple Object Language (SOL) – Sol ist portugiesisch für Sonne – wurde der Name Lua, portugiesisch für Mond, gewählt.

Alleinstellungsmerkmale

Lua ist leichtgewichtig, schnell und einfach in andere Programme einzubinden. Der Lua-Interpreter inklusive der Standardbibliothek besteht aus unter 30,000 Zeilen C-Code und beansprucht in Summe weniger als 1 Megabyte an Speicherplatz. Lua gilt im Vergleich zu anderen Skriptsprachen wie Python, Ruby und PHP als sehr schnell. Lua bietet eine API für C und damit eine einfache Interaktionsmöglichkeit zwischen C– und Lua-Code.

Einsatzbereiche

Mit Lua können zwar Standalone-Anwendungen entwickelt werden, primär wird die Sprache jedoch verwendet um bestehende Programme zu erweitern, etwa zum Modding von Videospielen. Bekannte Spielereihen, die Lua-Skripte unterstützen, sind z.B. Angry Birds, Crysis, Dota, Dungeons, Mafia, Payday, Saints Row, Stalker und World of Warcraft.

Folgende Softwares u.a. können mit Lua-Skripten erweitert werden: Adobe Photoshop Lightroom, Apache Http Server, CryEngine, HAProxy, Lighttpd, MySQL Workbench, Nmap, Redis, RPM, Varnish, VLC Media Player, Wireshark…

Pros

Die vorrangigen Vorteile der Sprache Lua sind ihre Geschwindigkeit, die geringe Installationsgröße und die bidirektionale Interationsmöglichkeit mit Code der Sprachen C und C++.

Durch seine einfache Syntax, wenige Datentypen und den kleinen Funktionsumfang eignet sich Lua gut als Einsteigersprache. Wenn man sich für eine der Anwendungen, die durch Lua erweitert werden können, oder Videospiele begeistert, kann sich der Einstieg in Lua fast spielerisch gestalten.

Funktionen sind in Lua First-Class Citizens und ermöglichen damit die Umsetzung von Currying und Closures.

Das mächtigste Werkzeug in Lua ist der einzige strukturierte Datentyp Table, der ein assoziatives Array darstellt, welches alle anderen Datentypen (außer nil) speichern kann. Jedem Table kann ein Meta Table zugeordnet werden, womit die Möglichkeit geschaffen wird Operatoren für diesen Table zu überladen. Mithilfe von Tables und Meta Tables lässt sich z.B. auch Objektorientierung realisieren.

Cons

Lua ist außerhalb des Einsatzgebietes als einbettbare Skriptsprache nicht besonders verbreitet. Damit dürfte sich die Suche nach geeigneten Stellen auf dem Arbeitsmarkt als schwierig gestalten, wenn man sich primär als Lua-Entwickler positionieren möchte. Es ist sicherlich ratsam, sich 1-2 weitere Sprachen zu suchen, in die man sich genauso tief reinarbeiten möchte.

Die Entwickler der Sprache haben einige eher ungewöhnliche Designentscheidungen getroffen, sofern man Lua mit anderen Sprachen vergleicht. Beispielsweise gibt es keine verkürzten Operatoren, wie +=, -= usw. Der Ternary-Operator ist ebenfalls nicht vorhanden, dafür wird nicht gleich in Lua als ~= ausgedrückt. Konstanten hat es in Lua über 20 Jahre nicht gegeben, auch wenn man sich diese theoretisch selbst mithilfe von Meta Tables bauen kann.

Mit Lua 5.4.0 wurden Konstanten eingeführt. Die Deklaration erfolgt über das Schlüsselwort <const>, das im Gegensatz zum Schlüsselwort local nicht nur in spitzen Klammern steht, sondern auch hinter der Variablen anstatt davor. Untypisch ist auch, dass alle Werte bis auf nil und false den boolischen Wert true ergeben, also auch die Zahl 0 und ein Leerstring. Es gibt übrigens auch keine Differenzierung zwischen Ganzzahlen und Fließkommazahlen und Tables werden ab 1 aufsteigend indiziert, während in vielen anderen Sprachen das erste Element üblicherweise an Position 0 ist.

Ungewöhnlich ist auch die Fehlerbehandlung, die durch eine Funktion pcall realisiert wird. Möchte man eine Fehlerbehandlung für einen gegebene Funktion implementieren, so kapselt man den Aufruf mit pcall. Fehler kann man übrigens mit der Funktion error erzeugen und werfen.

Datenblatt

NameLua
Webseitehttps://www.lua.org
Erscheinungsjahr1993
Aktuellste Version (Stand 31. Januar 2021)Version 5.4.0 vom 29. Juni 2020
Typisierungdynamisch
Paradigmenimperativ
objektorientiert
funktional
aspektorientiert
ProsCons
benötigt sehr wenig Speicherplatzwenige Datentypen
schnell für eine Skriptspracheeingeschränkter Funktionsumfang
leicht zu erlernenkleine Standardbibliothek
gute Dokumentationgeringer Bekanntheitsgrad und Verbreitung außerhalb des Einsatzbereiches als eingebettete Skriptsprache
wechselseitige Interaktion mit Code in C/C++
First-Class Functions
plattformunabhängig
interaktive Shell (REPL)

virtuallet

virtuallet ist ein kleines Programm von mir, welches ich in diversen Programmiersprachen implementiert habe. Hier geht es direkt zum Lua-Code von virtuallet auf GitLab. Hier gibt es weitere Infos zu virtuallet.