© Dmitri Lechtchinski, commons.wikimedia.org
Skriptsprache Kaya
Go Web
von Tim Schürmann
Erschienen im Linux-Magazin
2007/10
Wirft man C und Haskell in einen Mixer, kommt so etwas wie Kaya heraus. Die noch recht junge Skriptsprache besitzt zwar eine gewöhnungsbedürftige Syntax, bringt dafür aber praktische Konzepte mit, zum Beispiel für die Webprogrammierung.
Die japanische Nusseibe, Torreya Nucifera oder auch Kaya genannt, wächst im Süden Japans langsam vor sich hin. Ihr extrem hartes Holz dient unter anderem zur Herstellung von Go-Spielbrettern, an denen Edwin Brady und seine Kollegen von der Durham University Computing Society gerne ihre Freizeit verbringen, überdies tauchen Bäume häufig als abstrakter Datentyp auf. Beides zusammen brachte der von ihnen entwickelten Skriptsprache Kaya schließlich ihren Namen ein. Außerdem, so die Meinung der Programmierer, waren alle anderen guten Namen bereits vergeben.
Das Ergebnis hat nicht mehr viel mit dem schlichten Prinzip des Go-Spiels gemein, sondern überrascht mit ungewöhnlichen Konzepten und pfiffigen Details. Beispielsweise der für Skriptsprachen untypische Übersetzungsvorgang. Er fängt Syntaxfehler bereits vor der Ausführung ab, was wiederum Tests erleichtert. Die Syntax ist auch gleich der nächste auffällige Punkt: In Zeiten der Objektorientierung geht Kaya einen Schritt zurück und bedient sich lieber bei der funktionalen Programmierung.
Zugleich wirft Kaya mit umfangreichen Bibliotheken nur so um sich. Neben dem Zugriff auf Datenbanken erlauben sie die Manipulation von Bildern oder eine unkomplizierte Verschlüsselung von wichtigen Daten. Ganz besonders glänzen jedoch die eingebauten Netzwerkfunktionen. Sie gestatten die schnelle Entwicklung von kleinen oder mittelgroßen Webanwendungen. Kaya übernimmt dabei den üblichen Kleinkram wie Session-Management (von Kaya als Zustandsmanagement bezeichnet), den Aufbau von Webseiten oder die Verarbeitung von HTML-Formularen.
Durch entsprechende Sicherheitsmechanismen minimiert die Skriptsprache die Risiken von Cross-Site-Scripting und eingeschmuggeltem Code (Remote Code Execution). Ganz nebenbei bietet Kaya den üblichen Komfort gewohnter Skriptsprachen, etwa Garbage Collection, eine umfangreiche Ausnahmebehandlung (Exception Handling) und die Möglichkeit, externe C-Bibliotheken einzubinden. Wer kompilierte Skripte gar nicht mag, darf Kaya dank des mitgelieferten Interpreters auch wie jede andere Skriptsprache nutzen.
Auf den Projektseiten [1] stellen die Entwickler eine kostenlos nutzbare Referenzimplementierung unter der GPL-Lizenz zur Verfügung. Fertige Pakete gibt es für Linux, Mac OS X und Windows. Damit beweist Kaya seine Plattformunabhängigkeit - die nur voraussetzt, dass auf dem Zielsystem alle von Kaya genutzten Werkzeuge und Bibliotheken bereitstehen. Welche das sind, klärt der Kasten "Kaya-Installation".
|
Der Kaya-Compiler benötigt einige Hilfskrücken. Im Einzelnen sind dies:
- Die GNU-Tools Make und G++
-
Der Glasgow Haskell Compiler in der Version 5.0.4 oder
später [2]
- Der Happy Parser Generator [3]
-
Die folgenden Bibliotheken einschließlich ihrer
Entwicklungspakete: Libgc, Zlib, Libgcrypt, Libpcre, Libgnutls
Da der Glasgow Haskell Compiler selbst in Haskell geschrieben ist, übersetzt er sich witzigerweise selbst. Um nicht in ein Abhängigkeitsdilemma zu geraten, sollte man lieber zu den fertigen Paketen von [2] greifen.
Die später in den Skripten benutzten Bibliotheken benötigen unter Umständen noch weitere Pakete. Welche das im Einzelnen sind, verrät ihre API-Referenz unter [4].
Der bekannte Dreisatz »./configure; make; make install« erstellt die Kaya-Entwicklungsumgebung. Debian- und Ubuntu-Nutzer installieren hingegen einfach das Paket »kaya«.
|
Hallo, Kaya
Am Anfang steht das Hallo-Welt-Programm in Listing 1. Der Code dürfte C-Programmieren vertraut vorkommen: Es gibt eine Funktion »main()«, die grundsätzlich immer als Erste nach dem Programmstart ausgeführt wird. Anweisungsblöcke stehen in geschweiften Klammern, während Kommentare mit »//« beginnen oder in »/* ... */« eingefasst sind. »putStrLn()« gehört zur Standardbibliothek und schickt den übergebenen String zur Standardausgabe.
01 program hallowelt;
02
03 Void main() {
04 // Dies ist ein Kommentar
05 putStrLn("Hallo Welt!");
06 }
|
Die erste Zeile »program hallowelt« weist den Kaya-Compiler dazu an, aus dem Skript ein normales Programm mit dem Namen »hallowelt« zu erstellen. Die Übersetzung stößt auf der Kommandozeile »kayac hallowelt.k« an.
Im Gegensatz zu vielen anderen Skriptsprachen muss in Kaya der Typ einer Variablen bereits bei der Übersetzung bekannt sein (statische Typisierung). Als Hilfestellung gibt es die so genannte Typableitung (Type Inference). Dabei versucht der Compiler den Typ einer Variablen zu erschließen. Der Programmierer muss Typen somit nur dann angeben, wenn es wirklich notwendig ist. Ein Beispiel dafür zeigt Listing 2.
01 hallo = "Hallo";
02 welt = "Welt!";
03 hallowelt = hallo + welt;
04 putStrLn(hallowelt);
|
Kaya kennt die üblichen Basistypen wie Ganzzahlen (»Int«), Wahrheitswerte (»Bool«) oder Gleitkommazahlen (»Float«). Gemäß den Kaya-Konventionen beginnen sie immer mit einem Großbuchstaben. Typumwandlungen geschehen recht untypisch in runden Klammern, etwa »textdreissig = String(30);«. Die Dimensionen von Arrays können wegfallen, man verwendet sie einfach je nach Bedarf:
a[0] = 5;
a[1] = a[0] + 10; // a[1] = 15
Dazu gesellen sich ein paar häufig verwendete Kurzschreibweisen. Beispielsweise führen
a = [1,2,3,4,5];
b = [1..5];
jeweils zu einem Array mit fünf Einträgen, das aufsteigend die Zahlen von 1 bis 5 enthält.
Loopings
Besonders nützlich sind diese Abkürzungen in »for«-Schleifen:
for i in [1..x] {
putStrLn(String(i));
}
Kryptisch wird es jedoch, sobald ein Array als Argument dienen soll:
Void printArray([Int] zahlen) {
for i in zahlen putStrLn(String(i));
}
Die eckigen Klammern um das »Int« weisen »zahlen« als eindimensionales Array aus. Bei mehrdimensionalen Arrays sind entsprechend mehr Klammern erforderlich, beispielsweise »[[[Int]]]« für ein dreidimensionales Array. Alternativ dürfen C-Programmierer ihre For-Schleifen unter Kaya weiterhin nutzen. Gleiches gilt für »if« und »while«.
Als Beispiel berechnet Listing 3 den größten gemeinsamen Teiler und zeigt nebenbei, dass die Funkionsdeklaration wie in C aussieht. Wenn eine Funktion keine Argumente erhält, darf man bei der Definition die leeren runden Klammern einfach weglassen:
Float pi { return 3.14; }
Das Gleiche gilt für den Aufruf von »putStrLn (String(pi))«.
01 Int ggT(Int a, Int b){
02 if (b == 0) return a;
03 else if (a > b) return ggT(a-b, b);
04 else return ggT(a, b-a);
05 }
|
| Whitepaper |
|
Usage Landscape Enterprise Open Source Data Integration
Die Nachfrage nach Datenintegrationslösungen für Unternehmen ist zunehmend gestiegen und vor allem das Interesse an Open Source Technologien wird immer größer. Doch wie und von wem werden Open Source Datenintegrationslösungen genutzt und welches Nutzungsverhalten lässt sich daraus ableiten? Das vorliegende White Paper präsentiert die Erfahrungswerte von über 1000 Open Source Nutzern und liefert fundierte Antworten auf diese Fragen.
Download PDF (Registrierung erforderlich)
|
|
Daten Migration - Eine Publikation von Bloor Research
Datenmigrationsprojekte überschreiten häufig das Budget, neigen zu Verzögerung und werden unter Umständen komplett abgebrochen. Bloor Research ist eines der weltweit führenden IT-Forschungs-, Analyse- und Beratungsunternehmen und wird in dem vorliegenden White Paper die wichtigsten Aspekte dieser Problematik näher beleuchten. Ferner werden praktische Empfehlungen für erfolgreiche Migrationsprojekte gegeben, die Sie auf Ihr nächstes Projekt übertragen 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.
|