Open Source im professionellen Einsatz
Linux-Magazin 10/2011
© dioxin, photocase.com

© dioxin, photocase.com

Einführung in die Skriptsprache Squirrel

Flinkes Eichhörnchen

Wer eine Skriptsprache mit schlankem Interpreter sucht, der sich möglichst einfach in Anwendungen einbetten lässt, greift schon fast blind zu Lua. In deren Schatten wartet jedoch schon länger ein praxiserprobter Konkurrent namens Squirrel. Dieser Artikel stellt die Open-Source-Sprache in einem Crashkurs vor.

689

Vor etwas mehr als acht Jahren arbeitete Alberto Demichelis bei dem bekannten deutschen Spieleentwickler Crytek. Dort bastelte man gerade am Erstlingswerk Far Cry, dessen Programmlogik die Entwickler in der Skriptsprache Lua formulieren wollten. Bei der Integration stolperte Alberto Demichelis jedoch über ein Problem in der automatischen Speicherverwaltung (Garbage Collection).

Nach einigen Lösungsversuchen zog er die Notbremse und entwarf kurzerhand seine eigene Skriptsprache. Ihr Interpreter sollte wie der von Lua sein: klein, schlank und leicht in beliebige Anwendungen zu integrieren. Heraus kam Squirrel [1], deren aktueller Interpreter gerade einmal 442 KByte wiegt.

Alte Bekannte

Squirrel ist eine imperative objektorientierte Skriptsprache, deren Syntax an eine Mischung aus C, C++, Java, Javascript und Python erinnert. Von Lua hat Squirrel zudem die so genannten Tabellen abgeschaut, eine flexible Datenstruktur für fast alle Gelegenheiten. Obendrauf gibt es noch eine Garbage Collection, die sich selbstständig um die Speicherverwaltung kümmert.

Unter dem Strich vereint Squirrel somit eine einfache und vertraute Syntax mit den Vorteilen von Lua. Die Referenzimplementierung des Interpreters steht seit Squirrel 3.0 unter der MIT-Lizenz. Damit liegt nicht nur der Quellcode offen, der Interpreter darf auch kostenfrei in kommerziellen Programmen arbeiten.

Zum Einsatz kommt Squirrel derzeit vorwiegend in Computerspielen, die bekanntesten kommerziellen heißen "Left 4 Dead 2", "Final Fantasy Crystal Chronicles: My Life as a King" und "Portal 2" [2]. Die Entwickler des quelloffenen Transport-Tycoon-Deluxe-Klons "Open TTD" formulieren die künstliche Intelligenz der Computergegner in Squirrel (Abbildung 1).

Abbildung 1: In dem als freie Software erhältlichen Spiel "Open TTD" denken die Computergegner mit Squirrel-Skripten.

Wer die integrierte Entwicklungsumgebung Code::Blocks nutzt, ist ebenfalls schon auf Squirrel gestoßen: Dort erweitern Squirrel-Skripte den Funktionsumfang (Abbildung 2, [3]). Squirrel empfiehlt sich also auch für Anwendungen jenseits von Spielen. Wie die Squirrel-Shell beweist, taugt sie sogar als Ersatz für die gute alte Bash [4].

Abbildung 2: Die Entwicklungsumgebung Code::Blocks lässt sich mit Squirrel-Skripten erweitern.

Handarbeit

Leider fehlt Squirrel in den Repositories der meisten gängigen Distributionen. Damit bleibt dem Anwender kaum etwas anderes übrig, als sich die Referenzimplementierung von der Squirrel-Homepage zu schnappen und den Interpreter selbst zu übersetzen [1]. Das zum Download angebotene Quelltextarchiv enthält ihn in zwei Geschmacksrichtungen: Einmal als Standalone-Variante, die Squirrel-Skripte direkt auf der Kommandozeile ausführt, und einmal als statische Bibliothek, die sich an C++-Programme anflanschen lässt. Als Bonus erhält der Benutzer die Squirrel Standard Library mit einigen hilfreichen Squirrel-Funktionen, eine Handvoll Beispielprogramme und die Sprachreferenz als PDF-Datei.

Um die Interpreter zu erstellen, genügen ein installierter C++-Compiler sowie ein simples »make« im Verzeichnis des entpackten Archivs. Anschließend findet sich im Unterverzeichnis »bin« der Standalone-Interpreter namens »sq« . Ihm übergibt der Benutzer einfach das auszuführende Squirrel-Skript:

sq meinscript.nut

Um die Abarbeitung des Skripts zu beschleunigen, übersetzt sie der Interpreter in Bytecode. Das kann auch

sq -c meinscript.nut -o meinscript.cnut

vorab explizit veranlassen. Das Ergebnis »meinscript.cnut« führt der Anwender dann einfach wieder »sq« zu: »sq meinscript.cnut« . Ruft er »sq« ohne Parameter auf, startet der Interpreter in einem interaktiven Betriebsmodus, in dem sich Squirrel-Befehle direkt eintippen und absetzen lassen (Abbildung 3). Aus dieser Eingabe-Aufforderung kommt man allerdings nur auf die harte Tour per [Strg]+[C] wieder heraus.

Abbildung 3: Das @ vor der Zeichenkette sorgt dafür, dass der Text zwischen den Anführungszeichen Zeichen für Zeichen erhalten bleibt.

Das obligatorische Hallo-Welt-Beispiel besteht in Squirrel aus nur einer Zeile:

print("Hallo Welt!")

In der dynamisch typisierten Sprache lassen sich Variablen einfach nutzen und mit beliebigen Inhalten bestücken:

local a = 3.14;
local a = "Tux liebt Agnes\n";
local a = null;

Strings kann der Squirrel-Anwender mit den aus C bekannten Escape-Zeichen spicken. Das Schlüsselwort »null« leert die Variable und entspricht somit in etwa dem Nullzeiger aus C beziehungsweise »nil« in Lua.

Semikola schließen jeweils einen Ausdruck ab. Wenn er alleine in einer Zeile steht, kann das Semikolon auch entfallen. Squirrel unterscheidet zwischen Groß- und Kleinschreibung, Kommentare stehen zwischen »/*« und »*/« , einer einzelnen Kommentarzeile kann man auch »//« voranstellen.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

comments powered by Disqus

Ausgabe 08/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.