Python 3.8 програмчлалын хэлийг гаргасан

Жил хагасын дараа хөгжлийнхөө дараа танилцуулсан гол програмчлалын хэлний хувилбар Python 3.8. Python 3.8 салбарын залруулах шинэчлэлтүүд төлөвлөсөн 18 сарын дотор суллана. Чухал эмзэг байдлыг 5 оны 2024-р сар хүртэл 3.8 жилийн хугацаанд засна. 3.8.1 салбарын залруулгын шинэчлэлтүүд хоёр сар тутамд гарах бөгөөд Python XNUMX-ийн анхны засварлах хувилбарыг XNUMX-р сард гаргахаар төлөвлөж байна.

Нэмэгдсэн хүмүүсийн дунд инноваци:

  • тусламж нийлмэл илэрхийлэл доторх хуваарилалтын үйлдлүүд. Шинэ “:=” операторын тусламжтайгаар бусад илэрхийлэл дотор утгын хуваарилалтын үйлдлүүдийг гүйцэтгэх боломжтой, жишээлбэл, нөхцөлт хэллэгүүд болон давталтыг тодорхойлохдоо давхар функцийн дуудлага хийхээс зайлсхийх боломжтой.

    хэрэв (n := len(a)) > 10:
    ...

    while (блок := f.read(256)) != ":
    ...

  • тусламж функцийн аргументуудыг тодорхойлох шинэ синтакс. Функцийн тодорхойлолтын үед аргументуудыг тоолохдоо та функц дуудлагын үед утгуудыг дугаарласан дарааллаар нь зөвхөн оноож болох аргументуудыг оноож болох аргументуудаас салгахын тулд "/" зааж өгч болно. дурын дарааллаар (хувьсагч=утгын синтакс) ). Практик талаас нь авч үзвэл, шинэ функц нь Python дахь функцууд нь C хэл дээрх одоо байгаа функцүүдийн үйлдлийг бүрэн дуурайх боломжийг олгодог бөгөөд жишээлбэл, ирээдүйд параметрийн нэрийг өөрчлөхөөр төлөвлөж байгаа бол тодорхой нэрстэй холбогдохоос зайлсхийх боломжийг олгодог.

    "/" туг нь өмнө нь нэмсэн "*" тугийг нөхөж, зөвхөн "хувьсагч=утга" хэлбэрийн даалгавар хэрэгжих хувьсагчдыг тусгаарладаг. Жишээлбэл, "def f(a, b, /, c, d, *, e, f):" функцэд "a" ба "b" хувьсагчдыг зөвхөн утгуудыг жагсаасан дарааллаар нь оноож болно. ,
    "e" ба "f" хувьсагчдыг зөвхөн "хувьсагч=утга", "c" болон "d" хувьсагчдыг дараах аргуудын аль нэгээр нь олгоно.

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

  • Нэмсэн шинэ C API
    Python эхлүүлэх параметрүүдийг тохируулах, бүгдийг нь бүрэн хянах боломжийг олгоно тохиргоо мөн алдаатай ажиллах дэвшилтэт хэрэгслүүдээр хангах. Санал болгож буй API нь Python орчуулагчийн функцийг бусад C програмуудад суулгахад хялбар болгодог;

  • Хэрэгжүүлсэн C хэл дээр бичигдсэн объектуудад илүү хурдан хандах шинэ Vectorcall протокол. CPython 3.8-д Vectorcall-д хандах хандалтыг дотоод хэрэглээгээр хязгаарласан хэвээр байгаа бөгөөд CPython 3.9-д нийтэд нээлттэй API ангилалд шилжүүлэхээр төлөвлөж байна;
  • Нэмсэн Runtime Audit Hooks руу залгадаг бөгөөд энэ нь Python дахь програмууд болон фреймворкуудад гүйцэтгэсэн үйлдлүүдийг шалгах скриптийн явцын талаарх доод түвшний мэдээлэлд хандах боломжийг олгодог (жишээлбэл, та модулиудын импортыг хянах, файл нээх, ул мөр, сүлжээний залгуурт хандах, exec, eval болон run_mod-аар дамжуулан кодыг ажиллуулах);
  • Модульд даршилсан ногоо өгсөн Объектуудыг цуваа болгох, цуврал болгоход ашигладаг Pickle 5 протоколын дэмжлэг. Pickle нь санах ойг хуулбарлах үйлдлүүдийн тоог багасгаж, өгөгдөлд тусгайлан шахах алгоритмуудыг ашиглах зэрэг нэмэлт оновчлолын аргуудыг ашиглан олон цөмт болон олон зангилааны тохиргоонд Python процессуудын хооронд их хэмжээний өгөгдөл дамжуулахыг оновчтой болгох боломжийг олгодог. Протоколын тав дахь хувилбар нь үндсэн даршилсан урсгалаас өгөгдлийг тусад нь дамжуулж болох зурвасаас гадуур дамжуулах горимыг нэмсэнээрээ онцлог юм.
  • Анхдагч байдлаар, Pickle протоколын дөрөв дэх хувилбар идэвхжсэн бөгөөд энэ нь өмнө нь санал болгож байсан гурав дахь хувилбартай харьцуулахад илүү өндөр гүйцэтгэл, дамжуулагдсан өгөгдлийн хэмжээг багасгах боломжийг олгодог;
  • Модульд бичиж байна Хэд хэдэн шинэ функцийг нэвтрүүлсэн:
    • Класс TypedDict Түлхүүртэй холбоотой өгөгдлийн төрлийн мэдээллийг тодорхой заасан ассоциатив массивуудын хувьд (“TypedDict('Point2D', x=int, y=int, label=str)”).
    • Төрөл Бичгийн тоо, энэ нь параметрийг хязгаарлах эсвэл урьдчилан тодорхойлсон хэд хэдэн утгыг буцаах боломжийг олгодог ("Тэгсэн ['холбогдсон', 'таслагдсан']").
    • Дизайн "Final", энэ нь өөрчлөх эсвэл дахин хуваарилах боломжгүй хувьсагч, функц, арга, ангиудын утгыг тодорхойлох боломжийг олгодог ("pi: Final[float] = 3.1415926536").
  • Тусдаа FS модонд хадгалагдаж, код бүхий сангуудаас тусгаарлагдсан байт код бүхий хөрвүүлсэн файлуудад кэш оноох боломжийг нэмсэн. Файлуудыг байт кодоор хадгалах замыг хувьсагчаар тохируулдаг PYTHONPYCACHEPREFIX эсвэл "-X pycache_prefix" сонголт;
  • Хэрэгжүүлсэн хувилбартай ижилхэн ABI ашигладаг Python-ийн дибаг хийх боломжтой бөгөөд энэ нь SI хэл дээр бичигдсэн, тогтвортой хувилбаруудад зориулж эмхэтгэсэн өргөтгөлүүдийг дибаг хийх хувилбаруудад ачаалах боломжийг олгодог;
  • f-strings ('f' угтвартай форматлагдсан литералууд) нь = операторыг дэмждэг (жишээлбэл, "f'{expr=}'") нь дибаг хийхэд хялбар болгох үүднээс илэрхийллийг текст болгон хувиргах боломжийг олгодог. Жишээлбэл:

    ››› хэрэглэгч = 'eric_idle'
    ››› гишүүн_с хойш = огноо (1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Илэрхийлэл "үргэлжлүүлэн» блок дотор ашиглахыг зөвшөөрнө эцэст нь;
  • Шинэ модуль нэмэгдсэн multiprocessing.хуваалцсан_санах ой, олон процессын тохиргоонд хуваалцсан санах ойн сегментийг ашиглахыг зөвшөөрөх;
  • Windows платформ дээр анги ашиглахын тулд asyncio хэрэгжилтийг шилжүүлсэн ProactorEventLoop;
  • LOAD_GLOBAL зааврын гүйцэтгэл нь шинэ объектын кодын кэшлэх механизмыг ашигласнаар ойролцоогоор 40%-иар нэмэгдсэн.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх