Rust 1.90 is uitgebracht. Toolkit voor het maken van Windows-drivers in Rust

De release van de programmeertaal Rust 1.90 is gepubliceerd, oorspronkelijk ontwikkeld door het Mozilla-project, maar nu verder ontwikkeld onder de auspiciën van de onafhankelijke non-profitorganisatie Rust Foundation. De taal is gericht op veilige geheugentoegang en biedt middelen voor hoge parallelisatie van taakuitvoering, zonder gebruik te maken van een garbage collector en runtime (de runtime beperkt zich tot basisinitialisatie en ondersteuning van de standaardbibliotheek).

Geheugenmethoden in Rust helpen ontwikkelaars om fouten bij het manipuleren van pointers te voorkomen en beschermen tegen problemen die voortkomen uit laag-niveau geheugenwerk, zoals toegang tot geheugen na vrijgave, derefereren van null pointers, buffer overflows, enz. Voor het verspreiden van bibliotheken, het garanderen van builds en het beheren van projectafhankelijkheden is er een pakketbeheerder genaamd Cargo ontwikkeld. Voor het plaatsen van bibliotheken wordt de repository crates.io ondersteund.

Veilige geheugenwerking in Rust wordt tijdens de compilatie gegarandeerd door middel van referentiecontrole, het bijhouden van eigenaarschap van objecten, het in acht nemen van de levensduur van objecten (scope) en het evalueren van toegangsrechten tot geheugen tijdens de uitvoering van code. Rust biedt ook middelen om integer-overflows te voorkomen, vereist dat waarden van variabelen voor gebruik worden geïnitialiseerd, behandelt fouten beter in de standaardbibliotheek, past het concept van onveranderlijke (immutable) referenties en variabelen als standaard toe en biedt sterke statische type-onderzoek voor het minimaliseren van logische fouten.

Belangrijkste vernieuwingen:

  • Op Linux op x86_64-architectuurcomputers wordt standaard de LLD-linker van het LLVM-project gebruikt voor de dynamische binding van crate-pakketten. Het gebruik van LLD in vergelijking met de BFD-linker heeft geleid tot verbeterde prestaties bij het linken van grote uitvoerbare bestanden en projecten met een grote hoeveelheid debug-informatie, evenals een snellere incrementele herbouw. In de meeste gevallen is LLD achterwaarts compatibel met BFD. Bij problemen kan BFD opnieuw worden ingeschakeld door in de omgevingsvariabele RUSTFLAGS de vlag «-C linker-features=-lld» op te geven of door toe te voegen aan het configuratiebestand .cargo/config.toml: [target.x86_64-unknown-linux-gnu] rustflags = [«-Clinker-features=-lld»]
  • In de package manager cargo is er in het commando «publish» een optie «—workspace» geïmplementeerd, waarmee automatisch alle pakketten uit het geselecteerde werkgebied (een set pakketten die één Cargo.lock-bestand gebruikt en een gezamenlijke buildresultaatmap) worden gepubliceerd, waarbij de volgorde van de pakketten behouden blijft en rekening wordt gehouden met de afhankelijkheden.
  • Een nieuwe lading API's is gestabiliseerd, inclusief gestabiliseerde methoden en implementaties van traits:
    • u{n}::checked_sub_signed
    • u{n}::overflowing_sub_signed
    • u{n}::saturating_sub_signed
    • u{n}::wrapping_sub_signed
    • impl Copy voor IntErrorKind
    • impl Hash voor IntErrorKind
    • impl PartialEq voor CStr
    • impl PartialEq voor CStr
    • impl PartialEq<Cow> voor CStr
    • impl PartialEq voor CString
    • impl PartialEq voor CString
    • impl PartialEq<Cow> voor CString
    • impl PartialEq voor Cow
    • impl PartialEq voor Cow
    • impl PartialEq voor Cow
  • De eigenschap "const" is toegepast in de functies:
    • ::reverse
    • f32::floor
    • f32::ceil
    • f32::trunc
    • f32::fract
    • f32::round
    • f32::round_ties_even
    • f64::floor
    • f64::ceil
    • f64::trunc
    • f64::fract
    • f64::round
    • f64::round_ties_even
  • Voor doelplatforms op basis van de Musl-bibliotheek, die op het derde niveau van ondersteuning zijn geplaatst, is standaard dynamische binding ingeschakeld: mips64-unknown-linux-muslabi64, powerpc64-unknown-linux-musl, powerpc-unknown-linux-musl, powerpc-unknown-linux-muslspe, riscv32gc-unknown-linux-musl, s390x-unknown-linux-musl en thumbv7neon-unknown-linux-musleabihf.
  • Het doelplatform "x86_64-apple-darwin" is van het eerste ondersteuningsniveau naar het tweede verschoven (Apple is van plan om ondersteuning voor de x86_64-architectuur stop te zetten). Het eerste ondersteuningsniveau houdt in dat er binaire builds worden gevormd, grondige tests worden uitgevoerd en de hoogste ondersteuning voor het platform wordt geboden — elke wijziging in de compiler wordt gecontroleerd door het uitvoeren van een volledige testset. Het tweede ondersteuningsniveau houdt in dat er garantie is voor de build, maar geen garanties voor het doorlopen van de testset.

Daarnaast kan worden opgemerkt dat Microsoft een toolkit voor de ontwikkeling van Windows-drivers in de programmeertaal Rust ontwikkelt. Op GitHub is al een set crate-pakketten geplaatst voor het maken van drivers op basis van WDM (Windows Driver Kit), KMDF (Kernel-Mode Driver Framework) en UMDF (User-Mode Driver Framework), evenals Win32-services die bruikbaar zijn in Windows 11. Het doel van het project is om ontwikkelaars in de programmeertaal Rust bibliotheken en functies te bieden die vergelijkbaar zijn met die in de WDK-toolkit voor C-drivers. In de huidige fase gebruikt de driverontwikkelings-toolkit in Rust een groot aantal unsafe-aanroepen bij interactie met de Windows-subsystemen, maar in de toekomst worden veilige abstracties voorbereid voor kernelstructuren en DDI (Device Driver Interface). De resultaten van het project worden verspreid onder de MIT- en Apache 2.0-licenties.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster