Übersicht || 0: Vorwort | 1: Geschichte | 2: Theorie | 3:Var | 4:Op | 5:IO | 6:{} | 7:Sub | 8:OOP | 9:Rx || A:Index | B:Tab | C:Tour | D:Delta | E:Links

Larry Wall: Perl 5 was my rewrite of Perl. I want Perl 6 to be the community's rewrite of Perl and of the community.

Vorgeschichte

Perl macht Programmierer zu glücklichen Menschen, weil es versucht, alles Interessante in sich zu vereinen und dabei frei und einfach benutzbar zu bleiben (meistens jedenfalls).

Was heute an Perl 5 etwas stört, sind seine manchal unnötigen Eigenheiten, Syntax, der man anmerkt, dass sie nachträglich zugefügt wurden oder für manche seine sehr eindeutigen UNIX-Wurzeln. Die Objektorientierung in Perl ist sehr mächtig, gibt aber keinen einfachen Weg vor, was viele verwirrt und Dinge wie globale Variablen, die früher in kleinen Scripten sehr praktisch waren, können heute bei grossen Programmen sehr unangenehm werden. Das Grundproblem liegt aber nicht in den Einzelheiten, mit denen die Benutzer meist gut zurechtkommen und die "nur" den Anfängern Probleme machen. Der entscheidende Punkt ist die Gesamtsyntax, die schon sehr weit ausgereizt ist und kaum noch auf eine elegante Art geändert oder erweitert werden kann. Das gleiche gilt die für die Innereien des Perl-Interpreters, der nur noch von einer handvoll Spezialisten gewartet werden kann und für das XS-System, das es eigentlich einfach machen soll, vorhandene Bibliotheken von Perl aus zu nutzen.

Deshalb wird es Zeit, gründlich aufzuräumen und sich weiterzuentwickeln, damit auch in Zukunft Perl alle interessanten Ideen in sich vereint und einfach und frei zu benutzen ist. Dabei gibt es absolut keinen Stress, weil kein Chef die Deadline-Keule schwingt, und es Perl 5 und dem CPAN gerade besser geht als jeh zuvor.

Perl 6

Im 19. Juli 2000, auf der TPC 4 (The Perl Conference), kündigte Larry Wall Perl 6 als Version der Perl-Gemeinschaft an. Alle waren eingeladen, ihre Vorschläge (RFC) einzusenden, die dann sortiert und beantwortet wurden. Daraus enstanden themenbezogene Zusammenfassungen mit Larrys Entscheidungen (Apokalypsen), die nach erneuter Beratung in den Mailinglisten von Damian Conway zu detaillierteren Exegesen formuliert wurden. Diese wurden aber als "historische Dokumente eingefroren" und den heutigen Stand kann man den möglichst knapp gehaltenen Synopsen entnehmen, die eine Kurzreferenz der Änderungen zu Perl 5 sind. Die Sprache entwickelt sich wöchentlich weiter, meist nach einer Diskussion auf der perl6language-Liste oder dem #perl6 Channel auf freenode. Auch wenn einzelne Änderung eine Lawine von Folgeänderungen auslösen können, nähert sich dennoch die Sprache asymtotisch die Ideal des Design Teams (auch @larry genannt). Daher ist zur Zeit schwer abzuschätzen wann fertig genug für eine Version 6.0 sein wird.

Parrot

2001 erlaubte sich Simon Cozens den Aprilscherz, Parrot als Vereinigung von Perl und Python anzukündigen. Der Scherz kam gut an, und der Name blieb als Bezeichnung für den 2002 gestarteten, kommenden Perl 6-Interpreter, den Dan Sugalski und Chip Salzenberg so entwarfen, dass er auch andere Sprachen wie Python oder Ruby ausführt und man die Sprachen auch mischen kann. Seit seiner Entstehung geht dieses Unternehmen ständig voran und wird soweit wie möglich von der Perl Foundation unterstützt. Parser für Python, Tcl (Partcl), Perl1 (Punie) und andere sind in Entwicklung aber nicht sehr weit ausgereift. Weitere Probleme sind sicher der Austieg von Dan Sugalski, an dessen Stelle Chip trat, der selber gerichtliche Probleme hat, und die Tatsache, dass einige Teile von Parrot mehrfache Rewrites erfuhren. Andererseits sind die Fähigkeiten von Parrot bereits umfassend, der PIR (Parrot Hochassembler) Syntax in weiten Teilen ausgereift, die Benchmarks vielversprechend und Spenden für den Releasemanager (Pumpking) Leo Tötsch für die nächste Zeit sicher.

Ponie

