De release van de programmeertaal Rust 1.95 is gepubliceerd, oorspronkelijk ontwikkeld door Mozilla, maar nu ondersteund door de onafhankelijke non-profitorganisatie Rust Foundation. De taal richt zich op veilig geheugengebruik en biedt middelen om hoge paralleliteit bij het uitvoeren van taken te bereiken, zonder gebruik te maken van een garbage collector en runtime (de runtime beperkt zich tot basisinitialisatie en het onderhouden van de standaardbibliotheek).
De geheugenmethoden in Rust zijn gericht op het uitsluiten van fouten bij het manipuleren van pointers en het beschermen tegen problemen die voortkomen uit laagdrempelige geheugengebruik, zoals toegang tot geheugen na vrijgave, derefereren van null pointers, buffer overflows, enz. Voor de distributie van bibliotheken, het waarborgen van builds en het beheren van afhankelijkheden, wordt de package manager Cargo verder ontwikkeld. Voor het hosten 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:
- De macro ‘cfg_select!’ is toegevoegd, die kan worden gebruikt in plaats van het pakket ‘cfg-if’ voor het verwerken van meerdere compilatievoorwaarden in de stijl van een ‘match’-blok, zonder ketens van voorwaardelijke uitdrukkingen met de constructie ‘#[cfg]’ te definiëren. cfg_select! { unix => { fn foo() { \/ * unix *\/ } } target_pointer_width = «32» => { fn foo() { \/ * niet-unix, 32-bit *\/ } } _ => { fn foo() { \/ * niet unix en niet 32-bit *\/ } } }
- De mogelijkheid om ‘if let’-uitdrukkingen binnen ‘match’-blokken te specificeren voor het creëren van voorwaardelijke patroonbijpassingen is gestabiliseerd. Eerder was ondersteuning voor het opgeven van meerdere ‘let’-uitdrukkingen met behulp van de operator ‘&&’ gestabiliseerd voor ‘if’- en ‘while’-blokken. match value { Some(x) if let Ok(y) = compute(x) => { println!(«{}, {}», x, y); } _ => {} }
- De ondersteuning voor inline-assembler voor de PowerPC en PowerPC64 architecturen is gestabiliseerd.
- Een nieuwe lading API's is gestabiliseerd, inclusief gestabiliseerde methoden en implementaties van traits:
- MaybeUninit<[T; N]>: From<[MaybeUninit<T>; N]>
- MaybeUninit<[T; N]>: AsRef<[MaybeUninit<T>; N]>
- MaybeUninit<[T; N]>: AsRef<[MaybeUninit<T>]>
- MaybeUninit<[T; N]>: AsMut<[MaybeUninit<T>; N]>
- MaybeUninit<[T; N]>: AsMut<[MaybeUninit<T>]>
- [MaybeUninit<T>; N]: From<MaybeUninit<[T; N]>
- Cell<[T; N]>: AsRef<[Cell<T>; N]>
- Cell<[T; N]>: AsRef<[Cell<T>]>
- Cell<[T]>: AsRef<[Cell<T>]>
- bool: TryFrom<{integer}>
- AtomicPtr::update
- AtomicPtr::try_update
- AtomicBool::update
- AtomicBool::try_update
- AtomicIn::update
- AtomicIn::try_update
- AtomicUn::update
- AtomicUn::try_update
- cfg_select!
- mod core::range
- core::range::RangeInclusive
- core::range::RangeInclusiveIter
- core::hint::cold_path
- <*const T>::as_ref_unchecked
- <*mut T>::as_ref_unchecked
- <*mut T>::as_mut_unchecked
- Vec::push_mut
- Vec::insert_mut
- VecDeque::push_front_mut
- VecDeque::push_back_mut
- VecDeque::insert_mut
- LinkedList::push_front_mut
- LinkedList::push_back_mut
- Layout::dangling_ptr
- Layout::repeat
- Layout::repeat_packed
- Layout::extend_packed
- De eigenschap "const" is toegepast in de functies:
- fmt::from_fn
- ControlFlow::is_break
- ControlFlow::is_continue
- In stabiele versies van de toolchain is de ondersteuning voor het doorgeven van specificaties van eigen doelplatforms aan de compiler verwijderd.
- De doelplatforms powerpc64-unknown-linux-musl, aarch64-apple-tvos, aarch64-apple-tvos-sim, aarch64-apple-watchos, aarch64-apple-watchos-sim, aarch64-apple-visionos en aarch64-apple-visionos-sim zijn naar het tweede niveau van ondersteuning vertaald, wat een garantie voor de build inhoudt, maar geen garanties voor het doorstaan van de testset.
Daarnaast kunnen de onlangs aangekondigde projecten en evenementen die verband houden met Rust worden vermeld:
- Het bedrijf Canonical heeft de displayserver Mir 2.26 uitgebracht, die een set bibliotheken biedt voor het creëren van samengestelde servers op basis van het Wayland-protocol en de standaardfunctionaliteit van windowmanagers en displayservers omvat. Mir is betrokken bij projecten zoals de samengestelde manager Miracle, de shell voor internetkiosken Ubuntu Frame en de gebruikersomgeving Miriway.
De nieuwe release is opmerkelijk vanwege de toevoeging van de mogelijkheid om componenten te ontwikkelen in de programmeertaal Rust. De alternatieve invoerbeheersubsystemen evdev-rs zijn in Rust geïmplementeerd en er is begonnen met de ontwikkeling van de in Rust geschreven frontend wayland-rs voor Wayland. Van de niet aan Rust gerelateerde wijzigingen in Mir is de ondersteuning voor de Wayland-protocollen ext_image_copy_capture_v1 en input-triggers gemeld.
- De eerste release van de traffic analyzer ayaFlow is gepubliceerd, geschreven in Rust en gebruikt het Linux-kernel eBPF-subsysteem voor het onderscheppen van netwerkpakketten (IPv4/TCP/UDP) en Ethernet-frames met minimale impact op de prestatie. Het ondersteunt diepgaande inspectie van applicatieniveauprotocollen (L7), bijvoorbeeld de extractie van TLS SNI en DNS-aanvragen bij het analyseren van versleuteld verkeer. Het systeem ondersteunt het bijhouden van een tabel met de actuele status van verbindingen in het DashMap-formaat, het opslaan van geschiedenis in SQLite en het leveren van statistieken via een REST API voor Prometheus.
- De mogelijkheid om multithreaded applicaties te creëren in de programmeertaal Rust, die gebruikmaken van std::thread en op de GPU worden uitgevoerd, is geïmplementeerd.
Bron: opennet.ru
