# Raku (Programmiersprache)

Raku ist eine Programmiersprache aus der Perl-Familie. Bis Oktober 2019 war sie unter dem Namen Perl 6 bekannt. Raku integriert viele Konzepte bestehender Programmiersprachen und enthält auch einige Neuerungen. Kompatibilität mit Perl 5 war kein Ziel, es gibt aber Möglichkeiten der Interoperabilität. Der Designprozess für Perl 6 begann im Jahr 2000.

## Geschichte

Am 19. Juli 2000 wurde auf der TPC 4 unter dem damals verwendeten Namen Perl 6 als die Version der Perl-Gemeinschaft angekündigt. Nachdem Larry Wall 361 Vorschläge auswertete und thematisch sortierte, schrieb er je Thema einen Überblick seiner Vorstellungen (englisch Apocalypse genannt), der nach Diskussionen in den Mailinglisten von Damian Conway zu einer detaillierten Exegese formuliert wurde. Darauf folgend wurde die Sprache in kleinerem Kreis weiterentwickelt, wobei die Impulse vor allem von den Implementatoren und Benutzern ausgingen und der aktuelle Stand dabei in wesentlich knapperen Synopsen festgehalten wurde. Diese wurden ab 2009 von einer regulären Dokumentation abgelöst und die Rolle der Spezifikation übernahm eine Testsuite, die auch der Überwachung des Entwicklungsstandes der einzelnen Implementationen dient.
Die Sprache wurde entrümpelt und mit neuen Fähigkeiten ausgestattet. Unter anderem wurde die Objektorientierung komplett neu gestaltet und lehnt sich jetzt stärker an das an, was man in anderen Programmiersprachen wie Scala, Java, Ruby oder C# gewohnt ist. Es wurden auch funktionale Programmierelemente wie Hyperoperatoren und Junctions eingeführt. Makros lösen die Sourcefilter ab und die neu systematisierten und erweiterten regulären Ausdrücke lassen sich zu ableitbaren Grammatiken zusammenfassen. Sie erlauben es, den Compiler zu verändern oder um DSL zu erweitern, und werden mit dem smart match-Operator ~~ angewendet, der je nach Kontext verschiedene Arten von Daten, Datenstrukturen und auch Inhalte von Symboltabellen vergleichen kann. Der Bereich der asynchronen und parallelen Programmierung wird derzeit als letzter spezifiziert.
Als Interpreter für die damals Perl 6 genannte Sprache wurde ursprünglich (seit 2001) eine neue registerbasierte virtuelle Maschine namens Parrot entwickelt. Sie sollte viele Sprachen (auch gemischt) ausführen und ist für dynamische Sprachen wie Perl, Python oder Ruby optimiert. Parrot wurde von Dan Sugalski und Chip Salzenberg entworfen und später von Jonathan Leto und Patrick Michaud betreut, wobei letzterer für die Parrot Compiler Tools (PCT) zuständig war, einem Satz Werkzeuge für die Erstellung von Parsern und Compilern. Der auf Parrot und PCT basierende Perl-6-Compiler nennt sich Rakudo. Unter der Führung von Jonathan Worthington bekam Rakudo einen in NQP (einer sehr einfachen Perlvariante) programmierten Unterbau, der es erlaubt, den Compiler auf die JVM (mit kleinen Inkompatibilitäten) und in Zukunft auf das .Net-Framework zu portieren, sowie auf Moar, eine ausschließlich auf Rakudo ausgerichtete VM. Seit dem 29. Juli 2010 erscheint monatlich für „frühe Nutzer“ eine "Rakudo *"-Distribution mit Dokumentation und Bibliotheken sowie wahlweise Parrot oder (seit August 2014) Moar. Benutzenswerte Bibliotheken sind gelistet und werden mit zef installiert.
Audrey Tang leitete seit Anfang Februar 2005 die Entwicklung des alternativen Perl-6-Compilers namens Pugs in der Sprache Haskell. Für mehrere Jahre war Pugs der vollständigste, aber auch langsamste Perl-6-Compiler und ermöglichte es als erster, zahlreiche Details der Sprache vorzuführen, zu testen und nachzubearbeiten. Die umfangreiche und in Perl 6 geschriebene Perl-6-Testsuite entstammt dem Pugs-Quellcode. Neben Ablegerprojekten wie elf und viv entstanden zahlreiche weitere Interpreter, Compiler- und Parser-Projekte mit unterschiedlichen Schwerpunkten: SMOP (Meta-OOP-runloop), Niecza (schneller Compiler für .NET), Sprixel, Perlito (kompiliert u. a. zu im Browser ausführbarem JavaScript) oder Yapsi, die zwar wertvolle Erkenntnisse, aber wenig praktischen Nutzen brachten. Einzig Rakudo, Perlito und gimme5 werden heute noch fortgesetzt. Letzteres übersetzt eine maschinell lesbare Definition der Perl 6-Syntax (STD genannt) nach Perl 5: Jede Software, die diese Regeln einhält, darf sich offiziell Perl 6 nennen. Perl 6, am 25. Dezember 2015 offiziell als Version «Коледа» (auch englisch „Christmas“) veröffentlicht, ist als „Schwestersprache“ ausgerufen, ohne die Absicht, Perl 5 mittelfristig zu ersetzen.
Da der Name „Perl 6“ teils als irreführend betrachtet wurde, hat Larry Wall den Vorschlag angenommen, die alternativen Namen „Raku“ und „Raku Perl 6“ einzuführen.