2003 rief Larry auf der OSCON das Projekt Ponie aus, daß den Wechsel von Perl 5 zu Perl 6 wesentlich sanfter machen sollte. Der Name, der sich auf einen running gag der London.pm bezieht ("i want a pony" steht für spontane, schwer einlösbare Wünsche), sollte einen Parrot-Parser bezeichnen, mit dem Perl 5 auch auf Parrot ausführbar sein sollte, daher PONIE als Abkürzung von "Perl on new Interpreter Engine". Leider war Ponie die meisste Zeit ein 2-Mann-Projekt. Der Anfang damit betraute Artur Bergmann und später auch Nicholas Clark konnten im Laufe ihrer heroische Aufgabe, eine Bug-to-Bug Kopie von Perl 5 anzufertigen, viele Verbesserungen in den Perl 5-interpreter einfliessen lassen, doch mangels Beteilugung weitere Programmierer wurde das Projekt offiziell im August 2006 für beendet erklärt.

Parrot Compiler Tools

Dies ist der Baukasten für Parrot-Parser ( Parrot compiler tool chain) und umfasst derzeit die PGE( Perl Grammar Engine) und die TGE( Tree Grammar Engine).

PGE

Die Perl Grammar Engine ist ein Compiler für Rules, die Perl 6 Regex, mit der man einzelne Regex-Regeln zu "grammar"'s zusammenfassen kann. Der PGE wurde hauptsächlich vom Informatikprofessor Patrick Michaud in PIR (Parrot Intermediate Representation - eina Art Hochassembler) geschrieben und weiterhin geleitet und eignet sich hervorragend dafür Parser für beliebige Sprachen zu schreiben. Diese Sprachen brauchen nur in den sehr kompakten Perl 6 rules definiert zu werden und PGE kann diese Sprachdefinitionen zu einem Syntaxbaum compilieren der wiederum mit TGE is einen von Parrot ausführbaren Zustand gebracht wird. Auf diese Weise soll der letztendliche Perl 6interpreter entstehen und es entstehen bereits damit eine Reihe von Parsern für Ruby, TCL, Haskell, Scheme und weiteren.

TGE

Die Tree Grammar Engine ist ein Projekt von Allison Randal, die u.a. ihren Posten als Leiterin der Perl Foundation aufgab, um für die TGE mehr Zeit zu haben. Es ist ebenfalls in PIR geschrieben und entwicklete sich gemeinsam mit ihrem Projekt namens Punie (Winzling), einem Perl 1-Parser für Parrot, der eine erste Anwendung für TGE war. TGE kann DOM (HTML) ähnliche Syntaxbäume umwandeln, indem es alle Knoten besucht, und nach bestimmten vorher festgelegten Regeln, die Inhalte darauf verändert. Damit kann man Bäume verschiedener Formate ineinander Umwandeln und sogar PIR oder anderen linearen Code aus einem Baum erzeugen. Dadurch ist TGE ein universales Werkzeug, nicht nur für den Parserbau, wurde aber mitlerweile durch NQP abgelöst.

NQP

"Not Quit Perl 6" ist eine Untermenge der Sprache Perl 6 die es noch einfacher machen soll Parrot Parser zu schreiben. Es wird aber hauptsächlich ein wichtiger Zwischenschritt den in Perl 6 geschrieben Perl 6-Parser zu erhalten. NQP wurde als Projekt anfang Winter 2007 begonnen und wird unter Verwendung der PCT (Parrot Compiler Toolchain) geschrieben. Mitlerweile wird es selbst oft als ein Kompiler Tool verwendet, da es noch mehr "higl level" als PIR ist.

Rakudo

Dies scheint der endgültige Perl 6 Interpreter auf Parrot zu werden. Der Name (vormals codename Onion) ist aus dem japanischen "Rakuda do" abgeleitet (Zu deutsch: "der Weg des Kamels") welches sich mit dem Gebrauch zu Rakudo verkürzte das einfach nur Paradis bedeutet. (also lag ich mit meinem ersten Titel für den Perl 6 Artikel: "der Himmel für Programmierer" gar nicht so weit daneben smile )

Pugs

Im Februar 2005 startete Audrey Tang das Projekt Pugs (perl6 - users - golfing - system). In einem überraschenden Tempo gelang es ihr und der schnell wachsenden Gefolgschaft (Lamdacamels), einen Interpreter in Haskell zu schreiben, der immer grössere Teile der Perl 6 Syntax versteht und mittlerweile auch Perl 5-Module aufrufen kann. Heute ist Pugs einer der wichtigsten Kräfte im Enstehungsprozess von Perl 6, weil es einerseits Spezifikationen, Tests, Dokumentation und Codebeispiele für Perl 6 erstellt und bereits mehrere Unstimmigkeiten im Syntax zu bereinigen half und auch neue Ideen einbrachte. Andererseits half es Menschen sich für Perl 6 zu begeistern und Programme und Module in Perl 6 zu schreiben, wie z.B. einige Catalyst-Entwickler oder Simon Cozens. Seit kurzen wurde auch begonnen, Teile von Pugs in Perl 6 umzuschreiben. Damit wird wichtige Vorarbeit für den Perl 6-Parrot-Parser geleistet, der ebenfalls in Perl 6 geschrieben werden sollte. Darüber hinaus wurden etliche Perl 6 Features als http://search.cpan.org/search?query=Perl6::*&mode=all Perl6::* Module nach Perl 5 portiert, so dass jeder Perl-Programmierer bereits heute ihre Nützlichkeit prüfen kann.

