Python 3.12 hat Performance, klare Syntax und prÀzisere Fehlermeldungen im Fokus

(Bild: Funtap / Shutterstock.com)
Neben Optimierungen unter der Haube passt die Beta von Python 3.12 unter anderem die Syntax fĂŒr F-Strings und generische Klassen und Typen an.
Die Python Software Foundation hat die erste Beta von Python 3.12 veröffentlicht. Die Programmiersprache bringt in der frischen Version einige syntaktische ErgĂ€nzungen unter anderem fĂŒr generische Klassen, Funktionen und Typ-Aliase sowie fĂŒr F-Strings mit. Daneben gibt es Anpassungen, die auf eine bessere Performance zielen, und Verbesserungen bei den Fehlermeldungen.
Mit der ersten Beta gilt Python 3.12 als Feature Complete, neue Funktionen sind also nicht mehr zu erwarten. Der Release-Fahrplan fĂŒr Python 3.12 sieht [1] drei weitere Betas und zwei Release Candidates vor, bevor am 2. Oktober das endgĂŒltige Release erscheinen soll.
Klare Syntax
Formatierte String-Literale oder F-Strings kennt Python seit Version 3.6 [2]. Sie erlauben es, auf einfache Weise AusdrĂŒcke in Strings zu integrieren und so beispielsweise Variablen direkt einzubinden. Allerdings verzichtete das ursprĂŒngliche Python Enhancement Proposal PEP 498 auf formelle syntaktische Vorgaben und bringt einige EinschrĂ€nkungen mit. So ist beispielsweise bei einem String, der mit einfachen AnfĂŒhrungszeichen ('
) begrenzt ist, kein ('
) innerhalb der AusdrĂŒcke erlaubt. Das in Python 3.12 aufgenommene PEP 701 formalisiert nun die Syntax [3] fĂŒr F-Strings und erweitert damit die Einsatzmöglichkeiten.
Auch fĂŒr generische Typ-Aliase, Funktionen und Klassen bietet Python 3.12 eine neue, ĂŒbersichtlichere Syntax, die sich an anderen Programmiersprachen orientiert. Das zugehörige PEP 695 [4] vergleicht die alte mit der neuen Schreibweise fĂŒr generische Klassen:
# bisherige Schreibweise
from typing import Generic, TypeVar
_T_co = TypeVar("_T_co", covariant=True, bound=str)
class ClassA(Generic[_T_co]):
def method1(self) -> _T_co:
...
# ab Python 3.12
class ClassA[T: str]:
def method1(self) -> T:
...
Performance und Fehlermeldungen
Zu den ErgĂ€nzungen, die die Performance verbessern sollen, gehört unter anderem das PEP 709 [5], das Comprehensions, also gefilterte Kopien von Listen, Dictionaries und Sets, intern anders umsetzt. Bisher hat Python dafĂŒr verschachtelte Funktionen genutzt. Ab Version 3.12 setzt es stattdessen auf Inlining. Damit sollen die einzelnen Comprehensions im Optimalfall doppelt so schnell arbeiten, und das Proposal spricht von einer Performance-Verbesserung einer realen Anwendung mit vielen Comprehensions um 11 Prozent.
AussagekrĂ€ftige Fehlermeldungen standen bereits in Version 3.11 im Fokus [6]. Seinerzeit sorgte das PEP 657 dafĂŒr, dass der Python-Interpreter bei Tracebacks den exakten Ausdruck anzeigt, in dem ein Fehler auftritt. Zuvor hatte er lediglich die zugehörige Zeilennummer ausgespuckt. In Python 3.12 geben Fehlermeldungen unter anderem potenziell fehlende Importanweisungen fĂŒr Module als Ursache fĂŒr einen NameError
an:
sys.version_info
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'sys' is not defined. Did you forget to import 'sys'?
Daneben gibt es Hinweise auf womöglich vertauschte Zuordnungen, wenn im Code import foo from bar
statt from bar import foo
steht.
Weniger GIL-EinschrÀnkung
Eine Neuerung beschÀftigt die Python-Community bereits seit lÀngerer Zeit: ein Weg aus der Falle des Global Interpreter Lock (GIL). Er schrÀnkt nebenlÀufige Programme ein, weil alle Python-Interpreter demselben globalen Lock unterworfen sind. PEP 684 erlaubt es [7], Sub-Interpreter zu erstellen, die unabhÀngige Locks haben.
Das verwandte und fĂŒnf Jahre Ă€ltere PEP 554 fĂŒr mehrere Interpreter in der Standard-Library [8] ĂŒber ein interpreters
-Modul ist dagegen erst fĂŒr den Start in der kommenden Version 3.13 markiert.
Zu den weiteren nennenswerten Neuerungen in Python 3.12 gehört, dass unter Linux der Profiler perf
neuerdings die Namen der Python-Funktionen in Traces ausgibt. AuĂerdem fallen zahlreiche als ĂŒberholt (deprecated) gekennzeichnete Features im aktuellen Release heraus.
Weitere Details finden sich in dem Blogbeitrag zur ersten Beta [9]. Die vollstĂ€ndige Liste der Ănderungen ist im Changelog [10]zu finden. (rme [11])
URL dieses Artikels:
https://www.heise.de/-9063825
Links in diesem Artikel:
[1] https://peps.python.org/pep-0693/
[2] https://www.heise.de/hintergrund/Die-wichtigsten-neuen-Features-in-Python-3-6-3506992.html
[3] https://peps.python.org/pep-0701/
[4] https://peps.python.org/pep-0695/
[5] https://peps.python.org/pep-0709/
[6] https://www.heise.de/news/Programmiersprache-Python-3-11-erweitert-die-Fehlerbehandlung-und-die-Type-Hints-7319328.html
[7] https://peps.python.org/pep-0684/
[8] https://peps.python.org/pep-0554/
[9] https://pythoninsider.blogspot.com/2023/05/python-3120-beta-1-released.html
[10] https://docs.python.org/dev/whatsnew/changelog.html#python-3-12-0-beta-1
[11] mailto:rme@ix.de
Copyright © 2023 Heise Medien