De release van de algemene programmeertaal Rust 1.74, opgericht door het Mozilla-project, maar nu ontwikkeld onder auspiciën van de onafhankelijke non-profitorganisatie Rust Foundation, is gepubliceerd. De taal is gericht op geheugenveiligheid en biedt de middelen om een hoog parallellisme te bereiken bij het uitvoeren van taken, terwijl het gebruik van een garbage collector en runtime wordt vermeden (runtime wordt beperkt tot basisinitialisatie en onderhoud van de standaardbibliotheek).
De geheugenbeheertechnieken van Rust bevrijden de ontwikkelaar van pointermanipulatiefouten en beschermen tegen problemen die voortkomen uit geheugenmanipulatie op laag niveau, zoals after-free toegang, null pointer-dereferenties, bufferoverruns en dergelijke. Om bibliotheken te distribueren, de assemblage te garanderen en afhankelijkheden te beheren, ontwikkelt het project de Cargo-pakketbeheerder. De kratten.io-repository wordt ondersteund voor het hosten van bibliotheken.
Geheugenveiligheid wordt in Rust afgedwongen tijdens het compileren door middel van referentiecontrole, het volgen van objecteigendom, overweging van de levensduur van objecten (scoping) en evaluatie van geheugentoegang tijdens runtime. Rust biedt ook bescherming tegen overflows van gehele getallen, vereist dat variabelewaarden vóór gebruik worden geïnitialiseerd, heeft een betere foutafhandeling in de standaardbibliotheek, gebruikt standaard het concept van onveranderlijke referenties en variabelen en biedt sterke statische typering om logische fouten te minimaliseren.
Belangrijkste innovaties:
- De mogelijkheid is toegevoegd om lintcontroles te configureren via het bestand Cargo.toml met het manifest van de pakketbeheerder. Er worden nieuwe secties "[lints]" en "[workspace.lints]" voorgesteld om lint-instellingen te definiëren, zoals het responsniveau (verbieden, weigeren, waarschuwen, toestaan). Wijzigingen hierin worden meegenomen bij het besluit of er opnieuw moet worden gebouwd. In plaats van bijvoorbeeld de vlaggen "-F", "-D", "-W" en "-A" tijdens de assembly op te geven of de kenmerken "#![forbid(unsafe_code)]" en "#![deny(clippy::enum_glob_use)]" aan de code toe te voegen, kunt u nu het volgende in het Cargo-manifest gebruiken: [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "deny"
- De Crate-pakketbeheerder ondersteunt nu authenticatie bij het verbinden met een repository. Ondersteuning voor het opslaan van authenticatieparameters in referentiearchieven is nu opgenomen in het basispakket. Linux (gebaseerd op libsecret), macOS (Sleutelhanger) en Windows (Windows (Credential Manager), maar het systeem is vanaf het begin modulair ontworpen en maakt samenwerking met verschillende providers mogelijk voor het opslaan en genereren van tokens; er is bijvoorbeeld een plugin ontwikkeld voor het gebruik van de 1Password wachtwoordmanager. Authenticatie kan door de repository worden aangevraagd voor alle bewerkingen, niet alleen voor het bevestigen van pakketpublicaties. ~/.cargo/config.toml [registry] global-credential-providers = ["cargo:token", "cargo:libsecret"]
- Gestabiliseerde ondersteuning voor retourtypeprojecties (impl_trait_projections), waardoor naar Self en T::Assoc kan worden verwezen in retourtypen zoals "async fn" en "-> impl Trait". struct Wrapper<'a, T>(&'a T); // Ondoorzichtige retourtypen die `Self` vermelden: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } trait Trait<'a> { type Assoc; fn new() -> Zelf::Assoc; } impl Trait<'_> voor () { type Assoc = (); fn new() {} } // Ondoorzichtige retourtypen die een bijbehorend type vermelden: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
- Een nieuw deel van de API is overgebracht naar de stabiele categorie, inclusief de methoden en implementaties van eigenschappen:
- Het attribuut “const”, dat de mogelijkheid bepaalt om het in elke context te gebruiken in plaats van constanten, wordt gebruikt in de functies:
- core::mem::transmute_copy
- str::is_ascii
- [u8]::is_ascii
- core::num::Verzadigend
- impl Van voor std::process::Stdio
- impl Van voor std::process::Stdio
- impl Van voor std::process::Child{Stdin, Stdout, Stderr}
- impl Van voor 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::Fout::andere
- impl TryFrom voor u16
- impl Van<&[T; N]>voor Vec
- impl Van<&mut [T; N]>voor Vec
- impl Van<[T; N]> voor Boog<[T]>
- impl Van<[T; N]> voor Rc<[T]>
- De compiler, toolchain, standaardbibliotheek en gegenereerde applicatie-executables stellen hogere eisen aan Apple-platforms, waardoor minimaal versies vereist zijn. macOS 10.12 Sierra, iOS 10 en tvOS 10, uitgebracht in 2016.
- Het derde ondersteuningsniveau is geïmplementeerd voor het i686-pc-windows-gnullvm-platform. Het derde niveau omvat basisondersteuning, maar zonder geautomatiseerd testen, het publiceren van officiële builds of het controleren of de code kan worden gebouwd.
- Het tweede ondersteuningsniveau voor het doelplatform loongarch64-unknown-none is geïmplementeerd. Het tweede niveau van ondersteuning betreft een montagegarantie.
Bovendien kunnen twee gebeurtenissen met betrekking tot de Rust-taal worden opgemerkt:
- Het Open Source Technology Improvement Fund (OSTIF), opgericht om de beveiliging van open source-projecten te versterken, heeft de resultaten gepubliceerd van een audit van het RustVMM-project, dat componenten levert voor het creëren van taakspecifieke hypervisors en monitors. virtuele machines (VMM). Bedrijven zoals Intel, Alibaba, Amazon, Google, Linaro en Red Hat nemen deel aan de ontwikkeling van het project. De Intel Cloud Hypervisor en Dragonball hypervisors zijn ontwikkeld op basis van RustVMM. De audit bevestigde de hoge kwaliteit van de codebase en het gebruik van beveiligingsverhogende technieken in de architectuur en implementatie. De audit identificeerde zes problemen die geen directe impact hebben op de beveiliging.
- Google heeft een mailinglijst voor kernelontwikkelaars geïntroduceerd. Linux Een nieuwe implementatie van het Binder-mechanisme voor interprocescommunicatie, herschreven in Rust. Deze herwerking maakte deel uit van een project om de beveiliging te verbeteren, veilige programmeerpraktijken te bevorderen en de efficiëntie van het detecteren van geheugenproblemen te verhogen. Android (ongeveer 70% van alle gevaarlijke kwetsbaarheden die zijn geïdentificeerd in Android(veroorzaakt door fouten in de geheugenafhandeling). De Binder-implementatie in Rust heeft dezelfde functionaliteit bereikt als de originele C-versie en doorstaat alle AOSP-tests (Android (Open-sourceproject) en kan worden gebruikt om werkende firmwareversies te creëren. De prestaties van beide implementaties zijn nagenoeg gelijk (afwijkingen binnen -1.96% en +1.38%).
Bron: opennet.ru
