Rust 1.58 Программалоо тили релиз

Mozilla долбоору тарабынан негизделген, бирок азыр Rust Foundation көз карандысыз коммерциялык эмес уюмунун демөөрчүлүгү астында иштелип чыккан Rust 1.58 жалпы максаттуу программалоо тилинин чыгарылышы жарык көрдү. Бул тил эстутумдун коопсуздугуна көңүл бурат, эстутумду автоматтык башкарууну камсыз кылат жана таштанды жыйноочу же иштөө убактысын колдонбостон жогорку тапшырма параллелизмине жетүү үчүн каражаттарды берет (иштөө убактысы стандарттык китепкананы негизги инициализацияга жана тейлөөгө чейин кыскарган).

Rust'тун эстутумдун автоматтык башкаруусу көрсөткүчтөрдү манипуляциялоодо каталарды жок кылат жана эстутумдун төмөнкү деңгээлдеги манипуляциясынан келип чыккан көйгөйлөрдөн коргойт, мисалы, эстутум аймагына ал бошогондон кийин жетүү, нөл көрсөткүчтөр шилтемелери, буферди ашып кетүү ж.б. Китепканаларды жайылтуу, чогултууну камсыз кылуу жана көз карандылыкты башкаруу үчүн долбоор Cargo пакетинин менеджерин иштеп чыгууда. crates.io репозиторий китепканаларды хостинг үчүн колдоого алынат.

Негизги инновациялар:

  • Сапты форматтоо блокторунда саптан кийин ачык көрсөтүлгөн өзгөрмөлөрдү номер жана ат боюнча алмаштыруу үчүн мурда болгон мүмкүнчүлүктөн тышкары, сапка “{идентификатор}” туюнтмасын кошуу менен ыктыярдуу идентификаторлорду алмаштыруу мүмкүнчүлүгү ишке ашырылат. Мисалы: // Мурда колдоого алынган конструкциялар: println!("Салам, {}!", get_person()); println!("Салам, {0}!", get_person()); println!("Салам, {адам}!", person = get_person()); // азыр сиз let person = get_person(); println!("Салам, {адам}!");

    Идентификаторлор форматтоо параметрлеринде түз көрсөтүлүшү мүмкүн. let (туурасы, тактыгы) = get_format(); get_scores() ичинде (аты, упай) үчүн { println!("{name}: {score:width$.precision$}"); }

    Жаңы алмаштыруу "паника!" макросун кошпогондо, сап форматын аныктоону колдогон бардык макростордо иштейт. Rust тилинин 2015 жана 2018 версияларында паника!("{ident}") кадимки сап катары каралат (Rust 2021де алмаштыруу иштейт).

  • Windows платформасындагы std::process::Буйрук структурасынын жүрүм-туруму коопсуздук себептеринен улам командаларды аткарууда учурдагы каталогдон аткарылуучу файлдарды издебей тургандай өзгөртүлдү. Учурдагы каталог алынып салынган, анткени ал программалар ишенимсиз каталогдордо (CVE-2021-3013) иштетилсе, зыяндуу кодду аткаруу үчүн колдонулушу мүмкүн. Жаңы аткарылуучу аныктоо логикасы Rust каталогдорун, тиркеме каталогун, Windows тутум каталогун жана PATH чөйрө өзгөрмөсүндө көрсөтүлгөн каталогдорду издөөнү камтыйт.
  • Стандарттык китепкана "#[колдонушу керек]" деп белгиленген функциялардын санын көбөйтүп, эгер кайтаруу мааниси этибарга алынбаса, эскертүү берүү үчүн жаңы маанини кайтаруунун ордуна, функция маанилерди өзгөртөт деп кабыл алуудан келип чыккан каталарды аныктоого жардам берет.
  • API'нин жаңы бөлүгү туруктуу категорияга жылдырылды, анын ичинде сапаттардын ыкмалары жана ишке ашырылышы турукташтырылды:
    • Метадата ::ис_символ
    • Path::is_symlink
    • {бүтүн}::каныктыруучу_div
    • Опция :: unwrap_unchecked
    • Натыйжа :: unwrap_unchecked
    • Жыйынтык::unwrap_err_unchecked
  • Аны константалардын ордуна каалаган контекстте колдонуу мүмкүнчүлүгүн аныктаган "const" атрибуту функцияларда колдонулат:
    • Duration::new
    • Duration::checked_add
    • Узактыгы::каныктыруучу_кошуу
    • Duration::checked_sub
    • Duration::saturating_sub
    • Duration::checked_mul
    • Duration::saturating_mul
    • Duration::checked_div
  • "const" контекстинде "*const T" көрсөткүчтөрүнүн шилтемесин алып салууга уруксат берилген.
  • Жүк пакетинин менеджеринде rust_version талаасы пакеттин метадайындарына кошулду, ал эми "--билдирүү форматы" опциясы "жүк орнотуу" буйругуна кошулду.
  • Компилятор CFI (Control Flow Integrity) коргоо механизмин колдоону ишке ашырат, ал ар бир кыйыр чалуу алдында текшерүүлөрдү кошот, ал каталардын натыйжасында нормалдуу аткаруу тартибин (башкаруу агымын) бузууга алып келиши мүмкүн болгон аныкталбаган жүрүм-турумдун айрым формаларын аныктайт. функциялар боюнча эстутумда сакталган көрсөткүчтөрдү өзгөртүүчү эксплойттарды колдонуу.
  • Компилятор тестирлөө учурунда коддун камтылышын баалоо үчүн колдонулган LLVM камтуу салыштыруу форматынын 5 жана 6 версияларына колдоо кошту.
  • Компилятордо LLVMдин минималдуу версиясына талаптар LLVM 12ге чейин көтөрүлөт.
  • x86_64-unknown-none платформасын колдоонун үчүнчү деңгээли ишке ашырылды. Үчүнчү деңгээл негизги колдоону камтыйт, бирок автоматташтырылган тестирлөөсүз, расмий түзүмдөрдү жарыялоосуз же кодду курууга болорун текшерүүсүз.

Кошумчалай кетсек, Windows OS үчүн тиркемелерди иштеп чыгуу үчүн Rust тилин колдонууга мүмкүндүк берген Windows 0.30 китепканалары үчүн Microsoft тарабынан жарыяланган Rust басылмасын белгилей алабыз. Комплект эки куту пакетин камтыйт (терезелер жана windows-sys), алар аркылуу Rust программаларында Win API кире аласыз. API колдоо коду API сүрөттөгөн метаберилиштерден динамикалык түрдө түзүлөт, ал сизге учурдагы Win API чалууларына гана эмес, келечекте пайда боло турган чалууларга да колдоо көрсөтүүгө мүмкүндүк берет. Жаңы версия UWP (Universal Windows Platform) максаттуу платформасын колдоону кошот жана Handle жана Debug түрлөрүн ишке ашырат.

Source: opennet.ru

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