Po roce a půl vývoje významné vydání programovacího jazyka . Opravy pro větev Python 3.8 bude vydávána během 18 měsíců. Kritické zranitelnosti budou opravovány po dobu 5 let do října 2024. Opravy pro větev 3.8 budou vycházet každé dva měsíce, přičemž první opravné vydání Python 3.8.1 je naplánováno na prosinec.
Mezi přidanými :
- přiřazovacími operacemi uvnitř složitých výrazů. Díky novému operátu „:=“ se objevila možnost provádět přiřazovací operace uvnitř dalších výrazů, například aby se předešlo dvojímu volání funkcí v podmínkových příkazech a při definování cyklů:
if (n := len(a)) > 10:
…while (block := f.read(256)) != '':
… - nové syntaxi pro předávání argumentů funkcím. Při uvedení argumentů během definice funkce lze nyní použít znak „/“, který umožní oddělit argumenty, jejichž hodnoty mohou být přiřazeny pouze na základě pořadí uvedených hodnot při volání funkce, od argumentů, které povolují přiřazení v libovolném pořadí (syntaktika „proměnná=hodnota“). Z praktického hlediska tato nová možnost umožňuje v funkcích v jazyce Python plně emulovat chování existujících funkcí v jazyce C a také se vyhnout vazbám na konkrétní jména, například pokud se jméno parametru plánuje v budoucnu změnit.
Znak „/“ doplňuje dříve přidaný znak „*“, který odděluje proměnné, pro které platí pouze přiřazení formou „proměnná=hodnota“. Například ve funkci „def f(a, b, /, c, d, *, e, f):“ mohou být proměnné „a“ a „b“ přiřazeny pouze v pořadí uvedení hodnot,
proměnné „e“ a „f“, pouze prostřednictvím přiřazení „proměnná=hodnota“, a proměnné „c“ a „d“ jakýmkoliv z uvedených způsobů:f(10, 20, 30, 40, e=50, f=60)
f(10, 20, c=30, d=40, e=50, f=60) - nové C API
pro konfiguraci parametrů inicializace Pythonu, které umožňuje plně kontrolovat veškeré a poskytující rozšířené nástroje pro zpracování chyb. Navrhované API usnadňuje integraci funkcionality interpretátoru Python do jiných aplikací napsaných v jazyce C; - nový protokol Vectorcall pro rychlejší přístup k objektům napsaným v jazyce C. V CPython 3.8 je přístup k Vectorcall prozatím omezen na interní použití, přičemž převod na veřejně dostupné API je plánován na CPython 3.9.
- volání Runtime Audit Hooks, která poskytují aplikacím a rámcům na jazyce Python přístup k nízkoúrovňovým informacím o průběhu provádění skriptu pro audity vykonávaných akcí (například lze sledovat import modulů, otevírání souborů, použití trasování, přístupy k síťovým socketům, spouštění kódu přes exec, eval a run_mod);
- V modulu podpora protokolu Pickle 5, který se používá pro serializaci a deserializaci objektů. Pickle umožňuje optimalizaci přenosu velkých objemů dat mezi procesy Python v mnohajádrových a mnohouzlových konfiguracích, čímž se snižuje počet operací kopírování paměti a používají se další optimalizační techniky, jako je zapojení algoritmů komprese specifických pro určité datové typy. Pátá verze protokolu je pozoruhodná přidáním režimu odděleného přenosu (out-of-band), při kterém mohou být data přenášena odděleně od hlavního toku pickle.
- Ve výchozím nastavení je aktivována čtvrtá verze protokolu Pickle, která ve srovnání s dříve nabízenou výchozí třetí verzí umožňuje dosáhnout vyššího výkonu a zmenšení velikosti přenášených dat;
- V modulu bylo představena několik nových funkcí:
- Třída pro asociativní pole, ve kterých se explicitně uvádí informace o typech dat vázaných na klíče ("TypedDict('Point2D', x=int, y=int, label=str)").
- Typ , který umožňuje omezit parametr nebo návratovou hodnotu na několik předem definovaných hodnot ("Literal['connected', 'disconnected']").
- Konstruct "", který poskytuje možnost určit hodnoty proměnných, funkcí, metod a tříd, které nemohou být změněny nebo přiřazeny znovu ("pi: Final[float] = 3.1415926536").
- Byla přidána možnost přiřazení cache pro zkompilované soubory s bajtkódem, které jsou ukládány do samostatného stromu FS a odděleně od adresářů s kódem. Cesta pro uložení souborů s bajtkódem je určena proměnnou nebo volbou "-X pycache_prefix";
- možnost vytváření ladících sestavení Python, která používají identický ABI jako u vydání, což umožňuje v ladících sestaveních načítat rozšíření napsaná v jazyce C, sestavená pro stabilní verze;
- V f-řetězcích (formátované literály s prefixem 'f') je podpora operátoru '=', který umožňuje převést výraz na text pro usnadnění ladění. Například:
››› uživatel = 'eric_idle'
››› člen_od = date(1975, 7, 31)
››› f'{uživatel=} {člen_od=}'
«uživatel='eric_idle' člen_od=datetime.date(1975, 7, 31)» - Výraz „“ je povoleno používat uvnitř bloku ;
- Přidán nový modul , což umožňuje používat segmenty sdílené paměti v mnohoprocesových konfiguracích;
- Na platformě Windows byla implementace asyncio převedena na použití třídy ;
- Výkon instrukce LOAD_GLOBAL se zvýšil o přibližně 40 % díky použití nového mechanismu pro cachování bytecode.
Zdroj: opennet.ru
