Top-Fragen
Zeitleiste
Chat
Kontext

Raku (Programmiersprache)

Programmiersprache aus der Perl-Familie Aus Wikipedia, der freien Enzyklopädie

Raku (Programmiersprache)
Remove ads

Raku, früher als Perl 6 bekannt, ist eine Programmiersprache aus der Perl-Familie. Raku integriert Konzepte vieler bestehender Programmiersprachen und enthält auch einige Neuerungen. Ein Merkmal ist die expressive, große Freiheiten bietende Syntax. Kompatibilität mit Perl 5 war kein Ziel, es gibt aber Möglichkeiten der Interoperabilität. Der Designprozess begann im Jahr 2000, die erste stabile Version erschien 2015. Wie Perl auch ist Raku Freie Software.[1]

Schnelle Fakten Basisdaten ...
Remove ads

Geschichte

Zusammenfassung
Kontext

Am 19. Juli 2000 kündigte Larry Wall auf der vierten Perl Conference Perl 6 als neue Version der Sprache an.[4] Anders als Perl 5 solle sie gemeinschaftlich gestaltet werden und zum ersten und potenziell einzigen Mal, zwecks Entfernung „historischer Warzen“, in manchen Belangen nicht rückwärtskompatibel sein. Auch die Implementierung solle radikal neu gedacht werden.

Nachdem Wall 361[5] 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 knappen Synopsen (vgl. Synoptische Evangelien) 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.[6] Unter anderem wurde die Objektorientierung komplett neu gestaltet und ähnelt nun stärker Sprachen wie Scala, Java, Ruby oder C#. 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. Zuletzt wurde der Bereich der asynchronen und parallelen Programmierung spezifiziert.

Als Interpreter 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, einen Satz Werkzeuge für die Erstellung von Parsern und Compilern. Der auf Parrot und PCT basierende Perl-6- bzw. Raku-Compiler heißt 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 Star"-Distribution mit Dokumentation, Bibliotheken und (Stand 2025) Moar. Benutzenswerte Bibliotheken sind auf Raku Land[7] 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,[8] ist als „Schwestersprache“ ausgerufen, ohne die Absicht, Perl 5 mittelfristig zu ersetzen.

Da der Name „Perl 6“ teils als verwirrend betrachtet wurde, hat Larry Wall den Vorschlag angenommen, die alternativen Namen „Raku“ und „Raku Perl 6“ einzuführen.[9]

Remove ads

Merkmale

Zusammenfassung
Kontext

Prinzipien

Mehrere Wege

Das Perl-Motto „There is more than one way to do it“ wird auch für Raku verwendet.[10][11] Auf Deutsch bedeutet es: „Es gibt mehr als einen Weg, etwas zu tun“. Meist wird es zu „TIMTOWTDI“ abgekürzt und dies als „TimToady“ ausgesprochen.

Technische Merkmale

Mehrere Paradigmen

Im Rahmen des insgesamt prozeduralen Code-Flusses ist auch objekt-orientierte und funktionale Programmierung möglich. Hierfür gibt es eine große Zahl nativer, aufeinander abgestimmter Sprachfunktionen.[12]

Typensystem und Multiple Dispatch

Das native Typensystem[13] ist einer der Kernunterschiede von Raku gegenüber Perl. Die explizite Angabe von Typen ist zwar über weite Strecken optional, ermöglicht dann aber neben sichererem Code auch eine Vielzahl nützlicher Sprachfunktionen. Auf das Typensystem aufbauend stellt Raku etwa mächtige Multiple-Dispatch-Funktionalitäten bereit. Hierbei kann nicht nur nach Typ der Eingabeparameter unterschieden werden, sondern können mittels where-Ausdrücken auch die Werte der Parameter betrachtet werden, um die Entscheidung zu treffen, welche konkrete Methode oder Subroutine (candidate) schließlich ausgeführt wird. In der englischsprachigen Wikipedia gibt es hierfür unter Multiple dispatch ein umfangreiches Beispiel.

Reguläre Ausdrücke

Nach Angaben der Projekt-Website hat Raku „Die mächtigste Unicode-verstehende Regular-Expression-Engine, die verfügbar ist, insbesondere für komplexe Textverarbeitung“. Besonders im Umgang mit verschiedensprachigen Inhalten, etwa bei der Handhabung von Graphemen und Diakritika, soll sie glänzen.[14]

Weitreichende Unicode-Unterstützung

Raku ist auf starke native Unterstützung von Unicode in Ein- und Ausgabetexten sowie im Programmcode selbst ausgelegt.[15] So werden Eingabe-Zeichenketten, die gemäß Unicode-Standard äquivalent sind, von Raku standardmäßig auch identisch behandelt. Dies geschieht, indem sie intern alle auf die Normalization Form C (NFC) des Unicode-Standards gebracht werden. Demgemäß geschehen auch alle Ausgaben von Raku in dieser Normalform. Nur Dateinamen sind hiervon ausgenommen; sie werden durchgehend als UTF8-C8 codiert und damit genau so, wie sie auf der Festplatte stehen. Optional können auch alle anderen Zeichenketten auf diese Weise behandelt werden.[16]

Remove ads

Syntax

Mathematische Operatoren

Zusätzlich zu den üblichen Operatoren +, -, *, / für die vier Grundrechenarten, sowie ** für Potenzierung und % für den Divisionsrest, unterstützt Raku noch den Operator %%. Dieser ergibt dann, wenn die linke Zahl durch die rechte teilbar ist, True und ansonsten False; beispielsweise evaluiert 15 %% 3 zu True. Zur Ganzzahldivision gibt es den Operator div; beispielsweise ergibt 9 div 4 den Wert 2.

Einzelnachweise

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads