Izdaja programskega jezika Python 3.11

Po letu razvoja je objavljen pomemben izdelek programskega jezika Python 3.11. Nova različica bo podprta eno leto in pol, nato pa bo še tri leta in pol prejemala popravke za odpravo ranljivosti.

Hkrati se je začelo alfa-testiranje različice Python 3.12 (v skladu z novim razporedom razvoja delo na novi različici se začne pet mesecev pred izdajo prejšnje različice in ob času naslednje izdaje doseže fazo alfa-testiranja). Različica Python 3.12 bo sedem mesecev v fazi alfa-izdaje, med katero bodo dodajali nove funkcionalnosti in odpravljali napake. Po tem bo tri mesece potekalo testiranje beta različic, med katerim bo dodajanje novih funkcionalnosti prepovedano in vsa pozornost bo usmerjena v odpravo napak. Zadnja dva meseca pred izdajo bo različica v fazi kandidatov za izdajo, kjer se bo izvajala končna stabilizacija.

Med novostmi, vključenimi v Python 3.11, so:

  • Izvedena je bila obsežna optimizacija zmogljivosti. Nova različica vključuje spremembe, povezane s pospeševanjem in inline-implementacijo klicev funkcij, uporabo hitrih interpreterjev tipičnih operacij (x+x, x*x, x-x, a[i], a[i] = z, f(arg) C(arg), o.method(), o.attr = z, *seq), ter optimizacije, pripravljene s projekti Cinder in HotPy. Odvisno od vrste obremenitve je zabeležen porast hitrosti izvajanja kode od 10 do 60%. Povprečno se je zmogljivost pri opravljanju testnega nabora pyperformance povečala za 25%.

    Prenovljen je mehanizem predpomnjenja bajtkod, kar je omogočilo zmanjšanje časa za zagon interpreterja za 10-15%. Objekti s kodo in bajtkodom so zdaj statično nameščeni s strani interpreterja, kar je omogočilo izključitev stopenj demarshalling-a iz predpomnjenja bajtkoda in pretvorbe objektov s kodo za nameščanje v dinamični pomnilnik.

  • Pri prikazivanju prometa poziva u dijagnostičkim porukama, osigurano je prikazivanje informacija o izrazu koji je uzrokovao grešku (ranije se isticala samo linija bez detalja o tome koji je deo linije izazvao grešku). Proširene informacije o promašenju mogu se dobiti putem API-ja i koristiti za usklađivanje pojedinačnih uputstava bajtkoda sa konkretnom pozicijom u izvornoj kodu, koristeći metodu codeobject.co_positions() ili funkciju C API PyCode_Addr2Location(). Ova promena znatno olakšava otklanjanje grešaka povezanih sa ugnježdenim objektima rečnika, višestrukim pozivima funkcija i složenim aritmetičkim izrazima. Traceback (most recent call last): File "calculation.py", line 54, in result = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: division by zero
  • Dodana je podrška za grupe izuzetaka, što omogućava programu da generiše i obrađuje više različitih izuzetaka simultano. Za grupisanje više izuzetaka i njihovo zajedničko pozivanje predstavljeni su novi tipovi izuzetaka ExceptionGroup i BaseExceptionGroup, a za isticanje pojedinačnih izuzetaka iz grupe dodato je izraz "except*".
  • U klasu BaseException dodat je metod add_note(), koji omogućava pridruživanje tekstualne beleške izuzetku, kao što je dodavanje kontekstualnih informacija koje nisu dostupne tokom generisanja izuzetka.
  • Dodan je poseban tip Self, koji predstavlja trenutnu zatvorenu klasu. Self se može koristiti za anotiranje metoda koji vraćaju instancu svoje klase, na jednostavniji način nego korišćenjem TypeVar. class MyLock: def __enter__(self) -> Self: self.lock() return self
  • Dodan je poseban tip LiteralString koji može uključivati samo string literale koji su kompatibilni s tipom LiteralString (tj. 'goli' stringovi i stringovi s tipom LiteralString, ali ne proizvoljni i ne kombinirani stringovi s tipom str). Tip LiteralString se može koristiti za ograničavanje prolaska string argumenata funkcijama, gdje nepropisno umetanje dijelova stringa može dovesti do sigurnosnih ranjivosti, na primjer, prilikom formiranja stringova za SQL upite ili shell komande. def run_query(sql: LiteralString) -> … … def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> None: run_query(„SELECT * FROM students“) # ok run_query(literal_string) # ok run_query(„SELECT * FROM “ + literal_string) # ok run_query(arbitrary_string) # Greška run_query( # Greška f„SELECT * FROM students WHERE name = {arbitrary_string}“ )
  • Dodan je tip TypeVarTuple, koji omogućava korištenje varijabilnih generika, za razliku od TypeVar koji obuhvaća jedan tip, ali proizvoljan broj tipova.
  • U standardnu biblioteku je uključen modul tomllib s funkcijama za parsiranje TOML formata.
  • Omogućena je mogućnost označavanja pojedinih elemenata tipiziranih rječnika (TypedDict) oznakama Required i NotRequired za definiranje obaveznih i neobaveznih polja (po defaultu su sva deklarisana polja obavezna, osim ako parameters total nije postavljen na False). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {„title“: „Black Panther“, „year“: 2018} # OK m2: Movie = {„title“: „Star Wars“} # OK (polje year je neobavezno) m3: Movie = {„year“: 2022} # Greška, nedostaje obavezno polje title)
  • U modul asyncio je dodat razred TaskGroup s implementacijom asinhronog kontekstnog menadžera koji čeka završetak grupe zadataka. Dodavanje zadataka u grupu se vrši putem metode create_task(). async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(…)) task2 = tg.create_task(another_coro(…)) print(„Both tasks have completed now.“)
  • Dodan je dekoraator za klase, metode i funkcije @dataclass_transform, uz čiju upotrebu sistem provere statičkih tipova tretira objekat kao kada koristi dekoraator @dataclasses.dataclass. U sledećem primeru, klasa CustomerModel će prilikom provere tipova biti obrađena slično klasi s dekoraatorom @dataclasses.dataclass, tj. kao da ima metodu __init__ koja prihvata promenljive id i name. @dataclass_transform() class ModelBase: … class CustomerModel(ModelBase): id: int name: str
  • V rednih izrazih je bila dodana možnost uporabe atomske grupacije ((?>…)) in ljubosumnih (possesive) kvantifikatorjev (*+, ++, ?+, {m,n}+).
  • Dodana je možnost ukazne vrstice „-P“ in okoljska spremenljivka PYTHONSAFEPATH za izklop samodejnega dodajanja potencialno nevarnih datotečnih poti v sys.path.
  • Znatno je izboljšano orodje py.exe za platformo Windows, ki sedaj podpira sintakso „-V:/“ poleg „-.“.
  • Številni makri v C API so bili preoblikovani v navadne ali statične inline funkcije.
  • Moduli uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb in mailcap so razglašeni za zastarele in bodo odstranjeni v Python 3.13. Funkcije PyUnicode_Encode* so bile odstranjene.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster