Rakudo *: Zwischenschritt auf dem Weg zu Perl 6

Seite 2: Brücke zwischen Perl 5 und Perl 6

Inhaltsverzeichnis

Aber wozu sich mit Perl 6 beschäftigen? Weil Perl 6 eine interessante Sprache ist. Sie hat aus den Fehlern der Vergangenheit gelernt. Vieles, womit sich Perl-5-Anfänger schwer tun, wie kontextsensitive Sigils, eigenwillige Parameterübergabe und die freie, aber umständlich zu schreibende Objektorientierung sind verschwunden oder eine Nicht-Standard-Option. Die Regex-Syntax wurde gründlich aufgeräumt und gehorcht nun klareren Regeln. "use strict" wurde Standard, und auch die Spezialvariablen sowie die Ausnahmebehandlung zeigen, dass Perl erwachsener geworden ist. Der Befehlssatz erinnert nun weniger an eine Unix-Shell, sondern mehr an ein einfaches, aber doch IT-lastiges Englisch. Die wesentliche Perl-Philosophie haben die Schöpfer aber beibehalten.

Nach der Parole "Es gibt mehr als einen Weg" versucht Perl 6, scheinbare Gegensätze wie eine auf Klassen oder Prototypen basierende Objektorientierung, objektorientierte und funktionale Programmierung, strikte und dynamische Typisierung oder auch positionale und benannte Parameter zu verbinden. Damit verlässt Perl die bekannten Grenzen einer "Skriptsprache", bleibt aber seinem alten Grundsatz treu, das Beste aus verschiedenen Welten zu kombinieren. Bereits Perl 1 war eine effektive Fusion aus C- und Shell-Programmierung. Nebenbei erreicht Perl damit auch volle "Buzzword-Kompatibilität", wo sich selbst Fragen nach klinisch sauberen Makros oder "design by contract" nur mit ja, ja und nochmals ja beantworten lassen.

Frei nach Loriot kann man sagen: Wem es missfiel, dass es in Perl 5 für alles einen Reichtum an Lösungen gibt, wird Perl 6 erst recht nicht mögen. Ebenso dürfte die große Anzahl an Operatoren, die nochmals mit Metaoperatoren kombinierbar sind, nicht Jedermanns Geschmack sein, obwohl sie einen dichten und relativ lesbaren Schreibstil erlaubt. Andererseits gibt es schicke kleine Detaillösungen, wie den Befehl "slurp" (nach dem Modul Slurp, der den Dateiinhalt direkt zuweisen kann und ohne File-Handle auskommt.

Die wirklich großen Gründe, sich Perl 6 anzusehen, selbst wenn man alles bisher genannte aus anderen Sprachen kennt, sind folgende. Was die Bekanntheit von Perl als CGI-Sprache auslöste, waren neben den guten Datenbanktreibern die regulären Ausdrücke, die man vorher höchstens in awk sah und danach als PCRE in fast allen Sprachen Einzug fanden. Da aber das Einlesen und Verarbeiten von HTML oder E-Mails zu komplexen und kaum verständlichen regulären Ausdrücken führt, kann man in Perl 6 eine Regex in viele Regeln teilen und sie zu Grammatiken gruppieren. Das erlaubt einen Umgang wie in lex und yacc, und die Grammatiken sind zudem ableit- und erweiterbar wie andere Objekte auch. Parrots früher beschriebene Parser Werkzeuge arbeiten damit, und das ist der Grund, warum sich eine in Perl 6 geschriebene Sprachdefinition zu einem Parrot-Compiler kompilieren lässt.

Auch der zweite große Grund hat mit den Grammatiken zu tun. In Wirklichkeit ist Perl 6 keine Programmier-, sondern eine Metasprache mit einer anfängerfreundlichen Startform, die sich aber zur Laufzeit beliebig verändern lässt. Ähnlich wie Lisp, nur mit weniger Klammern und mit wesentlich mehr Grundvokabeln. Es besitzt eine vollständige Introspektion und zur Laufzeit lassen sich sowohl neue Operatoren definieren als auch die internen Objekte des Interpreters verändern. Selbst der Parser, der die Quellen einliest, ist eine Grammatik, die sich jederzeit anpassen lässt. Mit wenigen Zeilen ist die Sprache somit nach den Bedürfnissen des Projekts auszurichten, oder eigene kleine Sprachen, sogenannte DSLs (Domain Specific Languages), lassen sich einfach schaffen.

Die regulären Ausdrücke von Perl 6 sind eine solche DSL. Die Technik kann helfen, mit wenig Aufwand inkompatible Teile umfangreicher Softwaresysteme zusammenzuführen. In einer schnell komplexer werdenden Datenwelt mit vielen Softwarealtlasten eine sicherlich wichtige Aufgabe. Ein anderer großer Trend der letzten Jahre ist der zur Parallelität. Es ist möglich, Anwendungen für mehrere Prozessoren oder Kerne zu schreiben, aber kaum eine verbreitete Sprache gestaltet es bisher einfach. Perl 6 kennt mehrere Befehle und Operatoren, bei denen es nicht auf die Reihenfolge der Datenverarbeitung ankommt und deren Funktion der Interpreter von sich aus verteilen kann. Somit sind selbst Programmierer, die die dahinter liegenden Konzepte nicht vollständig verstanden haben, in der Lage, Parallelität zu nutzen, so wie Perl 5 Prinzipien der funktionalen Programmierung wie Closures und Funktionen höherer Ordnung einfach nutzbar machte.

Wer sich tiefer mit der Sprache befassen will, kann das mit Rakudo * gelieferte Buch lesen, und wer deutsch bevorzugt, findet im Netz mehrere gute Tutorials. Ebenfalls im Lieferumfang sind das sonst separat zu installierende Parrot, Brücken zu Perl 5 (Blizkost) und anderen Sprachen (Zavolaj) sowie einige Module für eine Grundversorgung in Sachen Datenbank, Vektorgraphik, HTTP und einiges andere mehr.

Rakudo * ist ein relativ robustes, aber vergleichbar langsames Demonstrationsobjekt eines ambitionierten Langzeitprojekts. Wer sich für Computersprachen interessiert oder selbst erleben will, wohin sich Perl entwickelt, kann daran große Freude haben. Er sollte sich für seine Programme jedoch keine zu hohen Ziele stecken, da zwar Perl 6 ausdrucksstark ist, aber bisher nur wenige Module gängige Aufgaben abnehmen können.

Herbert Breunung
schreibt regelmäßig Artikel über Applikationsentwicklung in Perl und Perl 6 und spricht auf Konferenzen im In- und Ausland. Er führt seit Jahren ein freies Softwareprojekt und ist am Aufbau der Perl-6-Dokumentation beteiligt.

(ane)