Na anderhalf jaar ontwikkeling een belangrijke release van de programmeertaal . Correcties voor de Python 3.8-tak worden gedurende 18 maanden uitgebracht. Kritieke kwetsbaarheden worden tot oktober 2024 gedurende 5 jaar opgelost. Correcties voor de 3.8-tak zullen elke twee maanden worden uitgebracht, de eerste correctie-release van Python 3.8.1 is gepland voor december.
Onder de toegevoegde :
- toewijzingsoperaties binnen complexe expressies. Met de nieuwe operator ‘:=’ is het mogelijk om toewijzingen van waarden binnen andere expressies uit te voeren, bijvoorbeeld om dubbele functieaanroepen in voorwaardelijke operatoren en bij het definiëren van lussen te vermijden:
if (n := len(a)) > 10:
…while (block := f.read(256)) != »:
… - de nieuwe syntaxis voor het opgeven van functieargumenten. Bij het opsommen van argumenten tijdens de functie-definitie kan nu het teken ‘/’ worden opgegeven, waardoor argumenten die alleen op basis van de volgorde van waarden tijdens de functie-aanroep kunnen worden toegewezen, worden gescheiden van argumenten die willekeurig kunnen worden toegewezen (de syntaxis ‘variabele=waarde’). Praktisch gezien stelt deze nieuwe mogelijkheid in Python-functies in staat om het gedrag van bestaande functies in C volledig te emuleren, en beperkt ook de afhankelijkheid van specifieke namen, bijvoorbeeld als de naam van de parameter in de toekomst moet worden gewijzigd.
De vlag ‘/’ aanvult de eerder toegevoegde aanwijzing ‘*’, die variabelen scheidt waarvoor alleen toewijzing in de vorm ‘variabele=waarde’ van toepassing is. Bijvoorbeeld, in de functie ‘def f(a, b, /, c, d, *, e, f):’ kunnen de variabelen ‘a’ en ‘b’ alleen in de volgorde van waarden worden toegewezen.
De variabelen ‘e’ en ‘f’ alleen via ‘variabele=waarde’ toewijzen, terwijl de variabelen ‘c’ en ‘d’ op een van de genoemde manieren kunnen worden toegewezen:f(10, 20, 30, 40, e=50, f=60)
f(10, 20, c=30, d=40, e=50, f=60) - de nieuwe C API
voor het instellen van initialisatieparameters van Python, die volledige controle over de hele biedt en geavanceerde foutafhandelingsmethoden levert. De voorgestelde API vereenvoudigt het integreren van de functionaliteit van de Python-interpreter in andere toepassingen geschreven in C. - een nieuw protocol Vectorcall voor snellere toegang tot objecten geschreven in de programmeertaal C. In CPython 3.8 is de toegang tot Vectorcall voorlopig beperkt tot intern gebruik, een overgang naar publiek toegankelijke API's is gepland voor CPython 3.9;
- oproepen van Runtime Audit Hooks, die applicaties en frameworks in de programmeertaal Python toegang bieden tot laag niveau informatie over de uitvoering van scripts voor het uitvoeren van een audit van de uitgevoerde acties (bijvoorbeeld het volgen van module-imports, het openen van bestanden, het gebruik van tracing, toegang tot netwerksockets, het uitvoeren van code via exec, eval en run_mod);
- In de module ondersteuning voor protocol Pickle 5, dat wordt gebruikt voor het serialiseren en deserialiseren van objecten. Pickle maakt het mogelijk om de overdracht van grote hoeveelheden gegevens tussen Python-processen in multi-core en multi-node configuraties te optimaliseren door het aantal geheugen kopieeroperaties te verminderen en extra optimalisatietechnieken toe te passen, zoals het gebruik van specifieke compressie-algoritmes voor bepaalde gegevens. De vijfde versie van het protocol is opmerkelijk vanwege de toevoeging van een out-of-band transmissiemodus, waarbij gegevens apart van de hoofstroom van pickle kunnen worden verzonden.
- Standaard is de vierde versie van het Pickle-protocol geactiveerd, die in vergelijking met de eerder standaard aangeboden derde versie een hogere prestaties en een vermindering van de grootte van verzonden gegevens mogelijk maakt;
- In de module zijn verschillende nieuwe mogelijkheden geïntroduceerd:
- Klasse voor associatieve arrays, waarin expliciet type-informatie wordt gegeven voor de aan de sleutels gekoppelde gegevens ("TypedDict('Point2D', x=int, y=int, label=str)").
- Type , waarmee een parameter of retourwaarde kan worden beperkt tot enkele vooraf gedefinieerde waarden ("Literal['connected', 'disconnected']").
- De constructie "", die de mogelijkheid biedt om waarden voor variabelen, functies, methoden en klassen te definiëren die niet kunnen worden gewijzigd of herbenoemd ("pi: Final[float] = 3.1415926536").
- Een mogelijkheid is toegevoegd om een cache toe te wijzen voor gecompileerde bestanden met bytecode, die worden opgeslagen in een aparte bestandshierarchie, gescheiden van de mappen met code. Het pad voor het opslaan van bytecode-bestanden wordt opgegeven via de variabele of de optie "-X pycache_prefix";
- de mogelijkheid om debug-builds van Python te creëren die een identieke ABI hebben als de release, waardoor het mogelijk is om C-extensies te laden die zijn gebouwd voor stabiele versies in debug-builds;
- In f-strings (geformatteerde literals met het prefix 'f') is ondersteuning voor de operator '=' toegevoegd (bijvoorbeeld, 'f'{expr=}''), waarmee een expressie naar tekst kan worden omgezet voor het vereenvoudigen van debugging. Bijvoorbeeld:
››› user = 'eric_idle'
››› member_since = date(1975, 7, 31)
››› f'{user=} {member_since=}'
'user='eric_idle' member_since=datetime.date(1975, 7, 31)' - De expressie "" is toegestaan binnen een block ;
- Een nieuwe module is toegevoegd , waarmee segmenten van gedeelde geheugen kunnen worden gebruikt in multiprocessconfiguraties;
- Op het Windows-platform is de implementatie van asyncio aangepast om gebruik te maken van de klasse ;
- De prestaties van de LOAD_GLOBAL-instructie zijn met ongeveer 40% verbeterd door gebruik te maken van een nieuw cachingmechanisme voor objectcode.
Bron: opennet.ru
