[A] Einbindung von Scriptsprachen: Lua (Teil 1)
-
1 Vorwort
Lua ist eine freundliche kleine Sprache.
Klein: weil auf meiner Maschine der fertige Interpreter unter 150kB hat. Neulich habe ich sogar auf einem Fotoapparat ein Erweiterungspaket gesehen, das Lua-Scripte verwendet.
Freundlich aus mehreren Gründen: der Quelltext ist in sauberem ANSI-C verfasst (das auch gültiges C++ ist), und man hat wenig Probleme damit, Lua bei Bedarf noch kleiner zu machen. Ausserdem sorgt der begrenzte Umfang dafür, dass man mit vertretbarem Aufwand auch verstehen kann, was man eigentlich tut, wenn man an den Quelltexten herumwerkt. Die Sprache ist von Anfang an als Erweiterungs-Sprache entwickelt worden. So ist es vorgesehen, wechselseitig C(++)-Funktionen und Lua-Funktionen aufzurufen. Und an sich bietet Lua einige Features, von denen man manche auch bei machner grosswüchsigen Sprache vermisst: ein einfaches Muster-Such-System für Zeichenketten, first class functions, closures, proper tail calls und ein System zur parallelen Verarbeitung (coroutines). Man ist für funktionale Konzepte gerüstet. Lua's bevorzugter nicht-atomarer Datentyp ist das assoziative Array, womit es sehr einfach ist, objektorientierte Konzepte umzusetzen.
Schließlich ist Lua schnell gelernt, weil es nicht viel zu lernen gibt.
Die Sprache ist auch auf schwachen Maschinen eine gute Ergänzung zu C. Auch C++-Projekte können von Lua als einfacher Script- oder Konfigurationssprache profitieren. Vielleicht wird der eine oder andere Leser versuchen wollen, Lua auf einem Mikroprozessor einzusetzen:
http://www.lua.org/about.html schrieb:
Lua runs on all flavors of Unix and Windows, and also on mobile devices (such as handheld computers and cell phones that use BREW, Symbian, Pocket PC, etc.) and embedded microprocessors (such as ARM and Rabbit) for applications like Lego MindStorms.
Lua ist Freie Software, und wird den Benutzern unter der MIT License überlassen. Nicht zuletzt die wenig restriktive Lizenz hat neben dem geringen Umfang dafür gesorgt, dass Lua in vielen kommerziellen Spielen eingesetzt wird.
Dieser Artikel ist der erste in meiner geplanten Reihe zu Erweiterungssprachen, und zugleich der erste, der sich mit Lua befasst. Er soll ein Beispiel für das Zusammenspiel von C und Lua sein. C++ wird nicht verwendet (dessen Aufgaben wird Lua übernehmen).
2 Ausrüstung
Ich werde folgende Software verwenden:
- Lua 5.1 (die Quelltext-Ausgabe)
erhältlich auf http://www.lua.org/download.html - GCC (XXX - im Moment mehrere Versionen im Einsatz - ausbessern)
erhältlich auf http://gcc.gnu.org/install/download.html - Irgendeine
make
-Version ist nützlich
In der Regel sollte es der C-Compiler jedes Betriebsystems ebenso tun. Für Windows empfehle ich MinGW (http://www.mingw.org/), weil MinGW vom Lua-Makefile unterstützt wird. Für Visual-C++ (http://www.microsoft.com/germany/express/) müsste man noch ein Projektfile für Lua anlegen.
3 Die Lua-Quelltexte übersetzen
Entpacken Sie die Datei http://www.lua.org/ftp/lua-5.1.4.tar.gz (212kB) in ein lokales Verzeichnis, und navigieren Sie Ihren Kommandozeilen-Interpreter dorthin. Versuchen Sie zunächst, ob das Übersetzen der Quelltexte Probleme macht, sagen Sie dazu:
make mingw
Setzen Sie bei Bedarf für
mingw
das Kürzel Ihres Systems ein: eines vonaix ansi bsd freebsd generic linux macosx mingw posix solaris
. Falls Ihr System nicht aufgelistet ist, lesen Sie die Datei README in diesem Verzeichnis.Der Übersetzungsvorgang sollte ohne weiteres abschließen. Es wird eine ausführbare Datei
lua
im Verzeichnis src erzeugt (auf Windowslua.exe
). Dies ist der Standalone-Interpreter. Starten Sie diesen, um zu testen, ob alles gut gegangen ist:lua-5.1.4> src/lua
Oder auf Windows:
lua-5.1.4> src\lua
Sie sollten folgendes sehen:
lua-5.1.4> src/lua Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio >
Geben Sie einen Test-Ausdruck ein und beenden Sie den Interpreter bei Erfolg:
> print("hello, world") hello, world > os.exit() lua-5.1.4>
Wenn Sie die gleichen Ausgaben erhalten, wie hier angegeben, haben Sie den Standalone-Interpreter von Lua erfolgreich übersetzt. Der Interpreter kann als Beispiel-Programm für unsere folgenden Betrachtungen dienen, wo wir Lua in eigene C-Programme einbetten werden.
Sie können an dieser Stelle eine Pause einlegen, und mit der Sprache experimentieren. Literatur und Dokumentation zu Lua finden Sie unter http://www.lua.org, oder am Ende dieses Artikels. Abgesehen von der Lua-Dokumentation empfehle ich Ihnen das Buch Programming in Lua von Roberto Ierusalimschy (dem Erfinder der Sprache), die erste Ausgabe ist online verfügbar.
(XXX -- ein Projektfile für VS wäre toll)
- Lua 5.1 (die Quelltext-Ausgabe)
-
So: jetzt hab ich zuviel Zeit investiert, um's dann liegen zu lassen...
Anregungen jeder Art erbeten!Im Speziellen suche ich noch nach einem einfachen C-Programmteil, der im Idealfall noch leicht kompliziert zu handhaben ist, so dass die Kapselung in ein Lua-Objekt Sinn macht. Wäre gut, denke ich, wenn man auch mehr zu sehen bekommt als Konsolen-Ausgaben.
Ich denke da momentan an einen kleinen Webserver. Über graphische Oberflächen hab ich nachgedacht, bin aber eher davon abgekommen, weil ich möglichst Plattform-unabhängig bleiben will (am besten sollte es sogar auf Mikroprozessoren laufen). Andere Ideen?
-
Mir fällt zwar spontan kein Programmbeispiel ein (nimm lieber etwas kompaktes anstatt etwas zu großes), aber die Nummerierung der Kapitel sollte bei 1 beginnen
-
aber die Nummerierung der Kapitel sollte bei 1 beginnen
In der Not: Ok.