kp6

Kind (of) Perl 6 ist ein bisher abgespecktes Perl 6 das von einem Perl 5-Interpreter ausgeführt wird. Gründer und Leiter ist hier Flávio Glock. Angefangen hat sein MiniPerl bereits vor Jahren. Auf dieses MiniPerl setzte eine zweite Generation auf und nun ist kp6 die dritte die wiederum darauf aufsetzt. Die Grundidee dahinter ist: Perl 6-Programme in Grundeinheiten zerlegen, diese auf wenige primitve Befehle reduzieren und dieses dann in Perl 5 übersetzen. Da Pugs grösstenteils das gleiche tut, hat sich kp6 aus Pugs heraus entwickelt. Teile dieser Software oder wenigstens die daraus gewonnen Erkenntnisse werden sicher in MAD einfliessen.

v6

Ebenfalls von Flavio S. Glock (fglock) ist das Vorhaben, Perl 6 innerhalb eines Perl 5-Programmes auszuführen. Dieses Projekt ist nach der Direktive benannt die nach Larry Perl 6-Code kennzeichnen soll (use v6;). v6 besteht vor allem aus den Modulen Pugs::Compiler::Rule und Pugs::Compiler::Perl6, verwendet aber auch viele andere Module wie Moose, die bereits jetzt Möglichkeiten von Perl 6, in Perl 5 zur Verfügung stellen. Viele dieser Module sind in Bundle::Perl6 zusammengefasst. In letzer Zeit ist die Pugs,kp6 und v6 Enwicklung langsamer geworden.

STD.pm

Diese Datei wird von Larry geschrieben und gepflegt und definiert die Regeln nach denen der Perl 6 Sytnatx aufgebaut ist in Perl 6 Regeln (rules). Sobald die PGE sie einemal vollständig kompilieren kann, ist ein vollständiges Selfhosting erreicht. Änderungen in der Syntax können dort einfach eingetragen werden und ein neukompilieren wird ausreichen um einen aktualisierten Interpreter zu erhalten. Mit elf, pixie, gimme5 gibt es derzeit verschiedene Ansätze die Teile der STD.pm einlesbar zu machen.

MAD

Larry aka lwall aka TimToady hat es sich selbst zur Aufgabe gestellt, einen "perl 5 zu perl 6"-Übersetzer zu schreiben. Erste Lebenszeichen deuten darauf hin, dass er 2006 damit tatsächlich begonnen hat. Mitlerweile ist die Grundlegende Perl 6-Syntaxstruktur in Perl 6-rules definiert. Es ist geplant MAD in perl zu integrieren, sodaß der normale Perl Interpreter dann, setzt man die entsprechenden Optionen, dein Script nicht ausführt sondern in Perl 6 übersetzt.

SMOP

Daniel Ruoso ging dem oft geforderten Ansatz nach Perl 6 von einem kleinem schnellen C-Interpreter ausführen zu lassen. Dabei stellt er das Objektsystem in den Mittelpunkt, was durchaus zweckmässig ist da intern in Perl 6 alles ein Objekt ist. SMOP hat einen kleinen Kern(sm0p) der durch eine breite Ringschicht (s1p) erweitert ist. Da der SMOP-Kern nativ Continuations kennt, sind von ihm ähnliche Geschwindigkeitsvorteile bei Block- und Threadwechseln wie von Parrot zu erwarten. Das Projekt wurde begonnen da kp6 zu langsam war.


Übersicht || 0: Vorwort | 1: Geschichte | 2: Theorie | 3:Var | 4:Op | 5:IO | 6:{} | 7:Sub | 8:OOP | 9:Rx || A:Index | B:Tab | C:Tour | D:Delta | E:Links

-- HerbertBreunung - 29 Mar 2006

-- TinaMueller - 30 Mar 2006 - Rechtschreibung

-- TinaMueller - 07 Apr 2006 - Rechtschreibung

-- ChristianDuehl - 05 Apr 2006 - Rechtschreibung etc.

-- DanielSchmeck - 07 Aug 2006 - Rechtschreibung
Topic revision: 2009-12-03, HerbertBreunung
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um Rückmeldung.