Python 3.12 programlama dilinin yayınlanması

Bir yıllık geliştirme sürecinin ardından Python 3.12 programlama dilinin önemli sürümü yayınlandı. Yeni şubeye XNUMX yıl destek verilecek, ardından XNUMX yıl daha güvenlik açıklarının giderilmesine yönelik düzeltmeler üretilecek.

Aynı zamanda, küresel tercüman kilidi (GIL, Global Tercüman Kilidi) olmayan bir CPython oluşturma modunu tanıtan Python 3.13 dalının alfa testi başladı. Python 3.13 şubesi yedi ay boyunca alfa sürümünde kalacak ve bu süre zarfında yeni özellikler eklenecek ve hatalar düzeltilecek (yeni geliştirme planına uygun olarak, yeni bir şube üzerindeki çalışmalar önceki şubenin yayınlanmasından beş ay önce başlayacak ve bir sonraki sürümün alfa test aşamasına ulaşma zamanı). Bundan sonra beta sürümleri üç ay boyunca test edilecek, bu süre zarfında yeni özellik eklenmesi yasaklanacak ve tüm dikkat hataların düzeltilmesine gösterilecek. Çıkıştan önceki son iki ay boyunca şube, sürüm adaylığı aşamasında olacak ve bu aşamada nihai stabilizasyon gerçekleştirilecek.

Python 3.12'ye yapılan yeni eklemeler şunları içerir:

  • F-dizgelerini ('f' önekiyle biçimlendirilmiş değişmez değerler) ayrıştırma esnekliği artırılarak birçok kısıtlamadan kurtulmamıza olanak sağlandı. Örneğin, f-dizeleri artık çok satırlı ifadeler, yorumlar, ters eğik çizgiler ve Unicode kaçış dizileri de dahil olmak üzere Python açısından geçerli herhangi bir ifadeyi içerebilir. Ek olarak, iç dize artık aynı tırnakların f-string surround olarak yeniden kullanılmasına izin veriyor (yani, çift tırnaklar artık tek tırnaklara geçmek zorunda kalmadan içeride yeniden kullanılabilir). F satırlarındaki hata mesajlarının bilgi içeriği artırıldı ve artık satırda hataya neden olan yer tam olarak gösteriliyor.

    Örneğin, Python 3.12'de aşağıdaki yapılara izin verilir: print(f"Bu çalma listesi: {"\n".join(songs)}") print(f"Bu çalma listesi: {"\N{BLACK HEART SUIT}". join(songs)}") print(f"Bu çalma listesi: {", ".join([ … 'Beni Cennete geri götür', # Aman Tanrım, o ateş gibi gözler … 'Alkalin' , # Asit ya da alkali değil… 'Yükselişçilik' # Sonunda parçalanmış göklere çıkın… ])}")

  • Çok çekirdekli sistemlerde kaynak kullanımının verimliliğini artırmak için, yalıtılmış alt yorumlayıcılar için destek ve bir süreç içindeki farklı yorumlayıcılar için ayrı global kilitler (GIL, Global Interpreter Lock) uygulanmıştır (CPython, birden fazla yorumlayıcıyı aynı anda çalıştırmanıza olanak tanır). bir süreç). Mevcut haliyle, bu özellik şu anda yalnızca C-API aracılığıyla kullanılabilmektedir (Python API desteği bir sonraki önemli dalda görünecektir).
  • Tampon protokolünü kullanma yeteneği Python koduna eklenmiştir. "__buffer__()" yöntemini sağlayan sınıflar artık doğrudan bellekteki ikili veriler üzerinde çalışan türler olarak kullanılabilir.
  • Sys.monitoring modülü, hata ayıklama ve profil oluşturma için önerilir; bu, CPython'daki çağrılar, işlev dönüşleri, isteğe bağlı kod satırlarının yürütülmesi, istisnalar ve geçişler gibi olayları minimum ek yük ile izlemenize olanak tanır.
  • Yorumlayıcı, çekirdek alt sistemi için destek sağlar. Linux perf, perf yardımcı programı kullanılarak profil oluşturma sırasında Python fonksiyonlarının adlarını belirlemenizi sağlar (önceden, izleme kayıtlarında yalnızca C fonksiyonlarının adları belirleniyordu).
  • Hata mesajlarının bilgi içeriği artırıldı ve istisna aralığı genişletilerek yazım hatalarının ortadan kaldırılmasına yönelik öneriler sunuldu. Örneğin, standart kitaplığın unutulmuş modüllerinin içe aktarılmasına ilişkin öneriler artık görüntüleniyor ve "self" önekini eklemeye yönelik ipuçları gösteriliyor. yöntemlerde “from y import x” yerine “import x from y” yazısı tanımlanır, vb. sys.version_info NameError: 'sys' adı tanımlı değil. 'Sys'i içe aktarmayı unuttunuz mu? somethin = blech NameError: 'blech' adı tanımlı değil. Şunu mu demek istediniz: 'self.blech'? byz'den ayz'ı içe aktar SyntaxError: Bunun yerine 'from… import…' mı kullanmak istediniz? koleksiyonlardan zincir haritasını içe aktarın ImportError: 'koleksiyonlardan' 'zincir haritası' adı içe aktarılamıyor. Şunu mu demek istediniz: 'ChainMap'?
  • Performansı optimize etmek için çalışmalara devam edildi. Eklenen optimizasyonlar sonucunda elde edilecek toplam performans kazancının %5 olduğu tahmin edilmektedir.
    • BOLT ikili optimizasyon aracı için deneysel destek, derleme sürecine eklenerek performansı %1-5 oranında artırıldı.
    • Liste eklemelerinin (anlamalar) satır içi dağıtımı uygulanarak liste eklemeleriyle çalışma iki kata kadar hızlandırıldı (liste eklemelerini aktif olarak kullanan kod için testler %11'lik genel performans artışı gösterdi).
    • Unicode nesnelerinin boyutu 8-16 bayt azaltıldı.
    • re.sub(), re.subn() ve re.Pattern normal ifadeleriyle işlemler hızlandırıldı.
    • Bazı protokoller için isinstance() kontrollerinin yürütülmesi 2 kattan 20 kata kadar hızlandırıldı.
    • Asyncio paketinin performansı önemli ölçüde iyileştirildi (bazı testler %75'lik bir hızlanma gösteriyor).
    • asyncio.Task sınıfının oluşturulması hızlandırıldı.
    • tokenize.tokenize() ve tokenize.generate_tokens() işlevleri önemli ölçüde (bazı testlerde %64 oranında) hızlandırıldı.
    • Niteliklerin yüklenmesi ve super() yönteminin çağrılması hızlandırıldı.
  • Genel sınıflar ve işlevler için yeni, daha kompakt bir tür açıklama sözdizimi önerildi. def max[T](args: Yinelenebilir[T]) -> T: ... sınıf listesi[T]: def __getitem__(self, index: int, /) -> T: ... def apend(self, element) : T) - >Yok: ...
  • "type" ifadesini kullanarak tür takma adlarını tanımlamanın yeni bir yolu sağlandı type Point = tuple[float, float] type Point[T] = tuple[T, T]
  • Tip kontrol sistemlerine, bir alt sınıftaki bir yöntemin, üst sınıftaki bir yöntemi veya niteliği geçersiz kılmayı amaçladığını bildirmek için yazma modülüne yeni bir @override dekoratörü eklendi. Dekoratör, geçersiz kılınması amaçlanan yöntemin belirli bir eylemi gerçekleştirmemesinden kaynaklanan hataları yakalamak için kullanılabilir. class Base: def log_status(self) -> Yok: … class Sub(Base): @override def log_status(self) -> Yok: # Tamam, Base.log_status'u geçersiz kılar … @override def done(self) -> Yok: # Tip kontrol sistemi bir hatayı tespit edecektir...
  • Güvenliği artırmak amacıyla hashlib'deki SHA1, SHA3, SHA2-384, SHA2-512 ve MD5 algoritmalarının yerleşik uygulamaları, HACL* projesinin resmi olarak doğrulanmış seçenekleriyle değiştirildi (yerleşik uygulamalar yalnızca kullanılır) OpenSSL mevcut değilse).
  • Python yığın taşması korumasını uygular.
  • pathlib.Path sınıfı alt sınıflandırmayı destekler.
  • İşletim sistemi modülü, platform desteğini genişletti. WindowsÖrneğin, çalışırken Windows os.listdrives(), os.listvolumes() ve os.listmounts() yöntemlerine destek eklendi ve os.stat() ve os.lstat() işlevlerinin doğruluğu iyileştirildi.
  • sqlite3 ve uuid modüllerine (“python -m sqlite3” ve “python -m uuid”) komut satırı arayüzleri eklendi.
  • C-API, referans sayımının uygulanmadığı "ölümsüz" nesneler için destek ekledi.
  • Hata ayıklayıcılarda, JIT derleyicilerinde ve diğer düşük seviyeli araçlarda kullanılmak üzere kararsız bir C API düzeyi kavramı uygulanmıştır.
  • Eski özellikler temizlendi.
    • Asynchat, asyncore, smtpd, imp ve distutils modülleri kaldırıldı (distutils modülü setuptools paketinden kullanılabilir).
    • Unicode nesnelerin C uygulamasından wstr ve wstr_length özellikleri kaldırıldı.
    • Unittest modülünde kullanımdan kaldırılan yöntemler kaldırıldı.
    • Kullanımdan kaldırılmış veya işlevsiz fonksiyonlar, sınıflar ve metotlar kaldırıldı; bunlar arasında locale.format(), io.OpenWrapper, ssl.RAND_pseudo_bytes(), ElementTree.Element.copy(), hashlib.pbkdf2_hmac(), gzip.GzipFile, vb.
    • Web tarayıcı modülü artık Grail, Mosaic, Netscape, Galeon, Skipstone, Iceape, Firebird ve Firefox dahil olmak üzere sürüm 36'ya kadar olan eski tarayıcıları desteklememektedir.
    • Gelecekteki optimizasyonlara hazırlık amacıyla tam sayıların dahili temsili değiştirildi.

Kaynak: opennet.ru

DDoS korumalı siteler, VPS VDS sunucuları için güvenilir hosting satın alın 🔥 DDoS korumalı, güvenilir VPS ve VDS sunucu barındırma hizmeti satın alın | ProHoster