Eldono de la Rust 1.74 programlingvo. RustVMM-revizio. Reskriba Binder en Rusto

La eldono de la ĝeneraluzebla programlingvo Rust 1.74, fondita de la projekto Mozilla, sed nun disvolvita sub la aŭspicioj de la sendependa neprofitcela organizaĵo Rust Foundation, estis publikigita. La lingvo temigas memorsekurecon kaj disponigas la rimedojn por atingi altan laborparalelecon evitante la uzon de rubkolektilo kaj rultempo (rultempo estas reduktita al baza inicialigo kaj prizorgado de la norma biblioteko).

La memormanipulaj metodoj de Rust savas la ellaboranton de eraroj dum manipulado de montriloj kaj protektas kontraŭ problemoj kiuj ekestas pro malaltnivela memortraktado, kiel ekzemple alirado de memorareo post kiam ĝi estis liberigita, dereferencing nulmontriloj, bufrotranspaso, ktp. Por distribui bibliotekojn, provizi konstruaĵojn kaj administri dependecojn, la projekto disvolvas la Cargo-pakaĵmanaĝeron. La deponejo crates.io estas subtenata por gastigado de bibliotekoj.

Memorsekureco estas disponigita en Rust ĉe kompiltempo tra referenckontrolado, konservante trakon de objektoposedo, konservante trakon de objektovivdaŭroj (kampoj), kaj taksante la ĝustecon de memoraliro dum kodekzekuto. Rusto ankaŭ provizas protekton kontraŭ entjeraj superfluoj, postulas devigan inicialigon de variaj valoroj antaŭ uzo, pli bone pritraktas erarojn en la norma biblioteko, aplikas la koncepton de neŝanĝeblaj referencoj kaj variabloj defaŭlte, ofertas fortan senmovan tajpadon por minimumigi logikajn erarojn.

Ĉefaj novigoj:

  • Aldonis la kapablon agordi lint-kontrolojn per la Cargo.toml-dosiero kun la pakaĵmanaĝera manifesto. Por difini lint-agordojn, kiel la respondnivelon (malpermesi, nei, averti, permesi), novaj sekcioj "[lints]" kaj "[workspace.lints]" estas proponitaj, ŝanĝoj en kiuj estas konsiderataj kiam decido pri rekonstruado. Ekzemple, anstataŭ specifi la flagojn "-F", "-D", "-W" kaj "-A" dum kunigo aŭ aldonado de la "#![malpermeso(nesekura_kodo)]" kaj "#![deny(clippy). :” atributoj al la kodo) :enum_glob_use)]" nun povas esti uzata en la Cargo manifesto: [lints.rust] unsafe_code = "malpermesu" [lints.clippy] enum_glob_use = "nei"
  • La pakaĵa administranto de Crate aldonis la kapablon aŭtentikigi kiam li konektas al deponejo. La baza distribuo inkluzivas subtenon por meti aŭtentikajn parametrojn en Linuksaj akreditejoj (bazitaj sur libsecret), macOS (Keychain) kaj Vindozo (Windows Credential Manager), sed la sistemo estis komence modula kaj permesas vin organizi laboron kun diversaj provizantoj por stokado kaj generante ĵetonojn, ekzemple, kromaĵo estis preparita por uzi la pasvortmanaĝeron 1Password. Aŭtentigo povas esti postulata de la deponejo por ajna operacio, ne nur por konfirmi ke pakoj estis publikigitaj. ~/.cargo/config.toml [registro] global-credential-providers = ["kargo:token", "cargo:libsecret"]
  • Subteno por revenspecaj projekcioj (impl_trait_projections) estis stabiligita, permesante al Self kaj T::Asoc esti menciitaj en revenspecoj kiel "async fn" kaj "->impl Trait". struct Wrapper<'a, T>(&'a T); // Maldiafanaj revenspecoj kiuj mencias `Mem': impl Wrapper<'_, ()> { async fn async_fn() -> Mem { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } trajto Trajto<'a> { tipo Assoc; fn new() -> Mem::Assoc; } impl Trait<'_> for () { type Assoc = (); fn new() {} } // Maldiafanaj revenspecoj, kiuj mencias rilatan tipon: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs () -> impl Iteratoro { /* … */ } }
  • Nova parto de la API estis movita al la kategorio de stalo, inkluzive de la metodoj kaj efektivigoj de trajtoj estis stabiligitaj:
  • La atributo "const", kiu determinas la eblecon uzi ĝin en iu ajn kunteksto anstataŭ konstantoj, estas uzata en la funkcioj:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • core::num::Saturita
    • impl De por std::process::Stdio
    • impl De por std::process::Stdio
    • impl De por std::process::Child{Stdin, Stdout, Stderr}
    • impl De por 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::Eraro::alia
    • impli ProvuDe por u16
    • impl De<&[T; N]>por Vec
    • impl De<&mut [T; N]>por Vec
    • impl De<[T; N]> por Arko<[T]>
    • impl De<[T; N]> por Rc<[T]>
  • La kompililo, ilaro, norma biblioteko kaj generitaj aplikaĵaj realigeblaj pliigis postulojn por Apple-platformoj, nun postulante almenaŭ macOS 10.12 Sierra, iOS 10 kaj tvOS 10 publikigitaj en 2016 por funkcii.
  • La tria nivelo de subteno estis efektivigita por la platformo i686-pc-windows-gnullvm. La tria nivelo implikas bazan subtenon, sed sen aŭtomatigita testado, publikigado de oficialaj konstruaĵoj aŭ kontrolado ĉu la kodo povas esti konstruita.
  • La dua nivelo de subteno por la cela platformo loongarch64-unknown-none estis efektivigita. La dua nivelo de subteno implikas kunvenan garantion.

