Programmiersprache Perl 7: Neue Pläne für sanfte Evolution statt hartem Schnitt
Das PSC reagiert auf Debatten zum Versionssprung auf Perl 7: Er wird später kommen und weniger Breaking Changes bringen als ursprünglich angedacht.
Knapp zwei Jahre nach der ersten Ankündigung von Perl 7 hat das Perl Steering Council (PSC) sich zu den Plänen für die Zukunft der Programmiersprache geäußert. Laut der ursprünglichen Vorstellung sollte Perl 7 einerseits alte Zöpfe abschneiden und andererseits häufig genutzte Module und Pragmas automatisch einbinden, um Boilerplate-Code zu verringern. Da damit einige Breaking Changes verbunden wären, folgte eine Debatte über die Pläne, worauf das PSC nun reagiert.
Als einen wichtigen Grund für die geplanten Änderungen gab der Entwickler Sawyer X 2020 in seiner Ankündigung von Perl 7 an, dass alle Minor Releases der Programmiersprache seit deren Anfängen im Jahr 1994 zahlreiche Funktionen und Einstellungen aus Gründen der Rückwärtskompatibilität enthielten. Diese Altlasten sollte Perl 7 nicht weiter herumschleppen. Die Ankündigung erfolgte während der Keynote der virtuellen Perl-Konference "Conference in the Cloud". Sawyer X ist inzwischen von seinen leitenden Ämtern zurückgetreten.
Steuerung der Weiterentwicklung
In den anschließenden Diskussionen trafen äußerst unterschiedliche Meinungen aufeinander. Neben der Ausrichtung der Sprache und der Rückwärtskompatibilität ging es dabei um die Zuständigkeit für die Weiterentwicklung. Der Erfinder der Sprache Larry Wall beteiligt sich daran nicht mehr. Als erstes Ergebnis der Debatten bekam Perl eine neue Governance-Struktur, deren Details auf GitHub zu finden sind.
Die wesentliche Diskussion zur Sprache findet nach wie vor auf der perl5porters-Mailing-Liste (p5p) statt. Zusätzlich existiert seit 2020 das dreiköpfige Perl Steering Council, das im Zweifel die Entscheidungsgewalt über die Zukunft von Perl hat. Das Kernteam von p5p wählt die Mitglieder des PSC jährlich jeweils nach einem neuen Release der Programmiersprache.
Pläne für geschmeidigen Übergang
Für die Zukunft von Perl hat das Gremium drei Eckpunkte festgelegt: Zunächst soll existierender, vernünftig geschriebener Perl-5-Code in künftigen Sprach-Releases weiterhin laufen. Ausnahmen gelten unter anderem dann, wenn ein Security-Bug Änderungen erfordert, die nicht rückwärtskompatibel sind. Als Zweites möchte das PSC zügig neue Features einführen, wozu nun ein RFC-Prozess (Request for Comments) existiert, der auf GitHub dokumentiert ist. Schließlich sollen neue Features einfach zu nutzen sein, und das PSC möchte Entwicklerinnen und Entwickler ermutigen, sie einzusetzen.
Sogenannte Feature Guards (use feature
) markieren in Perl-Code neue Features, die nicht rückwärtskompatibel sind, weil beispielsweise die Neuerung mit einem individuellen Funktionsnamen kollidiert. Die Vorsichtsmaßnahme gilt nicht für neue Features, die in älteren Versionen schlicht einen Syntaxfehler auslösen. Als Beispiel dafür führt der PSC-Blogbeitrag foreach
auf, das für Perl 5.36 geplant ist.
Wenn Neuerungen als experimentell gelten, ist ihre Zukunft ungewiss. Sie könnten sich in späteren Releases ändern oder sogar wieder entfallen. Daher sollten diese Features nicht in produktivem Code einfließen.
Seit Version 5.10 kennt Perl Version Bundles, die alle Neuerungen einer Version seit dem ersten in eine Zeile packen. Für das in Kürze geplante Perl 5.36 entspricht use v5.36;
somit den folgenden Codezeilen:
require v5.36;
use strict;
use warnings;
use feature 'say';
use feature 'state';
use feature 'current_sub';
use feature 'fc';
use feature 'lexical_subs';
use feature 'signatures';
use feature 'isa';
use feature 'bareword_filehandles';
use feature 'bitwise';
use feature 'evalbytes';
use feature 'postderef_qq';
use feature 'unicode_eval';
use feature 'unicode_strings';
no feature 'indirect';
no feature 'multidimensional';
Das PSC möchte Entwicklerinnen und Entwickler verstärkt dazu motivieren, die Kurzschreibweise zu nutzen, da sie einerseits klarstellt, für welche Version die Software geschrieben ist, und andererseits überflüssigen Boilerplate-Code vermeidet.
Der sanfte Weg zu Perl 7
Nach der Ankündigung von 2020 sollte Perl 7 auf der Basis des vor zwei Jahren veröffentlichten Perl 5.32 mit teils deutlichen Änderungen erscheinen. Ein Jahr später sollte Perl 5.34 als Grundlage für den Versionssprung dienen, der mit großen Umbrüchen verbunden sein sollte. Die derzeitigen Pläne sehen eher eine gemächliche Evolution als einen klaren Schnitt und Umbruch vor. So möchte das PSC zunächst weiter neue Funktionen in der Perl-5-Serie veröffentlichen. Außerdem will es alle experimentellen Features auflösen, also entweder stabilisieren oder entfernen.
Wenn das Gremium "irgendwann in der Zukunft" zu dem Schluss kommt, dass die Neuerungen seit Perl 5 eine neue Basis für Perl rechtfertigen, steht der Versionssprung auf Perl 7.0 an. Die neue Version wird standardmäßig rückwärtskompatibel zu Perl 5 sein. Um alle neuen Features von Perl 7 zu nutzen, ist wiederum der Bundle-Befehl use v7;
erforderlich. Das soll Modern::Perl
und ähnliche Module mitbringen.
Wie in der 5-er-Reihe sollen anschließend jährlich 7.x-Releases mit geraden Nachkommastellen erscheinen: 7.2, 7.4, 7.6 und so weiter. Daneben sind weitere 5.xx-Releases geplant.
Die fehlende 6 und die kommende 36
Der kommende Versionssprung verdient seinen Namen, da er auf dem Weg von 5 auf 7 die 6 überspringt. Perl 6 erschien bereits Weihnachten 2015, trägt aber inzwischen den Namen Raku und weicht technisch deutlich von Perl 5 ab, was Version 7 nun explizit vermeiden soll.
Derweil steht in Kürze Perl 5.36 an, das aktuell als Release Candidate verfügbar ist und eigentlich am 18. Mai hätte erscheinen sollen.
Weitere Details zu den Plänen des Perl Steering Council für die Zukunft der Programmierung und den Sprung auf Perl 7 lassen sich dem Blogbeitrag entnehmen.
(rme)