© NASA
Skriptsprache Lua
Grüße vom Trabanten
von Tim Schürmann
Erschienen im Linux-Magazin
2006/12
Klein, schlank und schnell - mit diesen Attributen eroberte Lua die Herzen der Spielehersteller. Aber auch in ernsteren Anwendungsbereichen beweist die Skriptsprache, deren Name auf Portugiesisch Mond bedeutet, ihre Leistungsfähigkeit - und dies nicht nur durch den Einsatz einiger ungewöhnlicher Konzepte.
Als Bret Mogilefsky 1996 eine kleine Skriptsprache aus Brasilien auffiel, programmierte er bei Lucas Arts gerade an dem Adventure "Grim Fandango" (Abbildung 1). Die neu entdeckte Sprache mit dem Namen Lua gefiel ihm so gut, dass er sie umgehend zur Steuerung der Spielszenen einbaute. Dies bedeutete gleichzeitig den Durchbruch für den brasilianischen Export. Immer mehr Spielehersteller entdeckten die Vorzüge der kleinen und schnellen Sprache. Endlich konnten sie die künstliche Intelligenz in Skripte auslagern und noch zur Laufzeit modifizieren.

|
Abbildung 1: "Grim Fandango" ist das erste größere Programm, das Lua einsetzt - wenn auch leider nur unter Windows.
|
Aber auch in ernsthaften Anwendungen, in denen Skripte Abläufe oder Konfigurationen steuern, kam und kommt Lua immer häufiger zum Einsatz: Angefangen bei Simulationen, über Netzwerksoftware wie Ethereal bis hin zu Adobes neuem Fotoprogramm Lightroom.
Seinen Ursprung hat Lua an der Pontifical Catholic University in Rio de Janeiro, wo 1993 drei Mitarbeiter begannen eine neue Skriptsprache zu entwickeln. Roberto Ierusalimschy, Luiz Henrique de Figueiredo und Waldemar Celes hatten sich zuvor schon zwei einfachere Sprachen zur Datenauswertung und zur Konfiguration eines Report-Generators ausgedacht.
Deren klare Strukturen bohrten sie nun zu einer vollwertigen Sprache auf und tauften das Ergebnis auf den portugiesischen Namen für Mond: Lua. Die neue Skriptsprache konzentriert sich lediglich auf einige wenige, einfache Konzepte. Damit bleibt die Syntax zwar schön kurz und knackig, komplexe Konstrukte aus anderen Sprachen, beispielsweise eine Objektorientierung, muss man jedoch mit den vorhandenen Mitteln simulieren.
Mikro-Interpreter
Parallel zur Sprachsyntax entwickelten die drei Programmierer gleich den passenden Interpreter. Er ist extrem schnell, hochgradig portabel und lässt sich zudem leicht in C-Programme einbetten. Obwohl er nur wenige Kilobyte umfasst, passt noch eine vollständige Garbage Collection hinein, die anfallenden Datenmüll automatisch aus dem Speicher wirft. Das Ergebnis veröffentlichten die drei Kollegen zunächst unter einer eigenen, BSD-ähnlichen Lizenz. Seit Version 5 steht Lua unter der ebenfalls freien MIT-Lizenz. In beiden Fällen ist der Lizenzkosten-freie Einsatz auch in kommerziellen Projekten erlaubt.
Statt eines allzu trivialen Hello World soll ein komplexeres Beispiel die Lua-Syntax etwas näher vorstellen, nämlich die Berechnung des größten gemeinsamen Teilers (Listing 1).
01 -- Berechne den größten gemeinsamen Teiler von a und b
02 -- Kommentare beginnen mit zwei Minuszeichen
03 function ggT(a,b)
04 if (b == 0) then
05 return a
06 elseif a > b then
07 return ggT(a-b, b)
08 else return ggT(a, b-a)
09 end
10 end
11
12 -- Hauptschleife, berechne ein paar ggTs
13 x=1
14 while(x < 10)
15 do
16 print (ggT(x, 27))
17 x = x + 1
18 end
|
Lua bietet eine durchgehende dynamische Typbindung, eine Variable darf also zu jedem Zeitpunkt beliebige Daten aufnehmen. Doch damit nicht genug der einfachen Zuweisungen: Da es erlaubt ist, statt »a=1; b=2;« auch »a, b = 1,2« zu schreiben, vertauscht »x, y = y, x« den Inhalt der beiden Variablen.
Auch wenn der Programmierer nur selten mit ihnen in Berührung kommt, unterscheidet Lua unter anderem zwischen folgenden Basistypen: Nil (die Variable hat keinen Wert), Boolean (wahr oder falsch), Number (Fließkommazahlen mit doppelter Genauigkeit), String (Zeichenketten).
Hashes mit Tabellen
Lua kennt mit den so genannten Tabellen nur eine einzige komplexe Datenstruktur, die es dafür aber in sich hat. Konkret handelt es sich um assoziative Arrays, die in der freien Wildbahn auch als Dictionaries ihr Unwesen treiben. Ganz ihrem Namen folgend, darf man sie sich wie eine Tabelle mit zwei Spalten vorstellen, die automatisch mitwächst, sobald neue Elemente hinzukommen. Zusätzlich betrachtet Lua sie als (spezielle) Objekte, womit sie sogar in Variablen gespeichert werden können:
a = {} -- Tabelle anlegen
a[1]=1
a["hallo"]=3
Wie von einem klassischen Dictionary gewöhnt, dürfen als Index beliebige Werte herhalten. Die geschweiften Klammern bezeichnet Lua als Constructor, über den Programmierer bei Bedarf die Tabelle initialisieren:
a = {"Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"}
Auf den Tabellen beruhen alle von anderen Sprachen bekannten Datenstrukturen. Dienen beispielsweise nur Zahlen als Indizes, ist das Ergebnis ein herkömmliches Array. Über verschachtelte Tabellen lassen sich Matrizen oder zweidimensionale Arrays erzeugen. Letzteres sieht in anderen Sprachen dank einer speziellen Notation zwar eleganter aus, dafür bietet Lua bei spärlich besetzten oder nicht quadratischen Matrizen (wie einer Dreiecksmatrix) Speichervorteile: Da die Tabellen dynamisch wachsen, belegen sie immer nur so viel Speicher wie nötig. Um weitere Sprachelemente auf die Tabellen abbilden zu können, führten die Lua-Erfinder noch eine Kurzschreibweise ein. Danach ist »a.["name"]=1« gleichbedeutend mit »a.name=1«.
| Whitepaper |
|
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele
Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.
Download PDF (Registrierung erforderlich)
|
|
The Role of Open Source in Data Integration
Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.
Download PDF (Registrierung erforderlich)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|