Plie, du okazaĵoj ligitaj al la Rust-lingvo povas esti notitaj:

  • La OSTIF (Open Source Technology Improvement Fund), kreita por plifortigi la sekurecon de malfermfontaj projektoj, publikigis la rezultojn de revizio de la RustVMM-projekto, kiu disponigas komponentojn por kreado de taskspecifaj hiperviziiloj kaj virtualaj maŝinaj ekranoj (VMMoj). Firmaoj kiel Intel, Alibaba, Amazon, Google, Linaro kaj Red Hat partoprenas en la disvolviĝo de la projekto. Intel Cloud Hypervisor kaj Dragonball-hiperviziiloj estas evoluigitaj surbaze de RustVMM. La auditorio konfirmis la altan kvaliton de la koda bazo kaj la uzon de teknikoj en la arkitekturo kaj efektivigo celitaj atingi maksimuman sekurecon. Dum la revizio, 6 problemoj estis identigitaj, kiuj ne havis rektan efikon al sekureco.
  • Guglo enkondukis novan efektivigon de la interproceza komunikmekanismo de Binder, reverkitan en la Rust-lingvo, al la dissendolisto de Linuksaj kernaj programistoj. La relaboro estis farita kiel parto de projekto por plifortigi sekurecon, antaŭenigi sekurajn programajn teknikojn kaj pliigi la efikecon de identigado de problemoj kiam oni laboras kun memoro en Android (ĉirkaŭ 70% de ĉiuj danĝeraj vundeblecoj identigitaj en Android estas kaŭzitaj de eraroj kiam oni laboras kun memoro). ). La efektivigo de Binder in Rust atingis egalecon en funkcieco kun la originala versio en la C-lingvo, trapasas ĉiujn AOSP (Android Open-Source Project) testojn kaj povas esti uzata por krei funkciajn eldonojn de firmvaro. La agado de ambaŭ efektivigoj estas proksimume sur la sama nivelo (devojoj ene de -1.96% kaj +1.38%).

fonto: opennet.ru

Aldoni komenton