De release van de programmeertaal Rust 1.79, die oorspronkelijk is ontwikkeld door Mozilla maar nu wordt ondersteund door de onafhankelijke non-profitorganisatie Rust Foundation, is gepubliceerd. De taal richt zich op veilige geheugenwerking en biedt middelen voor het bereiken van hoge parallelisatie van taken, terwijl het zonder een garbage collector en runtime werkt (de runtime wordt beperkt 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:
- Er is ondersteuning toegevoegd voor inline-constanten, die direct in de code kunnen worden opgegeven met behulp van de blokken "const { … }", die in de context van constanten worden verwerkt en waarmee het mogelijk is om geen aparte constanten te definiëren. De code in het blok "const { … }" wordt tijdens de compilatie berekend en als een constante gebruikt, zonder uitvoering tijdens de runtime van het programma. In tegenstelling tot het definiëren van constanten via de expressie "const ITEM: … = …" hoeft in de blokken "const { … }" het type niet te worden opgegeven, omdat type-inferentie hier wordt ondersteund. Bijvoorbeeld, de code met een aparte definitie van een constante
const EMPTY: Option<Vec> = None;
let foo = [EMPTY; 100];kan worden vervangen door gebruik ter plaatse:
let foo = [const { None }; 100];
- De syntaxis "T: Trait" voor het opgeven van beperkingen voor associatieve types is gestabiliseerd, waardoor de definitie van expressies met geneste typebeperkingen kan worden verkort, die eerder een geneste impl Trait of meerdere "where"-voorwaarden vereisten.
- Automatisch verlengen van de levensduur van tijdelijke waarden die worden gebruikt in "match" en "if"-constructies is verzekerd.
let a = if true {
..;
&temp() // de levensduur wordt verlengd
} else {
..;
&temp() // de levensduur wordt verlengd
}; - De mogelijkheid om de functie main uit andere modules en crate-pakketten te importeren, is gestabiliseerd.
- Bij het bouwen van de standaardbibliotheek in de compiler wordt de vlag "-Cforce-frame-pointers=yes" gebruikt, die gegevens toevoegt voor het reconstructie van de stack tijdens het profiel van programma's.
- Een nieuwe lading API's is gestabiliseerd, inclusief gestabiliseerde methoden en implementaties van traits:
- {integer}::unchecked_add
- {integer}::unchecked_mul
- {integer}::unchecked_sub
- ::split_at_unchecked
- ::split_at_mut_unchecked
- ::utf8_chunks
- str::Utf8Chunks
- str::Utf8Chunk
- ::is_aligned
- ::is_aligned
- NonNull::is_aligned
- ::len
- ::len
- ::is_empty
- ::is_empty
- NonNull::::is_empty
- CStr::count_bytes
- io::Error::downcast
- num::NonZero
- path::absolute
- proc_macro::Literal::byte_character
- proc_macro::Literal::c_string
- Het teken «const», dat de mogelijkheid bepaalt om in elke context in plaats van constanten te worden gebruikt, is toegepast in functies:
- Atomic*::into_inner
- io::Cursor::new
- io::Cursor::get_ref
- io::Cursor::position
- io::empty
- io::repeat
- io::sink
- panic::Location::caller
- panic::Location::file
- panic::Location::line
- panic::Location::column
- Stabiliseerd
een deel van de mogelijkheden die kunnen worden gebruikt bij het compileren naar de tussentijdse weergave van Webassembly (WASM). - De derde ondersteuningslaag is geïmplementeerd voor de platforms aarch64-apple-visionos, aarch64-apple-visionos-sim en riscv32ima-unknown-none-elf. De derde laag betekent basisondersteuning, maar zonder geautomatiseerd testen, publicatie van officiële builds en controle van de mogelijkheid om code te bouwen.
- De tweede ondersteuningslaag is geïmplementeerd voor de doelplatforms aarch64-pc-windows-gnullvm, i686-pc-windows-gnullvm en x86_64-pc-windows-gnullvm. De tweede ondersteuningslaag garandeert dat het bouwen mogelijk is.
Bovendien heeft de Rust Foundation, die het ecosysteem met betrekking tot de programmeertaal Rust beheert, de oprichting aangekondigd van het consortium ‘Safety-Critical Rust Consortium’, gericht op het gebruik van de programmeertaal Rust in oplossingen die een hogere betrouwbaarheid vereisen (Safety-Critical Software), waarbij een storing levensbedreigend kan zijn, schade aan het milieu kan veroorzaken of kan leiden tot ernstige schade aan apparatuur. Onder de aangesloten bedrijven zijn ARM, AdaCore, Ferrous Systems, OxidOS, Synopsys, HighTec EDV-Systeme GmbH, TrustInSoft, Veecle en Woven by Toyota. Onder de taken die het consortium zal aanpakken, wordt het schrijven van richtlijnen en het ontwikkelen van bibliotheken, linters en statische analyzers vermeld, evenals het toepassen van formele verificatiemethoden van betrouwbaarheid en het ontwikkelen van subminimalen van de taal voor systemen met hoge betrouwbaarheid.
Van de projecten die verband houden met systemen met hoge betrouwbaarheid, kan Verus worden genoemd - een hulpmiddel voor het controleren van de correctheid van code geschreven in de programmeertaal Rust. De controle gebeurt door het definiëren van specificaties die het toegestane gedrag van de code beschrijven. Tijdens de uitvoering van de uitvoerbare code controleert Verus de naleving van de specificatie om de correctheid van de uitvoering te bevestigen.
Bron: opennet.ru
