Nach einem Jahr der Entwicklung wurde eine bedeutende Version der Programmiersprache Python 3.14 veröffentlicht. Der neue Branch wird über anderthalb Jahre lang unterstützt, gefolgt von weiteren dreieinhalb Jahren, in denen Fehlerbehebungen zur Sicherheitsoptimierung bereitgestellt werden.
Zu den Neuerungen in Python 3.14 (1, 2, 3):
- Die offizielle Unterstützung der CPython-Builds ohne globale Interpreter-Sperre (GIL, Global Interpreter Lock) wurde implementiert. Der GIL-freie Build beseitigt das Problem der Parallelisierung von Operationen auf Mehrkernsystemen, da die globale Sperre einen parallelen Zugriff auf gemeinsam genutzte Objekte aus verschiedenen Threads nicht zulässt. Das Deaktivieren des GIL führt zu zusätzlichen Kosten, die durch Änderungen am Garbage Collector, an der Speicherverwaltung und an den primitiven Lock-Mechanismen verursacht werden. Beispielsweise wird aufgrund der Verwendung von Referenzzählungen zur Isolation von Threads eine Leistungsreduktion von etwa 10 % für Single-Thread-Szenarien beobachtet. Diese zusätzlichen Kosten können jedoch durch die Parallelisierung von Operationen ausgeglichen werden.
- Die Unterstützung für t-Strings (Literale mit dem Präfix 't') wurde hinzugefügt, die eine Syntax ähnlich wie f-Strings ermöglichen, um eigene Template-Handler in Strings zu erstellen. Im Gegensatz zu f-Strings geben t-Strings ein Objekt zurück, das statische String-Daten und die interpolierten Werte separat speichert. Die separate Speicherung ermöglicht es, eigene Handler zu binden, die nur die interpolierten Werte beeinflussen. Zum Beispiel kann ein Handler angeschlossen werden, um den interpolierten Wert in Großbuchstaben umzuwandeln oder um Sonderzeichen zu escapen, wenn externe Daten in den String eingefügt werden. variety = 'Stilton' template = t'Try some {variety} cheese!' print(list(template)) print(lower_upper(template)) ['Try some ', Interpolation('Stilton', 'variety', None, »), ' cheese!'] Try some STILTON cheese! attributes = {'src': 'limburger.jpg', 'alt': 'lovely cheese'} template = t'<img {attributes}>print (html(template)) <img src="»limburger.jpg»" alt="»lovely" cheese» />
- Die Standardbibliothek hat das Modul concurrent.interpreters hinzugefügt, das es ermöglicht, mehrere isolierte Kopien des Python-Interpreters gleichzeitig in einem Prozess auszuführen. Diese Möglichkeit war zuvor nur über das C-API verfügbar. Die gleichzeitige Ausführung mehrerer Interpreter kann verwendet werden, um Operationen parallel zu verteilen, ähnlich wie bei der Ausführung mehrerer paralleler Prozesse, verbraucht jedoch im Gegensatz zum Multithread-Modell weniger Ressourcen. Auf Anwendungsebene können zur Trennung von Operationen durch Interpreter die Akteurs- und CSP-Modelle (Kommunikation von sequentiellen Prozessen) verwendet werden.
- In CPython wurde ein neuer Typ von Interpreter implementiert, der Tail Calls zwischen C-Funktionen verwendet, die separate Python-Bytecodes implementieren, anstelle einer großen Funktion mit einer switch/case-Anweisung. Bei der Kompilierung mit Clang 19 zeigt der neue Interpreter eine Leistungssteigerung von 3-5 % bei den pyperformance-Tests. Der neue Interpreter ist bisher als Option für die Architekturen x86-64 und AArch64 verfügbar und erfordert mindestens die Version 19 von Clang zum Kompilieren (die Unterstützung für GCC wird später versprochen).
- Die verzögerte Verarbeitung von Anmerkungen für Funktionen, Klassen und Module wurde implementiert. Anmerkungen werden nun nicht sofort verarbeitet, sondern als spezialisierte Funktionen gespeichert und bei Bedarf ausgewertet. Dieses neue Verhalten erleichtert die Arbeit mit Anmerkungen und verringert die Verarbeitungsoberflächen während der Laufzeit. Ein Modul zur Inspektion der verzögerten Anmerkungen, annotationlib, wird bereitgestellt.
- In die Standardbibliothek wurde das Paket compression eingefügt, das Funktionen zum Komprimieren und Dekomprimieren von Daten mit verschiedenen Algorithmen bereitstellt. Neben den Modulen compression.lzma, compression.bz2, compression.gzip und compression.zlib, die Zugang zu Funktionen bieten, die zuvor in den Modulen lzma, bz2, gzip und zlib verfügbar waren, wurde ein neues Modul compression.zstd hinzugefügt, das den ZSTD (Zstandard)-Algorithmus implementiert.
- In den Ausdrücken „except“ und „except*“ ist es erlaubt, den Inhalt nicht in Klammern zu setzen, wenn mehrere Ausnahmetypen angegeben werden und das Schlüsselwort „as“ nicht verwendet wird. try: connect_to_server() except TimeoutError, ConnectionRefusedError: print(‘Das Netzwerk funktioniert nicht mehr!’)
- In der interaktiven PyREPL-Shell ist die Syntaxhervorhebung implementiert. Farbausgabe in CLI-Utilities von den Modulen unittest, argparse, json und calendar ist aktiviert.
- Eine Schnittstelle wurde hinzugefügt, um externe Debugger und Profiler an bereits laufende CPython-Prozesse anzuschließen, ohne diese anhalten oder neu starten zu müssen, ohne die Leistung zu beeinträchtigen.
- Das pdb-Modul unterstützt jetzt die Remote-Verbindung zu laufenden Python-Prozessen. Beispielsweise kann zur Verbindung mit einem Prozess mit der Nummer 1234 der Befehl „python -m pdb -p 1234“ verwendet werden.
- Im uuid-Modul wurden die Funktionen uuid6(), uuid7() und uuid8() mit der Implementierung der Versionen 6, 7 und 8 von UUID-Identifikatoren hinzugefügt.
- Eine Warnmeldung wird ausgegeben, wenn die Ausdrücke „return“, „break“ und „continue“ verwendet werden, um einen Block „finally“ zu verlassen.
- Die C-API PyInitConfig wurde hinzugefügt, um die Initialisierung von Python ohne Bindung an C-Strukturen einzustellen, was Änderungen ermöglicht, die ABI-kompatibel sind. Es werden die Funktionen Add PyConfig_Get() und PyConfig_Set() zum Abrufen und Festlegen der Konfiguration sowie die Funktion PyInitConfig_AddModule() zum Hinzufügen eines Erweiterungsmoduls bereitgestellt.
- Die Fehlermeldungen wurden verbessert. Empfehlungen zur Fehlerbehebung bei Tippfehlern in Schlüsselwörtern wurden hinzugefügt.
- Integrierte Ergebnisse zur Ersetzung der Implementierungen kryptografischer Algorithmen in Python, die in den Modulen hashlib und hmac angeboten werden, durch Varianten mit mathematischem (formalem) Nachweis der Zuverlässigkeit, erstellt vom Projekt „HACL*“. Alle standardmäßig in Python bereitgestellten Hash-Funktionen und HMACs wurden durch Varianten ersetzt, für die ein formaler Nachweis der Übereinstimmung (formale Verifikation) vorliegt. Unter anderem wurde eine Implementierung von HMAC-BLAKE2 hinzugefügt, die SIMD-Anweisungen AVX2 zur Beschleunigung der Berechnungen nutzt.
- Eine neue Befehlszeilenschnittstelle („python -m asyncio ps PID“ und „python -m asyncio pstree PID“) wurde hinzugefügt, um laufende Python-Prozesse mit asynchronen Aufgaben (asyncio) zu überwachen.
- In die fertigen Builds für macOS und Windows wurde ein experimenteller JIT-Compiler aufgenommen. Der Installer für Windows wurde durch einen Installationsmanager ersetzt.
- Zur Verifizierung der Integrität der Builds wird anstelle von PGP-Signaturen das System zur kryptografischen Codeverifizierung Sigstore verwendet.
- Offizielle Binärbuilds für die Plattform Android wurden bereitgestellt.
In den nächsten Stunden beginnt die Alpha-Testphase für den Branch Python 3.15, der sich während der nächsten sieben Monate in der Alpha-Version befinden wird, in denen neue Funktionen hinzugefügt und Fehlerbehebungen vorgenommen werden (gemäß dem neuen Entwicklungszeitplan beginnt die Arbeit an einem neuen Branch fünf Monate vor der Veröffentlichung des vorherigen Branches und erreicht zum Zeitpunkt der nächsten Veröffentlichung die Alpha-Testphase). Danach wird es drei Monate lang Beta-Tests geben, während derer das Hinzufügen neuer Funktionen untersagt ist und alle Aufmerksamkeit der Fehlerbehebung gewidmet wird. Die letzten zwei Monate vor der Veröffentlichung wird der Branch in der Release Candidate-Phase sein, in der die endgültige Stabilisierung vorgenommen wird.
Quelle: opennet.ru
