Verëffentlechung vun der Rust 1.74 Programméiersprooch. RustVMM Audit. Rewriting Binder zu Rust

D'Verëffentlechung vun der Rust 1.74 allgemeng Zweck Programméierungssprooch, gegrënnt vum Mozilla-Projet, awer elo entwéckelt ënner der Regie vun der onofhängeger Asbl Rust Foundation, gouf publizéiert. D'Sprooch konzentréiert sech op d'Erënnerungssécherheet a stellt d'Moyene fir en héije Jobparallelismus z'erreechen, während d'Benotzung vun engem Gerempels a Runtime vermeit (Runtime gëtt op Basisinitialiséierung an Ënnerhalt vun der Standardbibliothéik reduzéiert).

Rust d'Erënnerungsveraarbechtungsmethoden retten den Entwéckler vu Feeler beim Manipulatioun vu Pointer a schützt géint Probleemer déi entstinn wéinst nidderegen Niveau Memory Handhabung, sou wéi Zougang zu engem Erënnerungsberäich nodeems se befreit gouf, Nullpointer ofgeleent, Pufferiwwerschlag, etc. Fir Bibliothéiken ze verdeelen, Builds ze bidden an Ofhängegkeeten ze managen, entwéckelt de Projet de Cargo Package Manager. De crates.io Repository gëtt ënnerstëtzt fir Bibliothéiken ze hosten.

Gedächtnissécherheet gëtt a Rust zur Zesummesetzungszäit zur Verfügung gestallt duerch Referenzprüfung, Verfollegung vum Objektbesëtzer, Verfollegung vun Objektliewenszäiten (Scope), an d'Korrektheet vum Gedächtniszougang wärend der Code Ausféierung bewäerten. Rust bitt och Schutz géint ganz Zuelen Iwwerschwemmungen, erfuerdert obligatoresch Initialiséierung vu variabelen Wäerter virum Gebrauch, handhabt Feeler besser an der Standardbibliothéik, applizéiert d'Konzept vun onverännerleche Referenzen a Variablen als Standard, bitt staark statesch Tippen fir logesch Feeler ze minimiséieren.

