Python 3.12 programazio lengoaia kaleratzea

Urtebeteko garapenaren ondoren, Python 3.12 programazio-lengoaiaren bertsio esanguratsu bat argitaratu da. Adar berriari urtebete eta erdirako euskarria izango da, eta ondoren ahuleziak dituzten adabakiak osatuko dira beste hiru urte eta erdirako.

Aldi berean, Python 3.13 adarraren alfa probak hasi ziren, zeinak CPython eraikitzeko modua sartu zuen interpretearen blokeo globalik gabe (GIL, Global Interpreter Lock). Python 3.13 adarra alfa bertsioan egongo da zazpi hilabetez, eta horietan ezaugarri berriak gehituko dira eta akatsak konponduko dira (garapen-egutegi berriaren arabera, adar berri baten lanak aurreko adar kaleratu baino bost hilabete lehenago hasiko dira eta hurrengo bertsioaren denbora alfa probaren fasera iristen da). Honen ondoren, beta bertsioak hiru hilabetez probatuko dira, eta horietan funtzio berriak gehitzea debekatuko da eta arreta guztia jarriko da akatsak konpontzera. Askatu aurreko azken bi hilabeteetan, adarra kaleratze-hautagaien fasean egongo da, eta bertan behin betiko egonkortzea egingo da.

