Python 3.8 dasturlash tilining chiqarilishi

Bir yarim yillik rivojlanishdan keyin taqdim etildi asosiy dasturlash tilining chiqarilishi Python 3.8. Python 3.8 filiali uchun tuzatuvchi yangilanishlar rejalashtirilgan 18 oy ichida ozod qilish. Muhim zaifliklar 5 yil oktyabrigacha 2024 yil davomida tuzatiladi. 3.8 filiali uchun tuzatuvchi yangilanishlar har ikki oyda chiqariladi, Python 3.8.1 ning birinchi tuzatuvchi versiyasi dekabrga rejalashtirilgan.

Qo'shilganlar orasida innovatsiyalar:

  • qo'llab-quvvatlash murakkab ifodalar ichida tayinlash operatsiyalari. Yangi “:=” operatori yordamida boshqa iboralar ichida qiymat belgilash amallarini bajarish mumkin, masalan, shartli iboralarda va sikllarni belgilashda ikki tomonlama funksiya chaqiruvlaridan qochish uchun:

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

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

  • qo'llab-quvvatlash funktsiya argumentlarini belgilash uchun yangi sintaksis. Funktsiyani belgilashda argumentlarni sanab o'tayotganda, endi argumentlarni belgilash mumkin bo'lgan argumentlardan faqat funktsiya chaqiruvi paytida qiymatlar sanab o'tish tartibiga qarab qiymatlar tayinlanishi mumkin bo'lgan argumentlarni ajratish uchun "/" belgisini belgilashingiz mumkin. har qanday tartibda (o'zgaruvchi = qiymat sintaksisi) ). Amaliy tomondan, yangi xususiyat Python-dagi funktsiyalarga C-dagi mavjud funktsiyalarning xatti-harakatlarini to'liq taqlid qilish imkonini beradi, shuningdek, masalan, kelajakda parametr nomini o'zgartirish rejalashtirilgan bo'lsa, muayyan nomlar bilan bog'lanishning oldini oladi.

    “/” bayrog‘i avval qo‘shilgan “*” bayrog‘ini to‘ldiradi, faqat “variable=value” ko‘rinishidagi topshiriq qo‘llaniladigan o‘zgaruvchilarni ajratadi. Masalan, "def f(a, b, /, c, d, *, e, f):" funktsiyasida "a" va "b" o'zgaruvchilari faqat qiymatlar sanab o'tilgan tartibda tayinlanishi mumkin. ,
    "e" va "f" o'zgaruvchilari, faqat "o'zgaruvchi = qiymat" tayinlash orqali va "c" va "d" o'zgaruvchilari quyidagi usullardan birida:

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

  • Qo'shilgan yangi C API
    Python ishga tushirish parametrlarini sozlash, bu esa hamma ustidan to'liq nazorat qilish imkonini beradi konfiguratsiya va ilg'or xatolarni boshqarish vositalarini taqdim etish. Taklif etilayotgan API Python tarjimon funksiyasini boshqa C ilovalariga joylashtirishni osonlashtiradi;

  • Amalga oshirildi C tilida yozilgan ob'ektlarga tezroq kirish uchun yangi Vectorcall protokoli. CPython 3.8 da Vectorcall-ga kirish hali ham ichki foydalanish bilan cheklangan; CPython 3.9 da hamma uchun ochiq API toifasiga o'tish rejalashtirilgan;
  • Qo'shilgan Python-dagi ilovalar va ramkalarga bajarilgan harakatlarni tekshirish uchun skriptning borishi haqida past darajadagi ma'lumotlarga kirishni ta'minlaydigan Runtime Audit Hooks-ga qo'ng'iroqlar (masalan, modullar importini kuzatish, fayllarni ochish, izdan foydalanish, tarmoq rozetkalariga kirish, exec, eval va run_mod orqali kodni ishga tushirish);
  • Modulda tuzlangan taqdim etilgan ob'ektlarni ketma-ketlashtirish va seriyadan chiqarish uchun ishlatiladigan Pickle 5 protokolini qo'llab-quvvatlash. Pickle ko'p yadroli va ko'p tugunli konfiguratsiyalarda Python jarayonlari o'rtasida katta hajmdagi ma'lumotlarni uzatishni optimallashtirish imkonini beradi, bu esa xotiradan nusxa ko'chirish operatsiyalari sonini kamaytirish va ma'lumotlarga maxsus siqish algoritmlarini qo'llash kabi qo'shimcha optimallashtirish usullarini qo'llash imkonini beradi. Protokolning beshinchi versiyasi tarmoqdan tashqari uzatish rejimining qo'shilishi bilan ajralib turadi, unda ma'lumotlar asosiy tuzlangan oqimdan alohida uzatilishi mumkin.
  • Odatiy bo'lib, Pickle protokolining to'rtinchi versiyasi faollashtirilgan bo'lib, u ilgari sukut bo'yicha taklif qilingan uchinchi versiyaga nisbatan yuqori ishlash va uzatiladigan ma'lumotlar hajmini kamaytirish imkonini beradi;
  • Modulda Yozish Bir nechta yangi xususiyatlar kiritildi:
    • sinf TypedDict kalitlar bilan bog'langan ma'lumotlar uchun turdagi ma'lumotlar aniq ko'rsatilgan assotsiativ massivlar uchun (“TypedDict('Point2D', x=int, y=int, label=str)”).
    • Kesuvchi apparat Literal, bu sizga parametrni cheklash yoki qiymatni bir necha oldindan belgilangan qiymatlarga qaytarish imkonini beradi (“Literal['ulangan', ‘ajralgan’]”).
    • Dizayn "final", bu o'zgartirish yoki qayta tayinlash mumkin bo'lmagan o'zgaruvchilar, funktsiyalar, usullar va sinflarning qiymatlarini aniqlash imkonini beradi ("pi: Final[float] = 3.1415926536").
  • Alohida FS daraxtida saqlangan va kodli kataloglardan ajratilgan bayt kodli kompilyatsiya qilingan fayllar uchun kesh belgilash imkoniyati qo'shildi. Bayt-kodli fayllarni saqlash yo'li o'zgaruvchi orqali o'rnatiladi PYTHONPYCACHEPREFIX yoki "-X pycache_prefix" opsiyasi;
  • Amalga oshirildi reliz bilan bir xil ABI ishlatadigan Python disk raskadrovka tuzilmalarini yaratish imkoniyati, bu sizga SI tilida yozilgan, barqaror relizlar uchun tuzilgan kengaytmalarni disk raskadrovka tuzilmalariga yuklash imkonini beradi;
  • f-satrlari ("f" prefiksli formatlangan harflar) = operatorini (masalan, "f'{expr=}'") qo'llab-quvvatlaydi, bu esa tuzatishni osonlashtirish uchun ifodani matnga aylantirish imkonini beradi. Masalan:

    ››› foydalanuvchi = 'eric_idle'
    ››› a'zo_beri = sana (1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • ifoda "davom» blok ichida foydalanishga ruxsat berilgan nihoyat;
  • Yangi modul qo'shildi multiprocessing.shared_memory, ko'p jarayonli konfiguratsiyalarda umumiy xotira segmentlaridan foydalanishga ruxsat berish;
  • Windows platformasida asyncio ilovasi sinfdan foydalanish uchun ko'chirildi ProactorEventLoop;
  • Yangi ob'ekt kodini keshlash mexanizmidan foydalanish tufayli LOAD_GLOBAL yo'riqnomasining ishlashi taxminan 40% ga oshdi.

Manba: opennet.ru

a Izoh qo'shish