Haaptinnovatiounen:

  • D'Fähigkeit bäigefüügt fir Lintchecken iwwer d'Cargo.toml Datei mat dem Package Manager Manifest ze konfiguréieren. Fir Lint-Astellungen ze definéieren, wéi zum Beispill den Äntwertniveau (verbueden, verleegnen, warnen, erlaben), ginn nei Rubriken "[lints]" an "[workspace.lints]" proposéiert, Ännerungen an deenen berécksiichtegt ginn wann Dir eng Entscheedung iwwer d'Decisioun huelen. opbauen. Zum Beispill, amplaz d'"-F", "-D", "-W" an "-A" Fändelen ze spezifizéieren wann Dir d'"#![verbueden (onsécher_code)]" an "#![verleegnen (clippy) zesummesetzt oder bäigefüügt :" Attributer zum Code) :enum_glob_use)]" kënnen elo am Cargo Manifest benotzt ginn: [lints.rust] unsafe_code = "verbueden" [lints.clippy] enum_glob_use = "verleegnen"
  • De Crate Package Manager huet d'Fäegkeet bäigefüügt fir ze authentifizéieren wann Dir mat engem Repository verbënnt. D'Basisverdeelung enthält Ënnerstëtzung fir Authentifikatiounsparameter an Linux Credential Stores ze placéieren (baséiert op libsecret), macOS (Keychain) a Windows (Windows Credential Manager), awer de System gouf am Ufank modulär gemaach an erlaabt Iech d'Aarbecht mat verschiddene Fournisseuren ze organiséieren fir ze späicheren an Generéiere Tokens, zum Beispill, e Plugin gouf virbereet fir den 1Password Passwuert Manager ze benotzen. Authentifikatioun kann vum Repository fir all Operatioun erfuerderlech sinn, net nëmmen fir ze bestätegen datt Packagen publizéiert goufen. ~/.cargo/config.toml [Registry] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Ënnerstëtzung fir Retour-Typ Projektiounen (impl_trait_projections) gouf stabiliséiert, sou datt Self an T :: Assoc an Retour Typen wéi "async fn" an "-> impl Trait" ernimmt ginn. struct Wrapper<'a, T>(&'a T); // Opaque Retourtypen déi `Self` ernimmen: impl Wrapper<'_, ()> { async fn async_fn() -> Selbst { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } trait Trait<'a> { type Assoc; fn new() -> Self::Assoc; } impl Trait<'_> fir () { Typ Assoc = (); fn new() {} } // Opaque Retourtypen déi en assoziéierten Typ ernimmen: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • En neien Deel vun der API gouf an d'Kategorie vum Stall geplënnert, dorënner d'Methoden an d'Implementatioune vun de Charaktere goufen stabiliséiert:
  • Den Attribut "const", wat d'Méiglechkeet bestëmmt et an all Kontext ze benotzen anstatt Konstanten, gëtt a Funktiounen benotzt:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • Kär::num::Saturéierend
    • impl Vun fir std::process::Stdio
    • impl Vun fir std::process::Stdio
    • impl Vun fir std::process::Kand{Stdin, Stdout, Stderr}
    • impl Vun fir std::process::Kand{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::Feeler::aner
    • impl TryFrom fir u16
    • impl Vun <&[T; N]>fir Vec
    • impl Vun <& mut [T; N]>fir Vec
    • impl Vun <[T; N]> fir Arc<[T]>
    • impl Vun <[T; N]> fir Rc<[T]>
  • De Compiler, Toolkit, Standardbibliothéik, a generéiert Applikatiounsausführbaren hunn Ufuerderunge fir Apple Plattformen erhéicht, elo erfuerderen op d'mannst macOS 10.12 Sierra, iOS 10, an tvOS 10 verëffentlecht am 2016 fir ze lafen.
  • Den drëtten Niveau vun der Ënnerstëtzung gouf fir d'i686-pc-windows-gnullvm Plattform implementéiert. Den drëtten Niveau beinhalt d'Basis Ënnerstëtzung, awer ouni automatiséiert Testen, offiziell Builds ze publizéieren oder ze kontrolléieren ob de Code ka gebaut ginn.
  • Den zweeten Niveau vun der Ënnerstëtzung fir d'Loongarch64-unknown-none Zilplattform gouf implementéiert. Den zweeten Niveau vun der Ënnerstëtzung beinhalt eng Versammlungsgarantie.

Zousätzlech kënnen zwee Evenementer am Zesummenhang mat der Rust Sprooch bemierkt ginn:

  • Den OSTIF (Open Source Technology Improvement Fund), erstallt fir d'Sécherheet vun Open Source Projeten ze stäerken, huet d'Resultater vun engem Audit vum RustVMM Projet publizéiert, deen Komponenten ubitt fir Taskspezifesch Hypervisoren a virtuell Maschinn Monitore (VMMs) ze kreéieren. Firmen wéi Intel, Alibaba, Amazon, Google, Linaro a Red Hat bedeelegen un der Entwécklung vum Projet. Intel Cloud Hypervisor an Dragonball Hypervisoren ginn entwéckelt baséiert op RustVMM. Den Audit bestätegt déi héich Qualitéit vun der Codebasis an d'Benotzung vun Techniken an der Architektur an der Implementatioun fir maximal Sécherheet z'erreechen. Während dem Audit goufen 6 Problemer identifizéiert, déi keen direkten Impakt op d'Sécherheet haten.
  • Google huet eng nei Implementatioun vum Binder Interprocess Kommunikatiounsmechanismus agefouert, an der Rust Sprooch nei geschriwwen, op d'Linux Kernel Entwéckler Mailing Lëscht. D'Wiederaarbecht gouf als Deel vun engem Projet duerchgefouert fir d'Sécherheet ze stäerken, sécher Programméierungstechniken ze förderen an d'Effizienz ze erhéijen fir Probleemer z'identifizéieren wann Dir mat Erënnerung an Android schafft (ongeféier 70% vun alle geféierleche Schwachstelle identifizéiert an Android ginn duerch Feeler verursaacht wann Dir mat Erënnerung schafft ). D'Ëmsetze vu Binder am Rust huet Paritéit an der Funktionalitéit mat der Originalversioun an der C Sprooch erreecht, passéiert all AOSP (Android Open-Source Project) Tester a ka benotzt ginn fir Aarbechtseditioune vu Firmware ze kreéieren. D'Performance vu béiden Implementatiounen ass ongeféier um selwechten Niveau (Ofwäichunge bannent -1.96% an +1.38%).

Source: opennet.ru

Setzt e Commentaire