Python 3.12-en gehigarri berriak hauek dira:

  • F-kateak analizatzeko malgutasuna (formateatutako literalak 'f' aurrizkiarekin) handitu egin da, murrizketa asko kentzeko aukera emanez. Adibidez, f-kateek Python-ek balio duen edozein adierazpen izan ditzakete, lerro anitzeko adierazpenak, iruzkinak, barra-barrak eta Unicode ihes-sekuentziak barne. Horrez gain, barruko kateak orain f-katearen inguratzailearen komatxo berdinak berrerabil daitezke (hau da, komatxo bikoitzak orain barruan berrerabili daitezke komatxo bakarrera aldatu beharrik gabe). F-lerroetako errore-mezuen informazio-edukia handitu egin da, eta bertan akatsa eragin duen lerroan leku zehatza adierazten da orain.

    Adibidez, Python 3.12-n eraikuntza hauek onartzen dira: print(f"Hau da erreprodukzio-zerrenda: {"\n".join(songs)}") print(f"Hau da erreprodukzio-zerrenda: {"\N{BLACK HEART SUIT}". join(songs)}") print(f"Hau da erreprodukzio-zerrenda: {", ".join([… 'Eraman nazazu itzulera Edenera', # Ene, ene, sua bezalako begi horiek... 'Alkalinoa') , # Ez azidoa ez alkalinoa... 'Ascensionismoa' # Hartu azkenik zeru hautsietara... ])}")

  • Nukleo anitzeko sistemetan baliabideen erabileraren eraginkortasuna areagotzeko, prozesu baten barruan interprete ezberdinentzako azpiinterprete isolatuentzako eta blokeo global bereizientzako laguntza (GIL, Global Interpreter Lock) inplementatu da (CPython-ek hainbat interprete aldi berean exekutatzeko aukera ematen du. prozesu bat). Oraingo moduan, funtzioa C-APIaren bidez bakarrik dago eskuragarri (Python APIaren euskarria hurrengo adar esanguratsuan agertuko da).
  • Buffer protokoloa erabiltzeko gaitasuna gehitu zaio Python kodeari. "__buffer__()" metodoa eskaintzen duten klaseak memoriako datu bitarrekin zuzenean funtzionatzen duten mota gisa erabil daitezke orain.
  • Sys.monitoring modulua arazketarako eta profilak egiteko proposatzen da, CPython-en gertaerak monitorizatzeko aukera ematen duena, hala nola deiak, funtzioen itzulketak, kode-lerro arbitrarioen exekuzioa, salbuespenak eta trantsizioak kostu minimoarekin.
  • Interpretatzaileak kernel azpisistemaren euskarria ezartzen du Linux perf, eta horri esker, Python funtzioen izenak zehaztu ditzakezu perf utilitatea erabiliz profilak egiterakoan (lehen, C funtzioen izenak bakarrik zehazten ziren trazetan).
  • Errore-mezuen informazio-edukia handitu da eta salbuespenen sorta zabaldu da, akatsak ezabatzeko gomendioak eskainiz. Adibidez, liburutegi estandarraren ahaztutako moduluak inportatzeko gomendioak bistaratzen dira orain, eta "self." aurrizkia gehitzeko aholkuak erakusten dira. metodoetan, “inportatu x y-tik” idazkera definitzen da “y-tik inportatu x”-en ordez, etab. sys.version_info NameError: 'sys' izena ez dago definitu. Ahaztu al zaizu "sys" inportatzea? somethin = blech NameError: 'blech' izena ez dago definitu. 'self.blech' esan nahi al zenuen? inportatu ayz from byz SyntaxError: ordez 'from... import ...' erabili nahi al zenuen? bildumetatik inportatu kate-mapa ImportError: ezin da inportatu 'kate-mapa' izena 'bildumetatik'. Esan nahi al zenuen: 'ChainMap'?
  • Errendimendua optimizatzeko lanek jarraitu zuten. Gehitutako optimizazioen ondorioz errendimendu-irabazi osoa % 5ekoa dela kalkulatzen da.
    • BOLT optimizatzaile bitarraren euskarri esperimentala gehitu da eraikitze-prozesuan, errendimendua % 1-5 handituz.
    • Zerrenda-sartzeak (ulermenak) linean inplementatzea inplementatu da, zerrenda-inklusioen lana bi aldiz bizkortuz (zerrenda-sartzeak aktiboki erabiltzen dituen kodean, probak errendimendu orokorra %11ko igoera erakutsi du).
    • Unicode objektuen tamaina 8-16 bytetan murriztu da.
    • Re.sub(), re.subn() eta re.Pattern adierazpen erregularrak dituzten eragiketak bizkortu egin dira.
    • Protokolo batzuen isinstance() egiaztapenen exekuzioa 2tik 20 aldiz bizkortu da.
    • Asyncio paketearen errendimendua nabarmen hobetu da (proba batzuek %75eko abiadura erakusten dute).
    • Asyncio.Task klasearen sorrera bizkortu egin da.
    • Nabarmen (proba batzuetan %64) tokenize.tokenize() eta tokenize.generate_tokens() funtzioak bizkortu egin dira.
    • Atributuak kargatzea eta super() metodoa deitzea bizkortu dira.
  • Klase eta funtzio generikoentzako annotazio sintaxi berri eta trinkoagoa proposatu da. def max[T](args: Iterable[T]) -> T: ... klase zerrenda[T]: def __getitem__(self, index: int, /) -> T: ... def append(self, element : T) - > Bat ere ez: ...
  • Mota-izena definitzeko modu berri bat eman du "mota" esamoldea erabiliz mota Point = tupla[float, float] type Point[T] = tuple[T, T]
  • @override dekoratzaile berri bat gehitu da idazketa-moduluan mota egiaztatzeko sistemei jakinarazteko azpiklase bateko metodo batek superklaseko metodo edo atributu bat gainidatzi nahi duela. Dekoratzailea baliogabetu nahi den metodoak eragindako akatsak harrapatzeko erabil daiteke ekintza jakin bat egin ezean. klase Oinarria: def log_status(self) -> None: … class Sub(Base): @override def log_status(self) -> None: # Ados, Base.log_status gainidazten… @override def done(self) -> None: # Mota egiaztatzeko sistemak errore bat detektatuko du...
  • Segurtasuna hobetzeko, SHA1, SHA3, SHA2-384, SHA2-512 eta MD5 algoritmoen inplementazio integratuak hashlib-n HACL* proiektuko formalki egiaztatutako aukerekin ordezkatu dira (inplementazio integratuak soilik erabiltzen dira. OpenSSL ez badago erabilgarri).
  • Python-ek pila-gaineko babesa ezartzen du.
  • pathlib.Path klaseak azpiklaseak onartzen ditu.
  • OS moduluak plataforma gehiagoren laguntza du. WindowsAdibidez, lanean ari zarenean Windows os.listdrives(), os.listvolumes() eta os.listmounts() metodoetarako euskarria gehitu da, eta os.stat() eta os.lstat()-en zehaztasuna hobetu da.
  • Komando-lerroko interfazeak gehitu dira sqlite3 eta uuid moduluetara ("python -m sqlite3" eta "python -m uuid").
  • C-API-k erreferentzien zenbaketa aplikatzen ez duten objektu "hilezkor"entzako laguntza gehitu du.
  • C API maila ezegonkor baten kontzeptua ezarri da, arazgailuetan, JIT konpilatzaileetan eta maila baxuko beste tresnetan erabiltzeko pentsatua.
  • Ezaugarri zaharkituak garbitu ditu.
    • Asynchat, asyncore, smtpd, imp eta distutils moduluak kendu dira (distutils modulua setuptools paketetik erabil daiteke).
    • Unicode objektuen C inplementaziotik wstr eta wstr_length propietateak kendu dira.
    • Unittest moduluan zaharkitutako metodoak kendu dira.
    • Funtzio, klase eta metodo zaharkituak edo funtzionalak ez direnak kendu dira, besteak beste, locale.format() eta io.OpenWrapper. ssl.RAND_pseudo_bytes(), ElementTree.Element.copy(), hashlib.pbkdf2_hmac(), gzip.GzipFile, etab.
    • Web-arakatzailearen moduluak jada ez ditu arakatzaile zaharragoak onartzen, besteak beste, Grail, Mosaic, Netscape, Galeon, Skipstone, Iceape, Firebird eta Firefox 36 bertsiora arte.
    • Etorkizuneko optimizazioetarako prestatzeko, zenbaki osoen barne irudikapena aldatu da.

Iturria: opennet.ru

Erosi hosting fidagarria DDoS babesa duten guneetarako, VPS VDS zerbitzariak 🔥 Erosi webguneentzako ostatu fidagarria DDoS babesarekin, VPS VDS zerbitzariak | ProHoster