Perl 6: Ja, ist denn schon Weihnachten?!

Lange erwartet, viel polemisiert, von vielen schon abgeschrieben, von anderen mit Nostalgie oder Hoffnung verfolgt und von einigen wenigen jetzt endlich implementiert: Mit Rakudo Star ist das erste Perl-6-Release erschienen.

In Pocket speichern vorlesen Druckansicht 19 Kommentare lesen
Lesezeit: 13 Min.
Von
  • Susanne Schmidt
  • Dr. Oliver Diedrich
Inhaltsverzeichnis

Böse Zungen lästern gern über die Dekade, die "das neue, bessere, schönere Perl" jetzt in der Mache ist. Aber Patrick Michaud arbeitet schon seit geraumer Zeit an Rakudo, einer Implementierung der Perl-6-Spezifikation, die auf der Parrot Virtual Machine basiert. Mit Rakudo Star hat Michaud jetzt ein "benutzbares Perl 6" veröffentlicht – nach jahrelangem Witzeln, Perl 6 erscheine zu Weihnachten, man wisse nur noch nicht, in welchem Jahr.

Verglichen mit Perl 5 ist Rakudo ein neues, ein anderes Perl; deswegen wird es inzwischen als "neues Mitglied der Perl-Familie" bezeichnet und gilt mehr oder weniger als eigenständige Sprache (lesen Sie dazu auch den Kommentar Endlich Weihnachten).

Für den unschuldigen Außenstehenden sieht Rakudo garantiert noch aus wie ein Perl – schon allein dank der Menge an Sigils und Sonderzeichen, für die Perl berüchtigt ist. Sigils bezeichnen in Rakudo konsistenter ihren Inhalt: % für Hashes, @ für Arrays, $ für Sklare – wie man es aus Perl 5 kennt. Auch die allseits bekannten Spezialvariablen behalten ihre -gils – die meisten haben jetzt sogar Twigils: Aus @INC ist jetzt @*INC geworden.

Dafür wurde unter den weniger lesbaren Spezialvariablen aufgeräumt: Wer use English kennt, wird sich mit $*PID schnell anfreunden können. Auch die altbekannten Funktionen (beziehungsweise Methoden) sind alle noch da: shift, unshift, ord, sort, keys, open, pack – hier gibt es wenig Überraschungen hinsichtlich Existenz und Gebrauch. Neu sind trim und pick und dazu einige Funktionen, die in Perl 5 in List::Utils angesiedelt waren – zip beispielsweise oder any und all.

Viele Entwickler dürften sich aber mehr über benannte Parameter von Funktion und Methoden freuen: Wer @_ nie leiden konnte, kann jetzt einfach

sub mysub ($param, @somearray) { .... }

schreiben. Funktionen heißen auch weiterhin sub, Rakudo versteht aber auch Methoden, weil die Sprache in einem "everything is an object"-Modus benutzt werden kann (aber nicht muss). So ist

method mymethod ($param, @somearray) { .... }

das objektorientierte Äquivalent zu obiger Funktion.

Methoden gehören natürlich zu einer Klasse, verstehen weiterhin $self und enthalten alle Fähigkeiten, die man heute von einer objektorientierten Sprache erwarten kann. In bester Perl-Tradition kommt natürlich einiges an Vereinfachungen, Abkürzungen, mehr Flexibilität und syntaktischem Zucker hinzu: Attribute, die in einer Klasse deklariert werden (has $.name, has $.id, is rw), kommen automatisch mit get/set – das muss man nicht mehr selbst deklarieren – genauso, wie new als Standardkonstruktor jetzt out of the box mitgeliefert wird.

Freunde des strengeren Programmierstils dürfen sich dazu noch über Typen freuen: Rakudo kennt ab sofort Typen wie Str, Num, Int, Date, Float oder den generischen Type Any. Jenseits der mitgelieferten Typen kann man (natürlich) auch eigene Subtypen mit

subset Email of Str where { ... }

definieren und dann einfach als

has Email $.email is rw;

benutzen.

Für weniger anspruchsvolle Entwickler, die einfach nur ein schöneres, netteres Perl wollten, ist der Fall damit im Grunde erledigt: Rakudo hat lang erwartete Weiterentwicklungen und kennt jetzt OO und Typen:

class SomeUser {
has Int $.id is rw;
has $.username is rw;
has @.messages;
  method validate_username() {
say "User exists!" if $.username.lc ~~ /ottohorstmeier/;
}
  method show_messages() {
for @.messages -> $message {
$message.say;
}
}
}

Auf den ersten Blick sieht Rakudo etwas anders aus: Der -> aus Perl 5 etwa ist jetzt wie in vielen anderen Sprachen zu einem Punkt geworden, während in Perl 6 -> dazu dient, in for-Schleifen eine Variable für den Schleifenkörper zuzuweisen. Aber der Gebrauch von Klassen und Methoden und der Aufruf der Builtin-Funktionen/-Methoden ist optional – wer weiter einfach typische Perl-Skripte schreiben will, kann genauso gut

lc($username);

oder

say "Something happened";

schreiben und seinen Code in Module sortieren. Damit erlaubt auch Rakudo das Perl-typische Scripting, den schnellen Einzeiler (perl6 -e) zum Wegwerfen – oder eben aufgeräumte OO-Programme.