Python 3.8 программалоо тилинин чыгарылышы

бир жарым жылдан кийин иштеп чыгуу сунушталды негизги программалоо тили чыгаруу Python 3.8. Python 3.8 бутагы үчүн түзөтүүчү жаңыртуулар пландаштырылган 18 айдын ичинде бошотуу. Критикалык алсыздыктар 5 жылга 2024-жылдын октябрына чейин оңдолот. 3.8 бутагы үчүн түзөтүүчү жаңыртуулар ар бир эки ай сайын чыгарылып турат, Python 3.8.1 биринчи түзөтүүчү чыгарылышы декабрга пландаштырылган.

Кошулгандардын арасында инновациялар:

  • колдоо татаал туюнтмалардын ичиндеги дайындоо операциялары. Жаңы “:=” оператору менен эми башка туюнтмалардын ичинде маанилерди ыйгаруу операцияларын аткарууга болот, мисалы, шарттуу операторлордо жана циклдерди аныктоодо кош функциялык чакырууларды болтурбоо үчүн:

    эгерде (n := len(a)) > 10:
    ...

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

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

    “/” желекчеси “variable=value” түрүндөгү дайындоо гана колдонула турган өзгөрмөлөрдү бөлүп, мурда кошулган “*” желегин толуктайт. Мисалы, "def f(a, b, /, c, d, *, e, f):" функциясында "a" жана "b" өзгөрмөлөрү маанилер тизмеленген тартипте гана дайындалышы мүмкүн ,
    "e" жана "f" өзгөрмөлөрү, "variable=value" дайындоосу аркылуу гана, ал эми "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 протоколун колдоо. Пикл эстутумду көчүрүү операцияларынын санын азайтуу жана кошумча оптималдаштыруу ыкмаларын колдонуу, мисалы, берилиштерге атайын кысуу алгоритмдерин колдонуу менен көп ядролуу жана көп түйүндүү конфигурациялардагы Python процесстеринин ортосунда чоң көлөмдөгү маалыматтарды берүүнү оптималдаштырууга мүмкүндүк берет. Протоколдун бешинчи версиясы диапазондон тышкаркы берүү режимин кошуу менен өзгөчөлөнөт, мында маалыматтар негизги пикле агымынан өзүнчө берилиши мүмкүн.
  • Демейки боюнча, Pickle протоколунун төртүнчү версиясы жандырылды, ал мурда демейки боюнча сунушталган үчүнчү версияга салыштырмалуу жогорку аткарууга жана берилүүчү маалыматтардын көлөмүн азайтууга мүмкүндүк берет;
  • Модулда терүү Бир нече жаңы функциялар киргизилди:
    • тап TypedDict ачкычтар менен байланышкан маалыматтар үчүн типтеги маалымат ачык көрсөтүлгөн ассоциативдик массивдер үчүн (“TypedDict('Point2D', x=int, y=int, label=str)”).
    • түрү сөзмө-сөз, бул сизге параметрди чектөөгө же маанини бир нече алдын ала аныкталган маанилерге кайтарууга мүмкүндүк берет ("Түзмө ['туташкан', 'ажыратылган']").
    • Дизайн "акыркы", бул өзгөрүлмөлөрдүн, функциялардын, методдордун жана класстардын маанилерин аныктоого мүмкүндүк берет, аларды өзгөртүүгө же кайра дайындоого болбойт ("pi: Final[float] = 3.1415926536").
  • Байткоду бар компиляцияланган файлдарга кэш дайындоо мүмкүнчүлүгү кошулду, өзүнчө FS дарагында сакталат жана код менен каталогдордон бөлүнгөн. Байткоду бар файлдарды сактоо жолу өзгөрмө аркылуу коюлат PYTHONPYCACHEPREFIX же "-X pycache_prefix" опциясы;
  • Аткарылган релизге окшош ABI колдонгон Python'дун мүчүлүштүктөрдү оңдоо түзүмдөрүн түзүү мүмкүнчүлүгү, бул SI тилинде жазылган, туруктуу релиздер үчүн түзүлгөн кеңейтүүлөрдү мүчүлүштүктөрдү оңдоо түзүлүштөрүндө жүктөөгө мүмкүндүк берет;
  • f-саптары (форматталган литералдар 'f' префикси менен) = операторуна колдоо көрсөтөт (мисалы, "f'{expr=}'"), бул сизге мүчүлүштүктөрдү оңдоону жеңилдетүү үчүн туюнтманы текстке айландырууга мүмкүндүк берет. Мисалы:

    ››› колдонуучу = 'eric_idle'
    ››› мүчө_жылдан бери = датасы(1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • туюнтма "улантуу» блоктун ичинде колдонууга уруксат акырында;
  • Жаңы модуль кошулду multiprocessing.shared_memory, көп процесстик конфигурацияларда жалпы эс сегменттерин колдонууга уруксат берүү;
  • Windows платформасында асинсио ишке ашыруу классты колдонуу үчүн жылдырылды ProactorEventLoop;
  • LOAD_GLOBAL нускамасынын аткаруусу жаңы объект кодун кэштөө механизмин колдонуунун эсебинен болжол менен 40% га жогорулады.

Source: opennet.ru

Комментарий кошуу