Login
Login-Name Passwort


 
Newsletter
Werbung

Mi, 27. April 2011, 15:00

Eine Einführung in die Programmiersprache Pike

So manch ein Programmierer, welcher C/C++ oder Java benutzt, kommt irgendwann in die Situation, eine interpretierte Programmiersprache benutzen zu wollen, weil z.B. auf dem Zielsystem kein Compiler zur Verfügung steht. Der Mensch ist ein faules Wesen und nicht jeder ist gewillt, sich eine komplett neue Syntax anzueignen. Eine interpretierte Sprache, die zumindest von den Grundlagen her C sehr ähnlich ist und außerdem mit der Ausführgeschwindigkeit von etablierten Programmiersprachen wie Python mithalten kann, ist Pike.

Historisches

Pike hieß in der Mitte der 90er, dem weiß-grauen PC-Zeitalter, einmal µLPC und wurde von Fredrik Hübinette als Neuimplementierung der Sprache LPC4 entworfen, da er mit der kommerziellen Nutzbarkeit der Lizenz derselben Implementierung unzufrieden war. Konsequenterweise steht Pike unter den Bedingungen der GPL, der MPL und der LGPL zur Verfügung. LPC war eine Programmiersprache zum Entwickeln sog. Multiuser Dungeons, dennoch hat das heutige Pike syntaktisch noch sehr viel mit LPC gemein; man könnte also sagen, die Syntax war damals schon sehr ausgereift, wenn man den Einsatzzweck bedenkt.

Früher wurde Pike von Roxen entwickelt und gewartet, heutzutage hat die Universität Linköping diese Aufgabe übernommen.

In Pike geschriebene Software

Der Nutzerkreis ist ziemlich klein, jedoch existent: Pike wird von Roxen Internet Software als Basis ihres CMS benutzt.

Ein Fork eines frühen Roxen-Servers ist das quelloffene Projekt Caudium, welches das XML-basierte Format RXML zur Benutzung als Vorlage beibehalten hat. Pike kann hierbei, ähnlich wie das bei PHP möglich ist, serverseitig direkt in den Inhalt eingebunden werden. Auch PHP kann in Caudium benutzt werden.

Darauf baut openSTeam, eine Software zur Verwaltung virtueller Wissensräume, auf.

Die Firma Opera verwendet Pike, um Webseiten für mobile Webbrowser herunterzurechnen, was zeigt, dass Pike auf Performance ausgerichtet entwickelt worden ist.

Das erste Programm

So, genügend hintergründige Fakten vermittelt, es wird Zeit für ein erstes Beispielprogramm. Und weil es in der Welt der Programmiersprachen so üblich ist, eine Einleitung mit einen Code-Beispiel zu beginnen, welches einen kurzen Text ausgibt, beginnt auch diese Einleitung auf diese Weise:

int main()
{
    write("Hallo Leser!\n");
    return 0;
}

Vielen Lesern dürfte dies recht vertraut vorkommen, denn dieses kleine Beispiel ähnelt dem »Hello World!« von C.

Bevor man diesen Schnipsel eines Quelltextes in den Texteditor kopiert, als hello.pike abspeichert und ausführen kann, benötigt man natürlich den Interpreter.

Installation

Es gibt mehrere Wege, an Pike zu kommen. Der einfachste ist sicherlich, Pike aus der Paketverwaltung seiner Wahl zu installieren. Da Pike aber relativ unbekannt ist, ist diese Möglichkeit nicht in jedem Falle gegeben und Pike steht häufig nicht oder nur sehr veraltet als Paket zur Verfügung. Dann muss man Pike von der offiziellen Homepage herunterladen, wo man nicht nur verschiedene Versionen in Form von Binärcode oder Quelltext, sondern auch das alte µLPC herunterladen kann. Das ist zugegebenermaßen nur fortgeschrittenen Nutzern zu empfehlen. Wenn es eine Version ab 7.6 im Paketsystem gibt, sollte man diese installieren.

Dateikonventionen

Dateien, die Quelltext in Pike enthalten, enden konventionell auf .pike. Natürlich kann man sich die Endung aussuchen. Das oben gezeigte Beispiel wird ausgeführt, in dem man in die Konsole folgendes eingibt:

$ pike hello.pike

Um eine Datei mit Quelltext direkt – ohne die Angabe des Interpreters – auszuführen, also mit ./hello.pike, muss man im Texteditor in der entsprechenden Datei #!/usr/bin/env pike in die erste Zeile schreiben und der Datei dann in der Konsole mit chmod +x hello.pike die benötigten Rechte zum Ausführen übertragen.

Mit dem Rautezeichen lassen sich in Pike übrigens Makros ähnlich wie in C definieren, welche von einem Präprozessor vor dem eigentlichen Ausführen einer Quelldatei abgearbeitet werden.

Grundlagen: Typen und Funktionen

Wie einige Leser bestimmt schon gemerkt haben, ist die Funktion main() der Anfangspunkt jedes Programms.

int main()
{
    return 0;
    //das Grundgeruest der Funktion
}

Hier ist zu sehen, dass Kommentieren auf dieselbe Art und Weise geschieht wie in C:

//sog. C++ Kommentar, einzeilig
/*Mehrzeiliger Kommentar,
oft die ordentlichere Loesung*/

Ebenfalls ist zu sehen, dass bei Funktionen der Rückgabetyp angegeben werden muss, in diesem Fall int, also eine Ganzzahl zwischen -2147483648 und 2147483647.

Hat eine Funktion keinen Rückgabetyp, schreibt man void davor. Man kann auch die Funktion main() mit dem Rückgabetyp void implementieren:

void main()
{
    /*das Grundgeruest der Funktion main()
    ohne Rueckgabe eines Wertes*/
}

Auch wenn man einer Funktion eine Variable zur Verarbeitung gibt, muss man den Typ angeben:

int pluszwei(int zahl) {
    return zahl+2;
}

Auch Variablen werden deklariert, indem man den Typ mit angibt:

int i = 42;

Zur weiteren Benutzung der Variable muss der Typ nicht mehr erwähnt werden.

Neben int gibt es noch zwei weitere elementare Variablentypen, string und float. Letzteres ist für Fließkommazahlen und ist bis zur neunten Nachkommastelle genau. In Pike dient nach englischer Schreibweise ein Punkt als Komma.

float f = 1.23;

Der Datentyp string ist für Zeichenketten.

string s = "Hallo Welt.";

Mehrere Zeichenketten lassen sich mit einem Plus-Zeichen zusammenfügen.

string a = "Hallo";
string b = "Welt!";
//c ist "Hallo Welt!"
string c = a+" "+b;

Einen Teil einer Zeichenkette erhält man folgendermaßen:

string s = "abc";
//p enthaelt "b"
string p = s[1..1];
//c enthaelt "abc"
string c = s[0..2];

Achtung: Der Ausdruck s[1] liefert nicht wie erwartet »b« zurück, sondern die ASCII-Nummer in Form eines Integer-Wertes.

Ein weiterer, aber beherrschbarer Stolperstein ist die Unterstützung von Unicode. Um einer Stringvariable in einem UTF-8-fähigen Editor sauber Zeichen wie »Ü« oder »é« zuzuweisen, benötigt man die Funktion utf8_to_string(), bzw. ihr UTF-16-Pendant unicode_to_string():

string s = utf8_to_string("");

Einfacher ist es jedoch, dem Präprozessor mit #charset UTF-8 mitzuteilen, dass die Quelltexte in UTF-8 kodiert sind.

Um den String dann auch wieder in einem UTF-8-fähigen Terminal auszugeben, braucht man die Unkehrfunktion string_to_utf8() oder string_to_unicode():

write (string_to_utf8(s));

Ohne diese Vorkehrung werden die Zeichen in der Kodierung ISO 8859-1 ausgegeben.

Kommentare (Insgesamt: 6 || Alle anzeigen || Kommentieren )
gibt doch C-Interpreter? (Kanuba, Mi, 4. Mai 2011)
Re[4]: Warum? (sauer2, Sa, 30. April 2011)
Re[3]: Warum? (eMBee, Fr, 29. April 2011)
Re[2]: Warum? (sauer2, Do, 28. April 2011)
Re: Warum? (eMBee, Do, 28. April 2011)
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung