Rust 1.74 programazio-lengoaia kaleratzea. RustVMM auditoria. Binder Rust-en berridazten

Rust 1.74 erabilera orokorreko programazio-lengoaia argitaratu da, Mozilla proiektuak sortua, baina orain Rust Foundation irabazi asmorik gabeko erakunde independentearen babespean garatua. Lengoaiak memoriaren segurtasunean oinarritzen da eta lanaren paralelismo handia lortzeko bitartekoak eskaintzen ditu zabor-biltzailea eta exekuzio-denbora erabiltzea saihestuz (exekuzio-denbora liburutegi estandarraren hasierako oinarrizko hasierara eta mantentzera murrizten da).

Rust-en memoria maneiatzeko metodoek garatzaileari erakusleak manipulatzerakoan akatsetatik salbatzen dute eta maila baxuko memoria-kudeaketaren ondorioz sortzen diren arazoetatik babesten dute, hala nola, memoria-eremu batera atzitzea askatu ondoren, erakusle nuluak deserreferentziak egitea, buffer gainditzeak, etab. Liburutegiak banatzeko, eraikuntzak emateko eta mendekotasunak kudeatzeko, proiektuak Cargo paketeen kudeatzailea garatzen du. crates.io biltegia liburutegiak ostatatzeko onartzen da.

Memoriaren segurtasuna Rust-en konpilazio garaian eskaintzen da erreferentziak egiaztatzeko, objektuen jabetzaren jarraipena eginez, objektuen iraupenen (esparruak) jarraipena eginez eta kodearen exekuzioan memoria sarbidearen zuzentasuna ebaluatuz. Rust-ek osoko gainezkatzeen aurkako babesa eskaintzen du, erabili aurretik aldagaien balioak derrigorrezko hasieratzea eskatzen du, liburutegi estandarrean akatsak hobeto kudeatzen ditu, erreferentzia eta aldagai aldaezinen kontzeptua lehenespenez aplikatzen du, idazketa estatiko sendoa eskaintzen du akats logikoak minimizatzeko.

Berrikuntza nagusiak:

  • Cargo.toml fitxategiaren bidez lint egiaztapenak konfiguratzeko gaitasuna gehitu da pakete-kudeatzailearen manifestuarekin. Lint ezarpenak definitzeko, hala nola erantzun-maila (debekatu, ukatu, ohartarazi, baimendu), "[lints]" eta "[workspace.lints]" atal berriak proposatzen dira, zeinetan aldaketak kontuan hartzen diren erabaki bat hartzeko. berreraikitzea. Esate baterako, β€œ-F”, β€œ-D”, β€œ-W” eta β€œ-A” banderak zehaztu beharrean β€œ#![debekatu(ez-segurua_kodea)]” eta β€œ#![ukatu(clippy” gehitzean :” kodeari atributuak) :enum_glob_use)]" orain Cargo manifestuan erabil daiteke: [lints.rust] unsafe_code = "debekatu" [lints.clippy] enum_glob_use = "ukatu"
  • Crate pakete-kudeatzaileak biltegi batera konektatzean autentifikatzeko gaitasuna gehitu du. Oinarrizko paketeak Linux kredentzial-dendetan (libsecret-en oinarrituta), macOS (Keychain) eta Windows (Windows Credential Manager) autentifikazio-parametroak jartzeko euskarria biltzen du, baina hasiera batean sistema modularra da eta hainbat hornitzailerekin lana antolatzeko aukera ematen du gordetzeko eta gordetzeko. tokenak sortuz, adibidez, plugin bat prestatu da 1Password pasahitz kudeatzailea erabiltzeko. Baliteke autentifikazioa behar izatea biltegiak edozein eragiketa egiteko, ez paketeak argitaratu direla baieztatzeko soilik. ~/.cargo/config.toml [erregistroa] global-credential-providers = ["karga:token", "karga:libsecret"]
  • Itzulpen motako proiekzioetarako (impl_trait_projections) euskarria egonkortu da, "async fn" eta "->impl Trait" bezalako itzulera motetan Self eta T::Assoc aipatzeko aukera emanez. struct Wrapper<'a, T>(&'a T); // `Self` aipatzen duten itzulera mota opakuak: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } ezaugarri Ezaugarri<'a> { mota Assoc; fn new() -> Self::Assoc; } impl Trait<'_> for () { type Assoc = (); fn new() {} } // Lotutako mota bat aipatzen duten itzulera opakuak: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • APIaren zati berri bat egonkorren kategoriara eraman da, eta ezaugarrien metodoak eta inplementazioak egonkortu dira:
  • "const" atributua, konstanteen ordez edozein testuingurutan erabiltzeko aukera zehazten duena, funtzioetan erabiltzen da:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::ascii da
    • core::num::Saturatzailea
    • 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::Errorea::beste
    • inplikatu TryFrom u16rentzat
    • inplik From<&[T; N]> Vec
    • inplik From<&mut [T; N]> Vec
    • inplik From<[T; N]> Arku<[T]>rako
    • inplik From<[T; N]> Rc<[T]>rentzat
  • Konpiladoreak, tresna-kitak, liburutegi estandarrak eta sortutako aplikazio exekutagarriek eskakizunak handitu dituzte Apple plataformetarako, orain gutxienez 10.12an kaleratutako macOS 10 Sierra, iOS 10 eta tvOS 2016 exekutatzeko eskatzen dute.
  • Hirugarren laguntza-maila i686-pc-windows-gnullvm plataformarako ezarri da. Hirugarren mailak oinarrizko euskarria dakar, baina proba automatizatu gabe, eraikuntza ofizialak argitaratu edo kodea eraiki daitekeen egiaztatu gabe.
  • Loongarch64-unknown-none xede-plataformaren bigarren laguntza-maila ezarri da. Bigarren laguntza-mailak muntaketa-bermea dakar.

Gainera, Rust hizkuntzari lotutako bi gertakari ere nabarmen daitezke:

  • OSTIF (Open Source Technology Improvement Fund), kode irekiko proiektuen segurtasuna indartzeko sortua, RustVMM proiektuaren auditoria baten emaitzak argitaratu ditu, zeinak zereginen espezifikoak diren hipervisoreak eta makina birtualen monitoreak (VMM) sortzeko osagaiak eskaintzen dituena. Proiektuaren garapenean Intel, Alibaba, Amazon, Google, Linaro eta Red Hat bezalako enpresak parte hartzen ari dira. Intel Cloud Hypervisor eta Dragonball hypervisors garatzen ari dira RustVMMn oinarrituta. Ikuskaritzak kode-oinarriaren kalitate handia eta segurtasun maximoa lortzera zuzendutako arkitekturan eta inplementazioan tekniken erabilera baieztatu zuen. Ikuskaritzan, segurtasunean eragin zuzenik izan ez duten 6 arazo identifikatu dira.
  • Google-k Binder prozesuen arteko komunikazio-mekanismoaren inplementazio berria aurkeztu zuen, Rust hizkuntzan berridatzia, Linux kernel-en garatzaileen posta-zerrendan. Berrikuntza proiektu baten barruan egin da, segurtasuna indartzeko, programazio teknika seguruak sustatzeko eta Android-en memoriarekin lan egitean arazoak identifikatzeko eraginkortasuna areagotzeko (Android-en identifikatutako ahultasun arriskutsu guztien % 70 inguru memoriarekin lan egitean akatsek eragiten dute). ). Binder in Rust-en inplementazioak C hizkuntzan jatorrizko bertsioaren funtzionalitatearen parekotasuna lortu du, AOSP (Android Open-Source Project) proba guztiak gainditzen ditu eta firmwarearen lan-edizioak sortzeko erabil daiteke. Bi inplementazioen errendimendua maila berean dago gutxi gorabehera (% -1.96 eta +1.38 arteko desbideratzeak).

Iturria: opennet.ru

Gehitu iruzkin berria