Release der Programmiersprache Python 3.8

Nach anderthalb Jahren Entwicklung wurde vorgestellt wichtige Veröffentlichung der Programmiersprache Python 3.8. Korrektur-Updates für die Python 3.8 Reihe wird geplant werden über einen Zeitraum von 18 Monaten veröffentlicht. Kritische Sicherheitsanfälligkeiten werden bis Oktober 2024 für fünf Jahre behoben. Korrektur-Updates für die 3.8 Reihe erscheinen alle zwei Monate, das erste Korrektur-Release von Python 3.8.1 ist für Dezember geplant.

Unter den hinzugefügten Neuheiten:

  • Support Zuweisungsoperationen innerhalb komplexer Ausdrücke. Mit dem neuen Operator «:=» ist es möglich, Zuweisungsoperationen innerhalb anderer Ausdrücke durchzuführen, um beispielsweise doppelte Funktionsaufrufe in bedingten Anweisungen und bei der Definition von Schleifen zu vermeiden:

    if (n := len(a)) > 10:

    while (block := f.read(256)) != '' :

  • Support neuer Syntax zur Übergabe von Funktionsargumenten. Bei der Auflistung von Argumenten während der Funktionsdefinition kann jetzt das Zeichen „/“ verwendet werden, das es ermöglicht, Argumente zu trennen, deren Werte nur basierend auf der Reihenfolge der übergebenen Werte während des Funktionsaufrufs zugewiesen werden können, von Argumenten, die beliebige Zuweisungen (Syntax „Variable=Wert“) akzeptieren. Praktisch ermöglicht diese Neuerung in Python-Funktionen eine vollständige Emulation des Verhaltens bestehender Funktionen in C und verhindert Bindungen an spezifische Namen, falls der Parametername in Zukunft geändert werden soll.

    Flag „/“ ergänzt das zuvor hinzugefügte Zeichen „*“, das Variablen trennt, für die nur die Zuweisung in Form von „Variable=Wert“ zulässig ist. Zum Beispiel können in der Funktion „def f(a, b, /, c, d, *, e, f):“ die Variablen „a“ und „b“ nur in der Reihenfolge der übergebenen Werte zugewiesen werden.
    Die Variablen „e“ und „f“ dürfen nur durch „Variable=Wert“ zugewiesen werden, während die Variablen „c“ und „d“ auf eine der genannten Arten zugewiesen werden können:

    f(10, 20, 30, 40, e=50, f=60)
    f(10, 20, c=30, d=40, e=50, f=60)

  • Hinzugefügt neues C-API
    zur Konfiguration der Initialisierungsparameter von Python, die eine vollständige Kontrolle über alle Einstellungen ermöglicht und erweiterte Fehlermanagement-Tools bereitstellt. Die vorgeschlagene API erleichtert die Integration der Python-Interpreter-Funktionalität in andere C-Anwendungen;
  • Flagge „—python.EmulateJython“ implementiert, um JVM-Klassen mit normaler Python-Syntax beim Import zu verwenden und JVM-Ausnahmen aus Python-Code abzufangen. ein neues Vectorcall-Protokoll für einen schnelleren Zugriff auf in C geschriebene Objekte. In CPython 3.8 ist der Zugriff auf Vectorcall zunächst auf interne Nutzung beschränkt, die Umstellung auf öffentlich zugängliche APIs ist für CPython 3.9 geplant;
  • Es wurden hinzugefügt Runtime Audit Hooks, die Anwendungen und Frameworks in Python Zugang zu niedrigstufigen Informationen über den Ausführungsverlauf des Skripts bieten, um durchgeführte Aktionen zu auditieren (zum Beispiel kann der Import von Modulen, das Öffnen von Dateien, die Verwendung von Traces, der Zugriff auf Netzwerksockets und das Ausführen von Code über exec, eval und run_mod nachverfolgt werden);
  • Im Modul pickle sicherstellt Unterstützung des Pickle-Protokolls 5, das zur Serialisierung und Deserialisierung von Objekten verwendet wird. Pickle optimiert die Übertragung großer Datenmengen zwischen Python-Prozessen in Multikern- und Clusterkonfigurationen, indem die Anzahl der Speicherkopieroperationen reduziert und zusätzliche Optimierungstechniken angewendet werden, wie die Verwendung von speziellen Kompressionsalgorithmen für bestimmte Datensätze. Die fünfte Version des Protokolls zeichnet sich durch die Einführung des „Out-of-Band“-Übertragungsmodus aus, bei dem Daten unabhängig vom Haupt-Pickle-Datenstrom übertragen werden können.
  • Standardmäßig ist die vierte Version des Pickle-Protokolls aktiviert, die im Vergleich zur zuvor standardmäßig verwendeten dritten Version eine höhere Leistung und eine Reduzierung der übertragenen Datenmenge ermöglicht.
  • Im Modul typing mehrere neue Funktionen wurden vorgestellt:
    • Klasse TypedDict für assoziative Arrays, in denen die Typinformation für die mit Schlüsseln verknüpften Daten explizit festgelegt wird ("TypedDict('Point2D', x=int, y=int, label=str)").
    • Typ Literal, was es ermöglicht, einen Parameter oder einen Rückgabewert auf mehrere vordefinierte Werte zu beschränken („Literal[‘connected’, ‘disconnected’]“).
    • Die Konstruktion „Final“, die es ermöglicht, Werte für Variablen, Funktionen, Methoden und Klassen zu definieren, die nicht geändert oder neu zugewiesen werden können („pi: Final[float] = 3.1415926536“).
  • Die Möglichkeit, einen Cache für kompilierte Dateien mit Bytecode festzulegen, die in einem separaten Verzeichnisbaum im Dateisystem gespeichert werden und von den Verzeichnissen mit dem Code getrennt sind. Der Pfad zum Speichern der Bytecode-Dateien wird über die Variable PYTHONPYCACHEPREFIX oder die Option „-X pycache_prefix“ festgelegt;
  • Unterstützung für das parallele Bauen von Paketen auf Mehrkernsystemen wurde implementiert. Die Anzahl der Threads kann über das Makro „%_smp_build_ncpus“ und die Variable $RPM_BUILD_NCPUS festgelegt werden. Zur Bestimmung der Anzahl der CPUs wurde das Makro „%getncpus“ vorgeschlagen; die Möglichkeit, Debug-Builds von Python zu erstellen, die die gleiche ABI wie die Release-Version verwenden, was ermöglicht, dass in Debug-Builds Erweiterungen, die in C geschrieben sind und für stabile Releases kompiliert wurden, geladen werden können;
  • In f-Strings (formatierte Literale mit dem Präfix ‚f‘) wurde die Unterstützung für den Operator „=“ (zum Beispiel „f'{expr=}'“) hinzugefügt, der es ermöglicht, einen Ausdruck zur Vereinfachung der Fehlersuche in Text umzuwandeln. Zum Beispiel:

    ››› user = ‘eric_idle’
    ››› member_since = date(1975, 7, 31)
    ››› f'{user=} {member_since=}’
    „user=’eric_idle’ member_since=datetime.date(1975, 7, 31)“

  • Der Ausdruck „continue» kann innerhalb des Blocks verwendet werden schließlich;
  • Ein neues Modul wurde hinzugefügt multiprocessing.shared_memory, welches die Verwendung von Segmenten des gemeinsamen Speichers in multiprozesskonfigurationen ermöglicht;
  • Auf der Windows-Plattform wurde die Implementierung von asyncio auf die Verwendung der Klasse ProactorEventLoop;
  • Die Leistung der LOAD_GLOBAL-Anweisung wurde um etwa 40 % durch die Implementierung eines neuen Mechanismus zum Caching von Bytecode verbessert.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster