Programmeerimiskeele Rust 1.74 väljalase. RustVMM audit. Binderi ümberkirjutamine roostes

Avaldatud on Mozilla projektiga rajatud, kuid nüüdseks sõltumatu mittetulundusühingu Rust Foundation egiidi all välja töötatud üldotstarbelise programmeerimiskeele Rust 1.74 väljalase. Keel keskendub mälu ohutusele ja pakub vahendeid töö kõrge paralleelsuse saavutamiseks, vältides samal ajal prügikoguja ja käitusaja kasutamist (käitusaeg lüheneb standardse teegi põhikäivitamise ja hoolduseni).

Rusti mälukäsitlusmeetodid säästavad arendajat osutitega manipuleerimisel esinevate vigade eest ja kaitsevad madala tasemega mälukäsitluse tõttu tekkivate probleemide eest, nagu mälualale juurdepääs pärast selle vabastamist, nullviidate viitamise tühistamine, puhvri ülekoormus jne. Teekide levitamiseks, järkude pakkumiseks ja sõltuvuste haldamiseks arendab projekt Cargo paketihaldurit. Hoidlat crates.io toetatakse teekide majutamiseks.

Mälu turvalisus on Rustis kompileerimise ajal tagatud viidete kontrollimise, objekti omandiõiguse jälgimise, objektide eluea (ulatuse) jälgimise ja mälule juurdepääsu õigsuse hindamise kaudu koodi täitmise ajal. Rooste pakub ka kaitset täisarvude ületäitumise eest, nõuab muutujate väärtuste kohustuslikku lähtestamist enne kasutamist, käsitleb standardteegi vigu paremini, rakendab vaikimisi muutumatute viidete ja muutujate kontseptsiooni, pakub tugevat staatilist tippimist loogiliste vigade minimeerimiseks.

Peamised uuendused:

  • Lisatud on paketihalduri manifestiga faili Cargo.toml kaudu ebemekontrolli konfigureerimise võimalus. Lintsätete määramiseks, nagu vastuse tase (keela, keela, hoiata, luba), pakutakse välja uued jaotised “[lints]” ja “[workspace.lints]”, mille muudatusi võetakse arvesse otsuse tegemisel. ümberehitamine. Näiteks selle asemel, et määrata või lisada lippe "-F", "-D", "-W" ja "-A" koostamisel või lisamisel "#![forbid(unsafe_code)]" ja "#![deny(clippy" :” atribuudid koodile) :enum_glob_use)]" saab nüüd kasutada lasti manifestis: [lints.rust] unsafe_code = "keela" [lints.clippy] enum_glob_use = "deny"
  • Crate'i paketihaldur on lisanud hoidlaga ühenduse loomisel autentimise võimaluse. Põhidistributsioon sisaldab tuge autentimisparameetrite paigutamiseks Linuxi mandaadipoodidesse (libsecreti baasil), macOS-i (Keychain) ja Windowsi (Windows Credential Manager), kuid süsteem tehti algselt modulaarseks ja võimaldab korraldada tööd erinevate pakkujatega salvestamiseks ja žetoonide genereerimiseks, näiteks on ette valmistatud plugin 1Passwordi paroolihalduri kasutamiseks. Hoidla võib autentimist nõuda mis tahes toimingu jaoks, mitte ainult pakettide avaldamise kinnitamiseks. ~/.cargo/config.toml [register] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Tagastustüüpi projektsioonide (impl_trait_projections) tugi on stabiliseeritud, võimaldades mainida Self ja T::Assoc tagastustüüpides, nagu "async fn" ja "->impl Trait". struct Mähis<'a, T>(&'a T); // Läbipaistmatud tagastustüübid, mis mainivad sõna "Ise": impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } tunnus Tunnus<'a> { type Assoc; fn new() -> Self::Assoc; } impl Tunnus<'_> for () { type Assoc = (); fn new() {} } // Läbipaistmatud tagastustüübid, mis mainivad seotud tüüpi: impl<'a, T: Tunnus<'a>> Mähis<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iteraator { /* … */ } }
  • API uus osa on viidud stabiilsete kategooriasse, sealhulgas on stabiliseeritud meetodid ja tunnuste rakendused:
  • Funktsioonides kasutatakse atribuuti “const”, mis määrab võimaluse kasutada seda konstantide asemel mis tahes kontekstis:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • tuum::arv::küllastav
    • 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::Viga::muu
    • impl TryFrom u16 jaoks
    • impl Alates<&[T; N]>Vec
    • impl Alates<&mut [T; N]>Vec
    • impl Alates <[T; N]> Arc<[T]> jaoks
    • impl Alates <[T; N]> Rc<[T]> jaoks
  • Kompilaatoril, tööriistakomplektil, standardteegil ja loodud rakenduste käivitatavatel failidel on Apple'i platvormidele suuremad nõuded, mis nõuavad nüüd vähemalt 10.12. aastal välja antud operatsioonisüsteemi macOS 10 Sierra, iOS 10 ja tvOS 2016.
  • Kolmas tugitase on rakendatud platvormi i686-pc-windows-gnullvm jaoks. Kolmas tase hõlmab põhituge, kuid ilma automaatse testimiseta, ametlike järelversioonide avaldamise või koodi loomiseta.
  • Rakendatud on loongarch64-unknown-none sihtplatvormi teine ​​tugitase. Teise taseme tugi hõlmab montaažigarantii.

Lisaks võib märkida kahte rooste keelega seotud sündmust:

  • Avatud lähtekoodiga projektide turvalisuse tugevdamiseks loodud OSTIF (Open Source Technology Improvement Fund) on avaldanud projekti RustVMM auditi tulemused, mis pakub komponente ülesandespetsiifiliste hüperviisorite ja virtuaalmasina monitoride (VMM) loomiseks. Projekti arendamisel osalevad sellised ettevõtted nagu Intel, Alibaba, Amazon, Google, Linaro ja Red Hat. Intel Cloud Hypervisor ja Dragonball hüperviisorid töötatakse välja RustVMM-i põhjal. Audit kinnitas koodibaasi kõrget kvaliteeti ning maksimaalse turvalisuse saavutamisele suunatud tehnikate kasutamist arhitektuuris ja teostuses. Auditi käigus tuvastati 6 probleemi, millel ei olnud otsest mõju ohutusele.
  • Google tutvustas Linuxi kerneli arendajate meililistis Binderi protsessidevahelise suhtlusmehhanismi uut teostust, mis on ümber kirjutatud Rust keeles. Ümbertöö viidi läbi projekti raames, mille eesmärk on tugevdada turvalisust, edendada turvalisi programmeerimistehnikaid ja suurendada probleemide tuvastamise tõhusust Androidis mäluga töötamisel (umbes 70% kõigist Androidis tuvastatud ohtlikest haavatavustest on põhjustatud mäluga töötamise vigadest ). Binderi juurutamine Rustis on saavutanud funktsionaalsuse võrdsuse C-keele algversiooniga, läbib kõik AOSP (Android Open-Source Project) testid ja seda saab kasutada püsivara tööväljaannete loomiseks. Mõlema juurutuse jõudlus on ligikaudu samal tasemel (hälbed -1.96% ja +1.38%).

Allikas: opennet.ru

Lisa kommentaar