Rust 1.74 ծրագրավորման լեզվի թողարկում: RustVMM աուդիտ. Rewriting Binder in Rust

Հրապարակվել է Rust 1.74 ընդհանուր նշանակության ծրագրավորման լեզվի թողարկումը, որը հիմնադրվել է Mozilla նախագծի կողմից, սակայն այժմ մշակվել է Rust Foundation անկախ ոչ առևտրային կազմակերպության հովանու ներքո: Լեզուն կենտրոնանում է հիշողության անվտանգության վրա և ապահովում է աշխատանքի բարձր զուգահեռականության հասնելու միջոցներ՝ միաժամանակ խուսափելով աղբահանող սարքից և գործարկման ժամանակից (աշխատանքի ժամանակը կրճատվում է մինչև ստանդարտ գրադարանի հիմնական սկզբնավորումը և պահպանումը):

Rust-ի հիշողության մշակման մեթոդները ծրագրավորողին փրկում են ցուցիչները մանիպուլյացիայի ժամանակ սխալներից և պաշտպանում են խնդիրներից, որոնք առաջանում են ցածր մակարդակի հիշողության հետ աշխատելու պատճառով, ինչպիսիք են հիշողության տարածք մուտք գործելը այն ազատվելուց հետո, չվերաբերվող ցուցիչները, բուֆերի գերակատարումները և այլն: Գրադարաններ բաշխելու, կառուցումներ տրամադրելու և կախվածությունները կառավարելու համար նախագիծը մշակում է Cargo փաթեթի կառավարիչը: Crates.io պահոցն աջակցվում է գրադարանների հոսթինգի համար:

Հիշողության անվտանգությունն ապահովվում է Rust-ում կոմպիլյացիայի ժամանակ՝ հղումների ստուգման, օբյեկտի սեփականության մասին հաշվառման, օբյեկտների կյանքի ժամկետների (շրջանակների) հետևելու և կոդի կատարման ընթացքում հիշողության հասանելիության ճշգրտության գնահատման միջոցով: Rust-ը նաև ապահովում է պաշտպանություն ամբողջ թվերի արտահոսքից, պահանջում է փոփոխական արժեքների պարտադիր սկզբնավորում նախքան օգտագործումը, ստանդարտ գրադարանում ավելի լավ է լուծում սխալները, լռելյայն կիրառում է անփոփոխ հղումների և փոփոխականների հայեցակարգը, առաջարկում է ուժեղ ստատիկ մուտքագրում՝ տրամաբանական սխալները նվազագույնի հասցնելու համար:

Հիմնական նորամուծությունները.

  • Ավելացվեց փաթեթների կառավարչի մանիֆեստի միջոցով Cargo.toml ֆայլի միջոցով լինտի ստուգումները կարգավորելու հնարավորություն: Լինտի պարամետրերը սահմանելու համար, ինչպիսիք են արձագանքման մակարդակը (արգելել, մերժել, զգուշացնել, թույլատրել), առաջարկվում են նոր բաժիններ «[lints]» և «[workspace.lints]», որոնց փոփոխությունները հաշվի են առնվում որոշում կայացնելիս: վերակառուցում։ Օրինակ՝ «-F», «-D», «-W» և «-A» դրոշակները հավաքելիս կամ ավելացնելիս «#![forbid(unsafe_code)]» և «#![ney(clippy)» նշանները նշելու փոխարեն: :” ատրիբուտները կոդի համար) :enum_glob_use)]" այժմ կարող է օգտագործվել Cargo manifest-ում. [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "մերժել"
  • Crate փաթեթի կառավարիչն ավելացրել է պահեստին միանալու ժամանակ իսկությունը հաստատելու հնարավորություն: Հիմնական փաթեթը ներառում է նույնականացման պարամետրերի տեղադրման աջակցություն Linux հավատարմագրերի խանութներում (հիմնված libsecret), macOS (Keychain) և Windows (Windows Credential Manager), սակայն համակարգը ի սկզբանե մոդուլային է և թույլ է տալիս կազմակերպել աշխատանքը տարբեր մատակարարների հետ պահպանման և պահպանման համար: նշաններ ստեղծելով, օրինակ՝ 1Password գաղտնաբառի կառավարիչն օգտագործելու համար պատրաստվել է պլագին: Պահեստի կողմից ցանկացած գործողության համար կարող է պահանջվել նույնականացում, այլ ոչ միայն հաստատելու, որ փաթեթները հրապարակվել են: ~/.cargo/config.toml [registry] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Վերադարձի տիպի կանխատեսումների (impl_trait_projections) աջակցությունը կայունացվել է, ինչը թույլ է տալիս Self-ին և T::Assoc-ին նշել վերադարձի տեսակներում, ինչպիսիք են «async fn» և «->impl Trait»: struct Wrapper<'a, T>(&'a T); // Անթափանց վերադարձի տեսակներ, որոնք նշում են «Self»՝ impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } հատկանիշ Հատկանիշ<'a> { type Assoc; fn new() -> Self::Assoc; } impl Trait<'_> for () {type Assoc = (); fn new() {} } // Անթափանց վերադարձի տեսակներ, որոնք նշում են կապակցված տիպ. impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ }}
  • API-ի նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ մեթոդները և հատկությունների իրականացումը կայունացվել են.
  • «const» հատկանիշը, որը որոշում է այն ցանկացած համատեքստում օգտագործելու հնարավորությունը հաստատունների փոխարեն, օգտագործվում է գործառույթներում.
    • հիմնական::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • միջուկ::num::Հագեցնող
    • impl From for std::process::Stdio
    • impl From for std::process::Stdio
    • impl From for std::process::Child{Stdin, Stdout, Stderr}
    • impl From for std::process::Child{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_unchecked
    • std::ffi::OsString::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::Սխալ::այլ
    • impl TryFrom u16-ի համար
    • ենթադրել From<&[T; N]> Վեկ
    • ենթադրել From<&mut [T; N]> Վեկ
    • ենթադրել <[T; N]> Arc<[T]>-ի համար
    • ենթադրել <[T; N]> Rc<[T]>-ի համար
  • Կոմպիլյատորը, գործիքակազմը, ստանդարտ գրադարանը և ստեղծվող հավելվածների գործադիրները մեծացրել են պահանջները Apple պլատֆորմների համար, այժմ պահանջվում է առնվազն macOS 10.12 Sierra, iOS 10 և tvOS 10, որոնք թողարկվել են 2016 թվականին:
  • Աջակցության երրորդ մակարդակն իրականացվել է i686-pc-windows-gnullvm հարթակի համար: Երրորդ մակարդակը ներառում է հիմնական աջակցություն, բայց առանց ավտոմատացված թեստավորման, պաշտոնական կառուցումների հրապարակման կամ ստուգելու, թե արդյոք կոդը կարելի է կառուցել:
  • Իրականացվել է loongarch64-unknown-none թիրախային հարթակի աջակցության երկրորդ մակարդակը: Աջակցության երկրորդ մակարդակը ներառում է հավաքման երաշխիք:

Բացի այդ, կարելի է նշել Rust լեզվի հետ կապված երկու իրադարձություն.

  • OSTIF-ը (Open Source Technology Improvement Fund), որը ստեղծվել է բաց կոդով նախագծերի անվտանգությունն ամրապնդելու համար, հրապարակել է RustVMM նախագծի աուդիտի արդյունքները, որը բաղադրիչներ է տրամադրում առաջադրանքի հատուկ հիպերվիզորների և վիրտուալ մեքենաների մոնիտորների (VMM) ստեղծման համար: Նախագծի մշակմանը մասնակցում են այնպիսի ընկերություններ, ինչպիսիք են Intel-ը, Alibaba-ն, Amazon-ը, Google-ը, Linaro-ն և Red Hat-ը: Intel Cloud Hypervisor և Dragonball հիպերվիզորները մշակվում են RustVMM-ի հիման վրա: Աուդիտը հաստատեց կոդերի բազայի բարձր որակը և տեխնիկայի օգտագործումը ճարտարապետության և իրականացման մեջ, որոնք ուղղված են առավելագույն անվտանգության ապահովմանը: Աուդիտի ընթացքում բացահայտվել է 6 խնդիր, որոնք անմիջական ազդեցություն չեն ունեցել անվտանգության վրա։
  • Google-ը ներկայացրել է Binder միջգործընթացային հաղորդակցման մեխանիզմի նոր ներդրումը, որը վերագրված է Rust լեզվով, Linux միջուկի մշակողների փոստային ցուցակում: Վերամշակումն իրականացվել է որպես անվտանգության ամրապնդման, անվտանգ ծրագրավորման տեխնիկայի խթանման և Android-ում հիշողության հետ աշխատելիս խնդիրների հայտնաբերման արդյունավետության բարձրացման ծրագրի մաս (Android-ում հայտնաբերված բոլոր վտանգավոր խոցելիությունների մոտ 70%-ը պայմանավորված են հիշողության հետ աշխատելիս սխալներով։ ) Binder in Rust-ի ներդրումը հասել է ֆունկցիոնալության հավասարության C լեզվով բնօրինակ տարբերակի հետ, անցնում է AOSP (Android Open-Source Project) բոլոր թեստերը և կարող է օգտագործվել որոնվածի աշխատանքային հրատարակություններ ստեղծելու համար: Երկու ներդրման կատարումը մոտավորապես նույն մակարդակի վրա է (շեղումներ -1.96% և +1.38%) սահմաններում:

Source: opennet.ru

Добавить комментарий