De release van de programmeertaal Rust 1.89 is gepubliceerd, oorspronkelijk ontwikkeld door het Mozilla-project, maar nu verder ontwikkeld onder de hoede van de onafhankelijke non-profitorganisatie Rust Foundation. De taal is gericht op veilig geheugengebruik en biedt middelen om hoge parallelisatie van uitvoertaken te bereiken, zonder gebruik te maken van een garbage collector en runtime (de runtime beperkt zich tot de basisinitialisatie en het onderhoud 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 de mogelijkheid toegevoegd om het symbool «_» te gebruiken als argument voor generieke parameters met de eigenschap «const» voor het afleiden van waarden van deze parameters op basis van de omgevingscontext. pub fn all_false<const LEN: usize>() -> [bool; LEN] { [false; _] }
- Een nieuwe lint-waarschuwing «mismatched_lifetime_syntaxes» is toegevoegd om de onduidelijke definitie van levensduur in functiehandtekeningen aan te pakken bij het gebruik van het mechanisme «lifetime elision» (dat automatisch de levensduur van referenties afleidt, waardoor handmatige annotatie overbodig wordt). De waarschuwing controleert of de invoer- en uitvoerparameters van een functie tot dezelfde groep typen behoren. Groepen worden gevormd op basis van de ondersteuning voor expliciete levensduurannotatie en de mogelijkheid voor de compiler om de levensduur automatisch af te leiden (bijvoorbeeld in de types «&’a T» en «ContainsLifetime<‘a>» kan expliciet een levensduur aanwezig zijn, maar de compiler kan deze niet automatisch afleiden; in de types «&T», «&’_ T» en «ContainsLifetime<‘_>» zijn zowel expliciete annotatie als automatische afleiding toegestaan).
- In de attribuut «target_feature» voor x86-systemen is de mogelijkheid geïmplementeerd om de ondersteuning van uitgebreide instructiesets zoals sha512, sm3, sm4, kl en widekl te controleren, evenals specifieke functies avx512. #[target_feature(enable = «avx512bw»)] pub fn cool_simd_code(f* .. *f) -> f* … *f { f* … *f }
- Het uitvoeren van doctests (tests ingebed in de documentatie) is niet alleen voor het huidige doelplatform mogelijk, maar ook voor andere platforms die zijn opgegeven bij het starten van de package manager «cargo» («cargo test —doc —target other_target»).
- Voor functies ‘extern «C»‘ is een standaard C ABI voor WebAssembly geïmplementeerd bij het bouwen voor het doelplatform «wasm32-unknown-unknown».
- Met enkele kanttekeningen over de compatibiliteit van typen, is het gebruik van de typen i128 en u128 toegestaan in externe C-functies (extern "C"), waarvoor eerder de lint-waarschuwing "improper_ctypes_definitions" werd weergegeven.
- Een nieuwe lading API's is gestabiliseerd, inclusief gestabiliseerde methoden en implementaties van traits:
- Veel ingebouwde functies (Intrinsics) van de compiler voor x86-processors, inclusief functies voor AVX512, SHA512, SM3 en SM4.
- NonZero
- File::lock
- File::lock_shared
- File::try_lock
- File::try_lock_shared
- File::unlock
- NonNull::from_ref
- NonNull::from_mut
- NonNull::without_provenance
- NonNull::with_exposed_provenance
- NonNull::expose_provenance
- OsString::leak
- PathBuf::leak
- Result::flatten
- std::os::linux::net::TcpStreamExt::quickack
- std::os::linux::net::TcpStreamExt::set_quickack
De eigenschap "const" is toegepast in de functies:
- ::as_mut_slice
- ::eq_ignore_ascii_case
- str::eq_ignore_ascii_case
- Het proces om het doelplatform "x86_64-apple-darwin" van het eerste naar het tweede ondersteuningsniveau te vertalen is begonnen (Apple is van plan de ondersteuning van de architectuur x86_64 te beëindigen). Het eerste ondersteuningsniveau houdt in dat er binaire builds worden gemaakt, uitgebreid testen plaatsvinden en de hoogste garantie op platformondersteuning wordt gegeven — elke wijziging in de compiler wordt gecontroleerd door een volledige testsuite uit te voeren. Het tweede ondersteuningsniveau biedt garantie op builds, maar geen garanties voor het doorlopen van de testsuite.
- Er is een derde ondersteuningsniveau geïmplementeerd voor de platformen "loongarch32-unknown-none" en "loongarch32-unknown-none-softfloat". Het derde niveau biedt basisondersteuning, maar zonder geautomatiseerd testen, publicatie van officiële builds en controle op de mogelijkheid om code te bouwen.
Daarnaast kunnen gerelateerde gebeurtenissen en projecten met Rust worden opgemerkt:
- Er is een rapport gepubliceerd over de status van packages in de Rust-taal binnen Debian. Het wordt opgemerkt dat in de Debian Unstable (Sid) tak ongeveer 8% van de src-packages in de main repository zijn verbonden met build-afhankelijkheden van minstens één package "librust-*". In Debian 12 was dit percentage 4.5%. Ook wordt opgemerkt dat meer dan 3000 packages code in de Rust-taal bevatten, die zijn samengevoegd in de packages librust-..-dev, en 150 src-packages leveren gecompileerde uitvoerbare bestanden of Rust-bibliotheken.
Van de interessantere packages voor Debian worden sudo-rs, ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d en fish genoemd. Optionele ondersteuning voor Rust is gerealiseerd in APT, QEMU (virtiofsd), de Linux-kernel en Mesa, en wordt ook verwacht in LibreOffice. Voor de conversie van crate-packages naar src-packages in Debian is er een toolkit debcargo ontwikkeld.
- Het project tmux-rs is gepresenteerd, dat een kloon van de terminalmultiplexer tmux (een consolevensterbeheerder) ontwikkelt, herschreven van C naar Rust.
- De ontwikkelaar van de Tyr-driver bij Collabora heeft een artikel gepubliceerd over apparaatdrivers die op kernniveau werken voor GPU's en de principes van het ontwikkelen van dergelijke drivers in Rust.
- Een universele applicatie in Rust is gedemonstreerd, die zowel op CPU's als op verschillende GPU-platforms kan draaien: CUDA voor NVIDIA, SPIR-V voor GPU's met Vulkan-ondersteuning, Metal voor Apple, DirectX 12 voor Windows, en WebGPU voor browsers.
Bron: opennet.ru
