(Warte)Schlange
Oft verglichen mit Perl oder Ruby, gilt Python als eine der beliebtesten vollständig objektorientierten Programmiersprachen. Ende August hat die Python Software Foundation die erste Alpha-Version der neuen 3er-Serie veröffentlicht: Es gibt schon jetzt viele spannende Neuerungen.
- Markus Franz
Python unterstützt mehrere Programmierparadigmen: Man hat die Wahl zwischen objektorientierter, funktionaler oder aspektorientierter Entwicklung. Durch ihre einfache und klar strukturierte Syntax ist die Sprache zudem schnell zu erlernen. Das macht sie nicht nur zur Standardsprache für die Oberfläche des 100-Dollar-Laptops, mit dem Kinder jederzeit den Quellcode ansehen und so hinter die Kulissen der IT blicken können. Auch die NASA und einige Großkonzerne wissen ihre Vorteile zu schätzen. Im Linux-Umfeld sind diverse Installationsroutinen, Unterhaltungsprogramme und andere Administrationswerkzeuge in Python geschrieben.
Mit dem bisherigen Erfolg gibt sich das Entwicklerteam aber nicht zufrieden: Am 31. August 2007 hat es die erste Alpha-Version der kommenden 3er-Serie- genau 3.0a1 - vorgestellt. Die Entwickler, darunter Guido van Rossum, der Schöpfer der Sprache, bezeichnen die neue Linie intern als Python 3000 beziehungsweise Py3k. Die Weiterentwicklung basiert auf den diskutierten Vorschlägen, die in Projektpapieren, genannt PEP, mit der Nummer 3000 oder höher festgelegt werden.
Bisher läuft alles im Zeitplan
Die Fachpresse lobt Python vor allem wegen der einfachen Syntax. Erhalten bleiben die automatische Speicherverwaltung und die dynamische Typisierung, jedoch erforderte die aktuelle 2er-Linie einige grundlegende Änderungen an der internen Architektur. Das betrifft unter anderem diverse Module der Standardbibliothek und die angestaubte Dokumentation. Außerdem will man veraltete, als deprecated gekennzeichnete Funktionen entfernen sowie einige ungewöhnliche Sprachkonstrukte optimieren. Insgesamt sollen sich die wichtigen Änderungen zu etwa einem Drittel auf die Sprache selbst erstrecken. Der überwiegende Anteil betrifft Modifikationen an den Strukturen des Interpreters, die Python für den Einsatz in Enterprise-Umgebungen weiter fit machen sollen.
Bisher bewegen sich die Entwickler im angepeilten Zeitplan: Bis Ende April 2007 konnten Interessierte Vorschläge in die Diskussion um die neue Major-Version einbringen, und der August 2007 als Zeitpunkt zur Veröffentlichung der ersten Alpha wurde ebenfalls eingehalten. Im April 2008 soll der sogenannte Feature Freeze stattfinden. Ab diesem Datum widmet sich das Entwicklerteam nur noch Fehlern und insbesondere Sicherheitslöchern, setzt aber keine neuen Ideen mehr um. Die endgültige Fassung von Python 3.0 ist für August 2008 angekündigt - rund ein Jahr nach der Alpha-Release. Ziel dieser Maßnahmen ist es, zum Release-Zeitpunkt bereits viele Anwendungen auf die neuen 3er-Serie portiert zu haben.
Parallel dazu entwickelt man die Reihe 2.6 weiter. Für diese Version ist der Py3k warnings mode geplant, mit dessen Hilfe Programmierer Warnungen anzeigen lassen können, an welchen Stellen ihre Anwendungen mit Python 3.0 unverträglich sein könnten. Gleichzeitig arbeitet das Entwicklerteam an einem (natürlich in Python geschriebenen) Konverter, der automatisiert Änderungen an alten Anwendungen durchführen kann - es bleibt jedoch abzuwarten, welche Qualität und Sicherheit dieses Tool erreichen wird.
Unicode, wohin man sieht
Das Entwicklerteam hat sich im Bereich der Datentypen für ein neues, an Java angelehntes Modell entschieden: Standardmäßig sind alle Strings Unicode. Für Binärdaten gibt es den neuen Datentyp bytes. Analog zur bisherigen expliziten Unicode-Kennzeichnung von Zeichenketten mit u“irgendwas“ nutzt man den neuen Typ mit b“irgendwas“. Sofern der Programmierer nichts anderes angegeben hat, geht der Interpreter ab sofort davon aus, dass der Quellcode im Zeichensatz UTF-8 kodiert ist. Für die Codes wird die Strategie auch umgesetzt: Die Enkodierung erfolgt von Unicode nach binär und die Dekodierung analog. Das löst den Wirrwarr aus Unicode und 8-Bit-Strings aus Python 2 ab.
Zur Version 3.0 gehört eine vollständig neue I/O-Bibliothek, die strikt zwischen Binär- und Unicode-Daten durch neue Lese-/Schreibmodi unterscheidet. Enthält der an die open-Funktion übergebene Modus den Buchstaben b, basieren sämtliche weiteren Lese- und Schreiboperationen auf Byte-Arrays. Alle anderen Modi führen zur Verarbeitung reiner Text-Strings. Die neue I/O-Bibliothek ersetzt zudem das print-Statement durch eine vollständige Funktion. Anstatt print „irgendwas“ muss man nun zwingend print(„irgendwas“) schreiben. Auch die analog eingeführte format()-Funktion wurde angepasst. Ein System mit geschweiften Klammern ersetzt das %-Zeichen als magischen Operator. Die neue Methode __format__() ermöglicht es, dass Datentypen diese überschreiben und so selbst bestimmen, wie sie dargestellt werden.
Neue Typen und Klassen sind geplant
Zu den bisherigen Klassen kommen durch @ ausgewiesene Dekoratoren, wie man sie aus anderen Sprachen schon lange kennt. Annotations sind ebenfalls möglich, jedoch ist es bisher nicht geplant, dass der Interpreter sie berücksichtigt - sie sind lediglich für einige Standardmodule vorgesehen. Neben einer neuen Syntax für Metaklassen stehen spezielle Methoden zur Verfügung, mit denen man eine eigene Logik für die Prüfung auf Instanz oder Unterklasse implementieren kann. Die Basisparameter einer Klasse lassen sich dynamisch einfügen. Durch bases = (B1, B2) muss man sie zuerst definieren und kann sie dann mit class C(*bases) verwenden. Auch gibt es nun die Möglichkeit abstrakter Basisklassen, bezeichnet als Voluntary Abstract Base Classes. Noch nicht fest steht derzeit, ob die finale Fassung von Python 3.0 generische Funktionen beinhalten wird.
Sicher ist hingegen, dass es in der neuen Version nur noch einen Datentyp für Zahlen gibt: int. Dieser verhält sich identisch mit dem bisherigen long und bewirkt, dass print(1/2) endlich nicht mehr 0, sondern 0,5 ausgibt (mit 1//2 kann man das alte Verhalten aber wieder nachahmen). dict.keys() und verwandte Methoden geben keine Listen mehr zurück, sondern Iteratoren. Dieses Verhalten findet man auch bei diversen anderen Funktionen, etwa zip(), map() oder filter().
Zur Fehlerbehandlung richtet sich Python ebenso an Java aus und wird strenger: Die StandardException entfällt bereits in Python 2.6. Gleichzeitig muss jede Ausnahme zwingend von der Klasse BaseException abgeleitet sein. Die Syntax raise Exception, args wird durch raise Exception(args) abgelöst. Daneben gibt es viele kleinere Anpassungen an (Vergleichs-)Operatoren, und überschreibbare Methoden sorgen für mehr Flexibilität in den Klassen. Viele alte Funktionen sollen ganz entfallen.
Intern hat man viel am C-Quelltext gearbeitet. Beispielsweise ist die SSL-Unterstützung momentan deaktiviert, da die Entwickler sie bis zur finalen Release neu implementieren wollen. Die angesprochene neue I/O-Bibliothek ist intern unabhängiger von anderen C-Bibliotheken. Vereinfacht wird die Unterstützung der Plattformen: Ab Python 3 will man Tests nur noch unter Windows, Linux und Mac OS X durchführen. Andere Betriebssysteme wie Solaris sollen zwar prinzipiell, aber nicht primär unterstützt werden. Dies vereinfacht ebenso wie diverse Anpassungen an 64-Bit-Plattformen die Arbeit der freien Entwickler, schränkt die Einsatzbereiche aber ein.
Daneben verspricht das Entwicklerteam viele Änderungen an der Standardbibliothek. Als letzter Punkt ist anzumerken, dass die alte Dokumentation sowohl eine optische als auch strukturelle Überarbeitung erfahren hat und so vor allem Einsteigern die Programmierung erleichtern soll.
Fazit
Python 3.0 geht den eigenen Erfolgsweg konsequent weiter: Es bleibt eine leistungsfähige, einfach zu erlernende und vielseitige Programmiersprache für fast alle Aufgaben. Dabei hebt die neue Major-Release nicht nur Redundanzen auf (Motto: „There should be one - and preferably only one - obvious way to do it.“), sondern entwickelt sich an vielen Ecken und Kanten weiter. Zwar sagen die Entwickler offen, dass sie anders als bisher keine Kompatibilität zu früheren Versionen anstreben, aber die große Revolution bleibt dankenswerterweise aus: Wer heute mit Python zurechtkommt, muss sich auch in Zukunft nur geringfügig umstellen. Man kann die weitere Entwicklung von Python 3000 im kommenden Jahr entspannt verfolgen.
Markus Franz
ist Mitgründer und CTO der BF Blogform Search GmbH in Berlin. An der Friedrich-Schiller-Universität in Jena studiert er Wirtschaftsinformatik.
Listing 1: Implementierungen gleichen Namens durch Annotations
class Klasse(object):
@multimethod
@annotate(x=int)
def f(self, x):
print(x)
@multimethod
@annotate(x=float)
def f(self, x):
print(x)
Listing 2: print und exec sind Funktionen
print(a, b)
exec(irgendwas)
Listing 3: Generator Expressions
def f(x):
for y in x:
if y:
return True
return False
if f(y > 42 for y in x):
print("Irgendein Element > 42")
(ka)