Die Skriptsprache Lua

Nataliya-Velykanova, 123RF

Mondsüchtig

Als eingebaute Skriptsprache ist Lua mittlerweile Teil einer Vielzahl von Programmen. Allein schon deshalb lohnt es sich, sie zu lernen. Dieser Artikel gibt einen Einblick in den Lua-Kosmos.
Sicher verstaut - Deduplizierung spart Platz, Cloud-Backup für Windows, Areca sichert kostenlos. ADMIN 01/14 stellt Backups für Profis mit und ohne Cloud ... (mehr)

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).

Homegrown

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.

Abbildung 1: Ein kleines Lua-Skript, das Gebrauch von der Libguestfs macht.

Überschaubar

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.

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023