Übersicht ||
0:Vor |
1:Geschichte |
2: Theorie |
3:Variablen |
4:Op |
5:IO |
6:{} |
7:Sub |
8:OOP |
9:Rx ||
A:Index |
B:Tab |
C:Tour |
D:Delta |
E:Links
Larry Wall: You should not take this picture to mean that linguistics is the opposite of common sense. But ehm, there are many computer scientists, who have complained that it should be more like engineering and less like an art. And I disagree. But thats oukay.
Perl 6 unterscheidet sich in so vielen Details von Perl 5, daß manche vorschlugen es überhaupt nicht Perl zu nennen. 3 Dinge sprechen jedoch dagegen.
- Alles was "gut" an Perl 5 war, wurde behalten.
- der gleiche Linguist ist Oberentscheider.
- Es geht um die gleichen Anliegen.
Hauptanliegen
Perl 6 versucht, noch besser als Perl 5, die Freiheit, Freude und Kreativität beim Programmieren zu fördern. So wie ein Programmierer denkt und fühlt, soll er seinen Code auch schreiben können. Die Sprache ist konstruiert, daß die Maschine dem Menschen dient, nicht umgekehrt.
Zum anderen versucht Larry es den Nutzern zu ermöglichen, mit Perl schmerzfrei zu wachsen. Selbst in Babysprache können viele Probleme gelöst werden und es steht dem Programmierer frei nach und nach einzelne Konzepte zu lernen, denn Perl 6 verlangt selten mehr Fähigkeiten als unbedingt notwenig, um einen Ansatz zu formulieren. Experten werden andererseits nicht eingeengt und können aus dem Vollen schöpfen.
Gestaltungsprinzipien
Auch wenn jetzt mehr Menschen beteiligt sind (@larry), gestaltet $larry immer noch vieles selber und trifft auch die Entscheidungen. Deswegen gilt weiterhin die oberste Direktive: "make easy things easy and hard things possible". Dies bedeutet aber nicht nur, dass die Sprache bei maximaler Mächtigkeit die einfachen Dinge nicht verkomplizieren darf, sondern auch dass die am häufigsten verwendeten Dinge einfacher und kürzer gehalten sind als die seltener Verwendeten. Damit beides in eine konsistente Ordnung passt, orientierte sich $larry am Prinzip des Huffman Code.
Selbstverständlich bleibt auch die Parole
TIMTOWTDI. Sie wird aber jetzt so verstanden, dass Anfängern deutlicher ein Standardweg vorgezeigt wird, was sie oft brauchen um Sicherheit zu erlangen. Künstlern bleibt alles erlaubt, nur müssen sie es explizit ausdrücken können.
Auch die Prinzipien der Kontextsensitivität und des Wiederverwendens bleiben erhalten. Damit ist gemeint, dass Menschen es leicht verstehen können, wenn Dinge in unterschiedlichem Kontext anders reagieren(heiße Ware, heißes Wetter) und dass sie es auch sehr schätzen wenn in verschiedenen Gebieten die gleichen Begriffe mit gleicher oder ähnlicher Bedeutung auftauchen. Dies ermöglicht schnelleres Verstehen und das freie Kombinieren von Möglichkteiten das Perl-Programmierer so schätzen.
Eine Parole auf die wir uns jetzt schon einstellen können ist: "Different things should look different and similar should look similar." Eine schnelle Sondierung des Quellcodes soll erleichtert und optische Fallen vermieden werden. Larry verteidigt auch gerne Syntaxentscheidungen mit: "Weird things should look weird."
Was an Ideen neu formuliert wurde, auch wenn es schon teilweise in Perl vorhanden war, sind die Prinzipien der Prominenz, des Endgewichtes und die Wasserbetttheorie der Komplexität. Prominenz heißt hier: die Syntax soll es erlauben, auf die wichtigste Stelle hinweisen zu können, wie z.B. durch Großschreibung von Labeln. Endgewicht meint den komplizierten Teil eines Befehls an das Zeilenende zu verschieben, um schneller zu verstehen worum es geht. Und die Wasserbetttheorie schließlich besagt, dass jeder Versuch vorhande Komplexität der Inhalte durch unnatürlich vereinfachte Syntax zu erleichtern, zu unnötiger Komplexität an anderer Stelle führt, wie das Wasser im Bett, das man an einer Stelle eindrücken kann, aber nur zu einer anderen Stelle fliesst.
Eine sehr populäre Parole der letzten Jahre, die Perl eigentlich auch immer zu eigen war, ist DWIM ("Do What I Mean"-"Tu was ich meine"[ ...nicht was ich sage]). Generell haben Menschen Gewohnheiten und Erwartungen wie etwas zu funktionieren habe und eine kluge Sprache nutzt das, anstatt dagegen anzukäpfen. Perl 6 ist natürlich klug, richtet sich aber vor allem nach den Erwartungen der Perl5-Programmierern und englisch sprechender Menschen und wenn nichts dagegen spricht, auch nach anderen Programmiersprachen.
Technische Ziele
Perl 6 ist mehr als die nächste Versionsnummer, es ist die gründliche Neugestaltung der Sprache, des Interpreters und der Gemeinschaft durch die Gemeinschaft, zu der jeder eingeladen ist. Im Gegensatz zu Perl5 wird jedoch nicht mehr perl und Perl unterschieden, da es wohl mehrere Interpreter geben wird. Perl bezeichnet nur noch die Sprache, deren nächste Generation auf Ausdrucksstärke, einfache Erlernbarkeit, Konsistenz, Langlebigkeit und Veränderbarkeit ausgelegt wird, aber in ihrem Charakter immer noch als Perl erkennbar bleiben soll. Die konkreten Ziele sind:
- Einstiegshürde herabsetzen z.B. strict, -w sind default, say ohne \n, einfacherer Umgang mit Arrays und Hashes, dir & filehandle, formate sind nichts eigenes mehr. Einfachere Parameterübergabe und OOP Schreibweisen.
- Dinge wie Regex, Spezialvariablen und Token mehr in einen konsistenten Gesamtsyntax bringen, der die einfachen Grundkonzepte hinter der Sprache herausstellt.
- Explizite, Standard-Formulierungsmöglichkeiten für alle gängigen Programmierstile: Spaghetti, strukturiert, objektorientiert, funktional, deklarativ, design by contract u.v.w. , die sich nicht ausschließen, sondern kombinierbar sind.
- Perl wieder zur mächtigsten Sprache weit und breit machen durch Absorbieren cooler Ideen aus Haskell (lazy list, junctions, hyper ops), Ruby (roles, OO-Notation), Lisp (macros), Python (chained comparsion), yacc und lex (rules).
- Neue, sauberere und mächtigere Wege finden, die Sprache veränderbar und erweiterbar zu machen (Macros statt Source Filter, PASM statt XS, zusätzlich Attribute für Variablen und mächtigerere Syntax statt umständlicher Pragmas).
- Uralte Rückwärtskompatibilitäten (Perl1-4) auflösen wie z.B. Package'Sub Schreibweise.
Trends
Generell könnte dieser Abschnitt eine Wiederholung des ersten werden, da alle Ziele recht sorgfältig umgesetzt werden. Darüber hinaus sind mir aber noch ein paar Dinge aufgefallen:
Perl 6 hat zwar weit mehr Funktionalität, ist ist aber wesentlich einfacher zu erklären weil vieles vereinheitlicht wurde und es kaum noch Sonderregeln gibt, Syntaxelemente meist nur noch für einen Zweck verwendet werden und Dinge wie Spezialvariablen eine systematische und explizite Form bekamen.
Die viele der bekannten sperrigen Eigenheiten fielen weg oder wurden optional, sodaß Perl wesentlich einfacher für Umsteiger wird.
Es wird auch nicht mehr so ein Härtetest für jeden Syntaxhighlighter wie Perl5, weil bei der Gestaltung der Syntax darauf geachtet wird, daß die gesamte Aussage eines Quelltextes mit einem One-Pass-Parsing erfasst werden kann, was Perl selber auch beschleunigen wird.
Auch wenn in Perl 6 versucht wird die Sprache noch weiter auf die grundlegenden wiederverwendbaren Mechanismen zu reduzieren, die sich dann überall gleich verhalten, ist vieles expliziter geworden. In Perl5 konnte ein Package auch als Modul oder Klasse gebraucht werden. In Perl 6 gibt es dafür 3 verschiedene Befehle (
package, module, class). Auch wenn das Verhalten eines Package in einem Modul oder Klasse immernoch so weit wie möglich identisch enthalten ist, hat ein Modul oder eine Klasse weitere Fähigkeiten die mit den unterschiedlichen Befehlen explizit deklariert wurden.
do, if, while, for, sub u.s.w. werden nur noch als Modifikatoren gesehen die das an sich einheitliche Verhalten eines Blocks ändern.
Starke Aufnahme von funktionalem Ideengut. Funktionale Sprachen sind besonders bei mathematisch-logischen Sachverhalten sehr effektiv und es war schon immer perlish alles aufzunehmen und zu adaptieren was den Quellcode kurz und ausdrucksstark macht.
Stärkere interne Objektorientierung, die in vielem vor dem Nutzer verborgen wird, aber rubyartige Schreibweisen wie
"Text".print oder
%hash.keys werden möglich.
Ein leichtes Wegbewegen von den Unix-Wurzeln. Zwar kommen Funktionen hinzu die vorher nur bei Unix-Tools wie yacc und lex bekannt waren, auch bleiben Befehle wie map, grep, sort usw., aber Perl verliert weiter den Grundcharakter einer Shell und auch der Anteil der Befehle, die man von C oder Unix her kennt, wird geringer. Auch die von Sed oder Awk übernommenen Sondervariablen sind alle umbenannt. Perl wird deutlicher zu etwas Eigenem.
Übersicht ||
0:Vor |
1:Geschichte |
2: Theorie |
3:Variablen |
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
--
AlexanderBecker - 05 Apr 2006 einige kleine Tippfehler verbessert
--
ChristianDuehl - 05 Apr 2006 Rechtschreibung etc.