A Python 3.8 programozási nyelv kiadása

Másfél év fejlesztés után bemutatott fő programozási nyelv kiadása Python 3.8. Javító frissítések a Python 3.8 ághoz a tervek szerint 18 hónapon belül szabadul fel. A kritikus sérülékenységeket 5 évre, 2024 októberéig javítják. A 3.8-as ág korrekciós frissítései kéthavonta jelennek meg, a Python 3.8.1 első javító kiadása decemberre várható.

A hozzáadottak között innovációk:

  • támogatás hozzárendelési műveletek összetett kifejezéseken belül. Az új „:=” operátorral lehetőség nyílik más kifejezéseken belüli érték-hozzárendelési műveletek végrehajtására, például a kettős függvényhívások elkerülésére feltételes utasításokban és ciklusok definiálásakor:

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

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

  • támogatás új szintaxis függvényargumentumok megadásához. Amikor argumentumokat sorol fel a függvénydefiníció során, most megadhat egy "/" jelet, hogy elválaszthatja azokat az argumentumokat, amelyekhez csak a függvényhívás során értékadási sorrend rendelhető hozzá, a hozzárendelhető argumentumoktól. tetszőleges sorrendben (változó=érték szintaxis) ). Gyakorlati szempontból az új funkció lehetővé teszi, hogy a Python függvényei teljes mértékben emulálják a meglévő C-beli függvények viselkedését, és elkerüljék az egyes nevekhez való kötődést, például ha a paraméter nevét a jövőben módosítani kívánják.

    A „/” jelző kiegészíti a korábban hozzáadott „*” jelzőt, elválasztva azokat a változókat, amelyekhez csak „változó=érték” formátumú hozzárendelés alkalmazható. Például a "def f(a, b, /, c, d, *, e, f):" függvényben az "a" és "b" változókat csak az értékek felsorolásának sorrendjében lehet hozzárendelni. ,
    az „e” és „f” változókat, csak a „változó=érték” hozzárendeléssel, valamint a „c” és „d” változókat a következő módok bármelyikével:

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

  • Hozzáadva új C API
    a Python inicializálási paramétereinek konfigurálásához, lehetővé téve az összes teljes ellenőrzését konfigurációt és fejlett hibakezelési lehetőségeket biztosít. A javasolt API megkönnyíti a Python interpreter funkcióinak más C-alkalmazásokba való beágyazását;

  • Megvalósítva új Vectorcall protokoll a C nyelven írt objektumok gyorsabb eléréséhez. A CPython 3.8-ban a Vectorcall-hoz való hozzáférés továbbra is belső használatra korlátozódik, a CPython 3.9-ben pedig a nyilvánosan elérhető API-k kategóriájába való áthelyezést tervezik;
  • Hozzáadva hívások a Runtime Audit Hookshoz, amelyek a Python alkalmazásainak és keretrendszereinek alacsony szintű hozzáférést biztosítanak a szkript előrehaladásával kapcsolatos információkhoz az elvégzett műveletek ellenőrzéséhez (például nyomon követheti a modulok importálását, a fájlok megnyitását, egy nyomkövetés segítségével, hálózati aljzatok elérése, kód futtatása az exec, eval és run_mod segítségével);
  • A modulban pác biztosított támogatja a Pickle 5 protokollt, amelyet az objektumok sorosítására és deszerializálására használnak. A Pickle lehetővé teszi nagy mennyiségű adat átvitelének optimalizálását a Python-folyamatok között többmagos és több csomópontos konfigurációkban a memóriamásolási műveletek számának csökkentésével és további optimalizálási technikák alkalmazásával, például adatspecifikus tömörítési algoritmusok használatával. A protokoll ötödik verziója egy sávon kívüli átviteli mód hozzáadásával nevezhető, amelyben az adatok a fő savanyúság-folyamtól elkülönítve továbbíthatók.
  • Alapértelmezés szerint a Pickle protokoll negyedik verziója aktiválva van, amely a korábban alapértelmezés szerint kínált harmadik verzióhoz képest nagyobb teljesítményt és a továbbított adatok méretének csökkentését teszi lehetővé;
  • A modulban gépelés Számos új funkció került bevezetésre:
    • Osztály TypedDict asszociatív tömbökhöz, amelyekben a típusinformáció kifejezetten meg van adva a kulcsokhoz társított adatokhoz („TypedDict('Point2D', x=int, y=int, label=str)”).
    • Type Szó szerinti, amely lehetővé teszi egy paraméter vagy visszatérési érték korlátozását néhány előre meghatározott értékre („Literal['connected', 'disconnected']”).
    • Építkezés "vég", amely lehetővé teszi olyan változók, függvények, metódusok és osztályok értékeinek meghatározását, amelyek nem módosíthatók vagy nem rendelhetők újra ("pi: Final[float] = 3.1415926536").
  • Hozzáadtuk a gyorsítótár hozzárendelését a bájtkóddal lefordított fájlokhoz, amelyeket külön FS fába mentünk, és elválasztjuk a kódot tartalmazó könyvtáraktól. A fájlok bájtkóddal történő mentésének elérési útja egy változón keresztül van beállítva PYTHONPYCACHEPREFIX vagy a "-X pycache_prefix" opciót;
  • Megvalósítva lehetőség olyan Python hibakereső buildek létrehozására, amelyek a kiadással azonos ABI-t használnak, ami lehetővé teszi az SI nyelven írt, stabil kiadásokhoz összeállított bővítmények betöltését hibakeresési buildekben;
  • Az f-stringek (formázott literálok „f” előtaggal) támogatják az = operátort (például „f'{expr=}'”), amely lehetővé teszi a kifejezések szöveggé alakítását a könnyebb hibakeresés érdekében. Például:

    ››› user = 'eric_idle'
    ››› tag_mióta = dátum (1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Kifejezés "folytatódik» blokkon belül használható végül;
  • Új modul hozzáadva multiprocessing.shared_memory, amely lehetővé teszi a megosztott memória szegmensek használatát többfolyamatos konfigurációkban;
  • A Windows platformon az asyncio implementációt áthelyezték az osztály használatára ProactorEventLoop;
  • A LOAD_GLOBAL utasítás teljesítménye körülbelül 40%-kal nőtt az új objektumkód gyorsítótárazási mechanizmusának köszönhetően.

Forrás: opennet.ru

Hozzászólás