Release van de programmeertaal Python 3.8

Na anderhalf jaar ontwikkeling ingediend grote release van programmeertaal Python 3.8. Corrigerende updates voor Python 3.8 branch is gepland vrijlating binnen 18 maanden. Kritieke kwetsbaarheden zullen gedurende vijf jaar worden opgelost, tot oktober 5. Corrigerende updates voor de 2024-tak zullen elke twee maanden worden uitgebracht, waarbij de eerste corrigerende release van Python 3.8 gepland is voor december.

Onder de toegevoegde innovaties:

  • Ondersteunen toewijzingsbewerkingen binnen complexe expressies. Met de nieuwe operator “:=” is het mogelijk om waardetoewijzingsbewerkingen binnen andere expressies uit te voeren, bijvoorbeeld om dubbele functieaanroepen in voorwaardelijke instructies en bij het definiëren van lussen te vermijden:

    als (n := len(a)) > 10:
    ...

    while (blok := f.read(256)) != ":
    ...

  • Ondersteunen nieuwe syntaxis voor het opgeven van functieargumenten. Bij het opsommen van argumenten tijdens een functiedefinitie kunt u nu een "/" opgeven om argumenten waaraan alleen waarden kunnen worden toegewezen op basis van de volgorde waarin de waarden worden opgesomd tijdens de functieaanroep, te scheiden van argumenten die kunnen worden toegewezen in willekeurige volgorde (variabele=waardesyntaxis) ). Aan de praktische kant maakt de nieuwe functie het mogelijk dat functies in Python het gedrag van bestaande functies in C volledig emuleren, en ook om binding aan specifieke namen te vermijden, bijvoorbeeld als de parameternaam in de toekomst zal worden gewijzigd.

    De vlag “/” is een aanvulling op de eerder toegevoegde vlag “*”, en scheidt variabelen waarvoor alleen een toewijzing in de vorm “variabele=waarde” van toepassing is. In de functie "def f(a, b, /, c, d, *, e, f):" kunnen de variabelen "a" en "b" bijvoorbeeld alleen worden toegewezen in de volgorde waarin de waarden worden vermeld ,
    variabelen “e” en “f”, alleen via de toewijzing “variabele=waarde”, en variabelen “c” en “d” op een van de volgende manieren:

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

  • toegevoegd nieuwe C-API
    om Python-initialisatieparameters te configureren, waardoor volledige controle over alles mogelijk is configuratie en het bieden van geavanceerde faciliteiten voor foutafhandeling. De voorgestelde API maakt het eenvoudig om Python-interpreterfunctionaliteit in andere C-applicaties in te bedden;

  • Geïmplementeerd nieuw Vectorcall-protocol voor snellere toegang tot objecten geschreven in C-taal. In CPython 3.8 is de toegang tot Vectorcall nog steeds beperkt tot intern gebruik; in CPython 3.9 is een overdracht naar de categorie van publiek toegankelijke API's gepland;
  • Toegevoegd aanroepen van Runtime Audit Hooks, die applicaties en frameworks in Python toegang geven tot informatie op laag niveau over de voortgang van het script om de uitgevoerde acties te controleren (u kunt bijvoorbeeld de import van modules volgen, bestanden openen, met behulp van een tracering, toegang krijgen tot netwerksockets, code uitvoeren via exec, eval en run_mod);
  • In de module augurk beveiligd ondersteuning voor het Pickle 5-protocol, gebruikt voor het serialiseren en deserialiseren van objecten. Met Pickle kunt u de overdracht van grote hoeveelheden gegevens tussen Python-processen in configuraties met meerdere kernen en meerdere knooppunten optimaliseren door het aantal geheugenkopiebewerkingen te verminderen en aanvullende optimalisatietechnieken toe te passen, zoals het gebruik van gegevensspecifieke compressie-algoritmen. De vijfde versie van het protocol valt op door de toevoeging van een out-of-band transmissiemodus, waarin gegevens afzonderlijk van de hoofdstroom kunnen worden verzonden.
  • Standaard is de vierde versie van het Pickle-protocol geactiveerd, wat, vergeleken met de derde versie die voorheen standaard werd aangeboden, hogere prestaties en een vermindering van de omvang van de verzonden gegevens mogelijk maakt;
  • In de module typen Er worden verschillende nieuwe functies geïntroduceerd:
    • Klasse GetyptDict voor associatieve arrays waarin type-informatie expliciet is opgegeven voor de gegevens die aan de sleutels zijn gekoppeld (“TypedDict('Point2D', x=int, y=int, label=str)”).
    • Type letterlijk, waarmee u een parameter kunt beperken of een waarde kunt retourneren tot een paar vooraf gedefinieerde waarden ("Literal['connected', 'disconnected']”).
    • Bouw "uiteinde", wat het mogelijk maakt om de waarden van variabelen, functies, methoden en klassen te definiëren die niet kunnen worden gewijzigd of opnieuw kunnen worden toegewezen ("pi: Final[float] = 3.1415926536").
  • De mogelijkheid toegevoegd om een ​​cache toe te wijzen voor gecompileerde bestanden met bytecode, opgeslagen in een aparte FS-boom en gescheiden van de mappen met de code. Het pad voor het opslaan van bestanden met bytecode wordt ingesteld via een variabele PYTHONPYCACHEPREFIX of de optie "-X pycache_prefix";
  • Geïmplementeerd de mogelijkheid om debug-builds van Python te maken die een ABI gebruiken die identiek is aan de release, waardoor je extensies kunt laden die zijn geschreven in SI-taal, gecompileerd voor stabiele releases, in debug-builds;
  • f-strings (geformatteerde letterlijke waarden voorafgegaan door 'f') bieden ondersteuning voor de operator = (bijvoorbeeld 'f'{expr=}''), waarmee u een expressie naar tekst kunt converteren, zodat u eenvoudiger fouten kunt opsporen. Bijvoorbeeld:

    ››› gebruiker = 'eric_idle'
    ››› lid_sinds = datum(1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Uitdrukking "voortzetten» mag binnen een blok gebruikt worden Tenslotte;
  • Nieuwe module toegevoegd multiprocessing.gedeeld_geheugen, waardoor het gebruik van gedeelde geheugensegmenten in configuraties met meerdere processen mogelijk is;
  • Op het Windows-platform is de asyncio-implementatie verplaatst om de klasse te gebruiken ProactorEventLoop;
  • De prestaties van de LOAD_GLOBAL-instructie zijn met ongeveer 40% verbeterd dankzij het gebruik van een nieuw caching-mechanisme voor objectcode.

Bron: opennet.ru

Voeg een reactie