Vydání programovacího jazyka Python 3.8

Po roce a půl vývoje byl představen významné vydání programovacího jazyka Python 3.8. Opravy pro větev Python 3.8 plánuje 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 novinky:

  • Podpora 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)) != '':
    …

  • Podpora 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)

  • Přidáno nové C API
    pro konfiguraci parametrů inicializace Pythonu, které umožňuje plně kontrolovat veškeré konfiguraci 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;
  • Realizováno 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.
  • Byly přidány 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 pickle je zajištěno 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 typing bylo představena několik nových funkcí:
    • Třída TypedDict 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 Literal, který umožňuje omezit parametr nebo návratovou hodnotu na několik předem definovaných hodnot ("Literal['connected', 'disconnected']").
    • Konstruct "Final", 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 PYTHONPYCACHEPREFIX nebo volbou "-X pycache_prefix";
  • Byla implementována 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 „continue“ je povoleno používat uvnitř bloku finally;
  • Přidán nový modul multiprocessing.shared_memory, 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 ProactorEventLoop;
  • 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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster