Pagpagawas sa Rust 1.74 programming language. RustVMM audit. Pagsulat pag-usab sa Binder sa Rust

Ang pagpagawas sa Rust 1.74 nga kinatibuk-ang katuyoan nga programming language, nga gitukod sa proyekto sa Mozilla, apan karon naugmad ubos sa pagdumala sa independenteng non-profit nga organisasyon nga Rust Foundation, gimantala. Ang lengguwahe nagtutok sa kaluwasan sa panumduman ug naghatag sa mga paagi aron makab-ot ang taas nga paralelismo sa trabaho samtang naglikay sa paggamit sa usa ka tigkolekta sa basura ug runtime (ang runtime gikunhoran ngadto sa batakang pagsugod ug pagmentinar sa standard library).

Ang mga pamaagi sa pagdumala sa panumduman sa Rust nagluwas sa developer gikan sa mga sayup sa pagmaniobra sa mga pointer ug pagpanalipod batok sa mga problema nga motumaw tungod sa ubos nga lebel sa pagdumala sa panumduman, sama sa pag-access sa usa ka lugar sa panumduman human kini mapagawas, pagtangtang sa mga null pointer, pag-overrun sa buffer, ug uban pa. Sa pag-apod-apod sa mga librarya, paghatag og mga pagtukod ug pagdumala sa mga dependency, ang proyekto nagpalambo sa Cargo package manager. Gisuportahan ang crates.io repository alang sa pag-host sa mga librarya.

Ang kaluwasan sa panumduman gihatag sa Rust sa oras sa pag-compile pinaagi sa pagsusi sa reference, pagsubay sa pagpanag-iya sa butang, pagsubay sa mga kinabuhi sa butang (scopes), ug pagtimbang-timbang sa pagkahusto sa pag-access sa memorya sa panahon sa pagpatuman sa code. Naghatag usab ang Rust og proteksyon batok sa pag-awas sa integer, nanginahanglan mandatory nga pagsugod sa mga variable nga kantidad sa wala pa gamiton, pagdumala sa mga sayup nga mas maayo sa standard nga librarya, gipadapat ang konsepto sa dili mausab nga mga pakisayran ug mga variable nga default, nagtanyag kusog nga static nga pag-type aron maminusan ang mga lohikal nga sayup.

Panguna nga mga inobasyon:

  • Gidugang ang abilidad sa pag-configure sa mga tseke sa lint pinaagi sa Cargo.toml file nga adunay manifest manager sa package. Aron ipasabut ang mga setting sa lint, sama sa lebel sa pagtubag (pagdili, pagdumili, pagpasidaan, pagtugot), bag-ong mga seksyon nga "[lints]" ug "[workspace.lints]" gisugyot, mga pagbag-o nga gikonsiderar kung maghimo usa ka desisyon bahin sa. pagtukod pag-usab. Pananglitan, imbes nga ipiho ang "-F", "-D", "-W" ug "-A" nga mga bandila kung mag-assemble o magdugang sa "#! [dili (dili luwas_kode)]" ug "#! [pagdumili (clippy) :” attributes to the code): enum_glob_use)]" pwede na magamit sa Cargo manifest: [lints.rust] unsafe_code = "dili" [lints.clippy] enum_glob_use = "deny"
  • Gidugang sa tagdumala sa pakete sa Crate ang abilidad sa pag-authenticate kung magkonektar sa usa ka repositoryo. Ang sukaranan nga pag-apod-apod naglakip sa suporta alang sa pagbutang sa mga parameter sa pag-authenticate sa mga tindahan sa kredensyal sa Linux (base sa libsecret), macOS (Keychain) ug Windows (Windows Credential Manager), apan ang sistema sa sinugdan gihimo nga modular ug gitugotan ka sa pag-organisar sa trabaho sa lainlaing mga provider alang sa pagtipig ug paghimo og mga token, pananglitan, usa ka plugin ang giandam alang sa paggamit sa 1Password password manager. Ang pag-authenticate mahimong gikinahanglan sa repository alang sa bisan unsang operasyon, dili lamang sa pagkumpirma nga ang mga pakete gimantala. ~/.cargo/config.toml [registry] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Ang suporta alang sa mga return type projection (impl_trait_projections) gipalig-on, nga nagtugot sa Kaugalingon ug T::Assoc nga hisgutan sa mga tipo sa pagbalik sama sa "async fn" ug "->impl Trait". struct Wrapper<'a, T>(&'a T); // Opaque return type nga naghisgot sa `Self`: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } kinaiya Trait<'a> { type Assoc; fn bag-o() -> Kaugalingon::Assoc; } impl Trait<'_> para sa () { type Assoc = (); fn new() {} } // Opaque nga mga tipo sa pagbalik nga naghisgot ug kaubang tipo: impl<'a, T: Trait<'a>> Wrapper<'a, T> {async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • Usa ka bag-ong bahin sa API ang gibalhin sa kategorya nga stable, lakip ang mga pamaagi ug pagpatuman sa mga kinaiya nga na-stabilize:
  • Ang "const" nga hiyas, nga nagtino sa posibilidad sa paggamit niini sa bisan unsa nga konteksto imbes nga mga constant, gigamit sa mga gimbuhaton:
    • kinauyokan::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • kinauyokan::num::Saturating
    • impl Gikan sa para sa std::proseso::Stdio
    • impl Gikan sa para sa std::proseso::Stdio
    • impl Gikan sa para sa std::proseso::Bata{Stdin, Stdout, Stderr}
    • impl Gikan sa para sa std::proseso::Bata{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::Error::uban pa
    • impl TryFrom para sa u16
    • impl Gikan sa<&[T; N]> alang sa Vec
    • impl Gikan sa<&mut [T; N]> alang sa Vec
    • impl Gikan sa<[T; N]> para sa Arc<[T]>
    • impl Gikan sa<[T; N]> para sa Rc<[T]>
  • Ang compiler, toolkit, standard library, ug namugna nga mga executable sa aplikasyon nakadugang sa mga kinahanglanon alang sa mga platform sa Apple, karon nanginahanglan ug macOS 10.12 Sierra, iOS 10, ug tvOS 10 nga gipagawas sa 2016 aron modagan.
  • Ang ikatulo nga lebel sa suporta gipatuman alang sa i686-pc-windows-gnullvm platform. Ang ikatulo nga lebel naglakip sa batakang suporta, apan walay automated nga pagsulay, pagmantala sa opisyal nga pagtukod, o pagsusi kon ang code mahimo bang matukod.
  • Ang ikaduhang lebel sa suporta alang sa loongarch64-unknown-none target nga plataporma gipatuman na. Ang ikaduhang lebel sa suporta naglakip sa garantiya sa asembliya.

Dugang pa, duha ka mga panghitabo nga may kalabutan sa Rust nga pinulongan mahimong mamatikdan:

  • Ang OSTIF (Open Source Technology Improvement Fund), nga gimugna aron mapalig-on ang seguridad sa open source nga mga proyekto, nagpatik sa mga resulta sa usa ka audit sa RustVMM nga proyekto, nga naghatag og mga sangkap alang sa paghimo sa task-specific hypervisors ug virtual machine monitors (VMMs). Ang mga kompanya sama sa Intel, Alibaba, Amazon, Google, Linaro ug Red Hat nag-apil sa pagpalambo sa proyekto. Ang Intel Cloud Hypervisor ug Dragonball hypervisor gipalambo base sa RustVMM. Gikumpirma sa audit ang taas nga kalidad sa base sa code ug ang paggamit sa mga teknik sa arkitektura ug pagpatuman nga gitumong sa pagkab-ot sa labing taas nga seguridad. Atol sa pag-audit, 6 ka mga problema ang giila nga walay direktang epekto sa kaluwasan.
  • Gipaila sa Google ang usa ka bag-ong pagpatuman sa mekanismo sa komunikasyon nga interprocess sa Binder, nga gisulat pag-usab sa Rust nga pinulongan, ngadto sa Linux kernel developer mailing list. Gihimo ang pag-usab isip bahin sa usa ka proyekto aron mapalig-on ang seguridad, mapauswag ang luwas nga mga teknik sa pagprograma ug madugangan ang kahusayan sa pag-ila sa mga problema kung nagtrabaho uban ang panumduman sa Android (mga 70% sa tanan nga peligro nga mga kahuyangan nga nahibal-an sa Android tungod sa mga sayup kung nagtrabaho uban ang memorya. ). Ang pagpatuman sa Binder sa Rust nakab-ot ang pagkaparehas sa pagpaandar sa orihinal nga bersyon sa C nga lengguwahe, gipasa ang tanan nga mga pagsulay sa AOSP (Android Open-Source Project) ug mahimong magamit sa paghimo sa nagtrabaho nga mga edisyon sa firmware. Ang pasundayag sa duha ka mga pagpatuman gibana-bana sa parehas nga lebel (mga pagtipas sulod sa -1.96% ug +1.38%).

Source: opennet.ru

Idugang sa usa ka comment