Release av programmeringsspråket Rust 1.74. RustVMM revision. Omskrivning av pärm i rost

Utgivningen av Rust 1.74 allmänt programmeringsspråk, grundat av Mozilla-projektet, men nu utvecklat under överinseende av den oberoende ideella organisationen Rust Foundation, har publicerats. Språket fokuserar på minnessäkerhet och ger möjlighet att uppnå hög jobbparallellism samtidigt som man undviker användningen av en skräpsamlare och körtid (körtiden reduceras till grundläggande initiering och underhåll av standardbiblioteket).

Rusts minneshanteringsmetoder räddar utvecklaren från fel vid manipulering av pekare och skyddar mot problem som uppstår på grund av minneshantering på låg nivå, som att komma åt ett minnesområde efter att det har frigjorts, avläsning av nollpekare, buffertöverskridningar, etc. För att distribuera bibliotek, tillhandahålla builds och hantera beroenden utvecklar projektet Cargo package manager. Crates.io-förvaret stöds för värdbibliotek.

Minnessäkerhet tillhandahålls i Rust vid kompilering genom referenskontroll, hålla reda på objektägande, hålla reda på objektlivslängder (scopes) och bedöma riktigheten av minnesåtkomst under kodexekvering. Rust ger också skydd mot heltalsspill, kräver obligatorisk initiering av variabelvärden innan användning, hanterar fel bättre i standardbiblioteket, tillämpar konceptet med oföränderliga referenser och variabler som standard, erbjuder stark statisk typning för att minimera logiska fel.

Huvudsakliga innovationer:

  • Lade till möjligheten att konfigurera luddkontroller via filen Cargo.toml med pakethanterarens manifest. För att definiera luddinställningar, såsom svarsnivån (förbjud, neka, varna, tillåt), föreslås nya avsnitt "[lints]" och "[workspace.lints]", där ändringar beaktas när beslut fattas om ombyggnad. Till exempel, istället för att ange flaggorna "-F", "-D", "-W" och "-A" när du sätter ihop eller lägger till "#![förbjud(osäker_kod)]" och "#![deny(clippy) :” attribut till koden) :enum_glob_use)]” kan nu användas i Cargo-manifestet: [lints.rust] unsafe_code = "förbjud" [lints.clippy] enum_glob_use = "neka"
  • Crate-pakethanteraren har lagt till möjligheten att autentisera när du ansluter till ett arkiv. Grundpaketet innehåller stöd för att placera autentiseringsparametrar i Linux-autentiseringsbutiker (baserat på libsecret), macOS (Keychain) och Windows (Windows Credential Manager), men systemet är initialt gjort modulärt och låter dig organisera arbetet med olika leverantörer för lagring och generera tokens, till exempel, har en plugin förberetts för att använda 1Password-lösenordshanteraren. Autentisering kan krävas av förvaret för alla åtgärder, inte bara för att bekräfta att paket har publicerats. ~/.cargo/config.toml [register] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Stödet för projektioner av returtyp (impl_trait_projections) har stabiliserats, vilket gör att Self och T::Assoc kan nämnas i returtyper som "async fn" och "->impl Trait". struct Wrapper<'a, T>(&'a T); // Opaka returtyper som nämner `Själv`: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } egenskap Egenskap<'a> { typ Assoc; fn new() -> Self::Assoc; } impl Egenskap<'_> för () { typ Assoc = (); fn new() {} } // Opaka returtyper som nämner en associerad typ: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • En ny del av API:t har flyttats till kategorin stabil, inklusive metoder och implementeringar av egenskaper har stabiliserats:
  • Attributet "const", som bestämmer möjligheten att använda det i alla sammanhang istället för konstanter, används i funktioner:
    • kärna::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • kärna::num::Mättande
    • impl From för std::process::Stdio
    • impl From för std::process::Stdio
    • impl From för std::process::Child{Stdin, Stdout, Stderr}
    • impl From för 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::Fel::annat
    • impl TryFrom för u16
    • impl Från<&[T; N]>för Vec
    • impl Från<&mut [T; N]>för Vec
    • impl Från <[T; N]> för Arc<[T]>
    • impl Från <[T; N]> för Rc<[T]>
  • Kompilatorn, verktygslådan, standardbiblioteket och genererade programkörbara program har ökade krav på Apple-plattformar, och kräver nu minst macOS 10.12 Sierra, iOS 10 och tvOS 10 som släpptes 2016 för att kunna köras.
  • Den tredje nivån av stöd har implementerats för i686-pc-windows-gnullvm-plattformen. Den tredje nivån innebär grundläggande support, men utan automatiserad testning, publicering av officiella builds eller kontroll av om koden kan byggas.
  • Den andra nivån av stöd för målplattformen loongarch64-unknown-none har implementerats. Den andra stödnivån innebär en monteringsgaranti.

Dessutom kan två händelser relaterade till Rust-språket noteras:

  • OSTIF (Open Source Technology Improvement Fund), skapad för att stärka säkerheten för projekt med öppen källkod, har publicerat resultaten av en revision av RustVMM-projektet, som tillhandahåller komponenter för att skapa uppgiftsspecifika hypervisorer och virtuella maskinövervakare (VMM). Företag som Intel, Alibaba, Amazon, Google, Linaro och Red Hat deltar i utvecklingen av projektet. Intel Cloud Hypervisor och Dragonball hypervisorer utvecklas baserat på RustVMM. Granskningen bekräftade den höga kvaliteten på kodbasen och användningen av tekniker i arkitekturen och implementeringen som syftar till att uppnå maximal säkerhet. Under revisionen identifierades 6 problem som inte hade någon direkt inverkan på säkerheten.
  • Google introducerade en ny implementering av Binders interprocess-kommunikationsmekanism, omskriven på språket Rust, till Linux-kärnan-utvecklarens e-postlista. Omarbetningen genomfördes som en del av ett projekt för att stärka säkerheten, främja säkra programmeringstekniker och öka effektiviteten i att identifiera problem när man arbetar med minne i Android (cirka 70 % av alla farliga sårbarheter som identifieras i Android orsakas av fel när man arbetar med minne ). Implementeringen av Binder i Rust har uppnått paritet i funktionalitet med originalversionen på C-språket, klarar alla AOSP-tester (Android Open-Source Project) och kan användas för att skapa fungerande versioner av firmware. Prestanda för båda implementeringarna är ungefär på samma nivå (avvikelser inom -1.96% och +1.38%).

Källa: opennet.ru

Lägg en kommentar