De release van de algemene programmeertaal Rust 1.77, 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:
- Ondersteuning toegevoegd voor letterlijke waarden voor C-strings (c"tekst"), die in het geheugen worden opgeslagen met een afsluitend nulteken en gekoppeld zijn aan het type "CStr". Ondersteuning voor C-strings zal naar verwachting het schrijven van code die samenwerkt met lagen in programmeertalen die gebruikmaken van met null afgesloten strings, vereenvoudigen en ervoor zorgen dat de benodigde controles tijdens compilatie kunnen worden uitgevoerd. const HALLO: &core::ffi::CStr = c"Hallo wereld!";
- Asynchroon uitgevoerde functies die met de expressie "async fn" zijn gedeclareerd, mogen recursie gebruiken, d.w.z. Zulke functies kunnen nu zichzelf aanroepen. async fn fib(n: u32) -> u32 { overeenkomst n { 0 | 1 => 1, _ => Box::pin(fib(n-1)).wacht + Box::pin(fib(n-2)).wacht } }
- De offset_of! De macro is gestabiliseerd, zodat u de byte-offset van velden van structuren, opsommingen, unies en tupels kunt bepalen ten opzichte van het begin van het type. In de praktijk kan de macro nuttig zijn in situaties waarin u op veldoffsetniveau moet werken en er geen type-instantie beschikbaar is. De offset_of-functionaliteit is met name nodig bij het ontwikkelen van laagwaardige componenten, zoals drivers. gebruik std::mem; #[repr(C)] struct FieldStruct { eerste: u8, tweede: u16, derde: u8 } assert_eq!(mem::offset_of!(FieldStruct, eerste), 0); assert_eq!(mem::offset_of!(FieldStruct, seconde), 2); assert_eq!(mem::offset_of!(FieldStruct, derde), 4);
- In de Cargo-pakketbeheerder is het verwijderen van bestanden uit debuggegevens (strip = "debuginfo") standaard ingeschakeld in releaseprofielen, tenzij de debugmodus expliciet is ingeschakeld in het Cargo-profiel, d.w.z. als de parameter debug = 0.
- De optie "-Zthir-unsafeck=on" is standaard ingeschakeld, waarmee onveilige controle voor de THIR (Typed High-Level Intermediate Representation) tussenliggende representatie wordt ingeschakeld.
- Lintcontrole toegevoegd voor static_mut_refs om een waarschuwing te geven bij het gebruik van verwijzingen naar veranderlijke statische waarden.
- De mogelijkheid om "From<&[T;" te gebruiken type is geïmplementeerd. N]>" voor type "Koe<[T]>". fn foo(data: impl Into >) { /* … */ } fn main() { foo(&[“hallo”, “wereld”]); }
- De compiler biedt uitlijning voor 16-byte i128- en u128-typen voor x86-systemen.
- Een nieuw deel van de API is overgebracht naar de stabiele categorie, inclusief de methoden en implementaties van eigenschappen:
- array::elke_ref
- array::elke_mut
- kern::net
- f32::round_ties_even
- f64::round_ties_even
- mem::offset_van!
- plak::eerste_stuk
- slice::eerste_stuk_mut
- plak::split_eerste_stuk
- slice::split_first_chunk_mut
- plak::laatste_stuk
- slice::laatste_stuk_mut
- slice::split_last_chunk
- slice::split_last_chunk_mut
- plak::stuk_bij
- slice::chunk_by_mut
- Gebonden::kaart
- Bestand::nieuw_maken
- Mutex::clear_poison
- RwLock::clear_poison
- Derde niveau van ondersteuning geïmplementeerd voor de platforms aarch64-unknown-illumos, hexagon-unknown-none-elf, riscv32imafc-esp-espidf en riscv32im-risc0-zkvm-elf. Het derde niveau impliceert basisondersteuning, maar zonder geautomatiseerde tests, het publiceren van officiële builds en het controleren van de mogelijkheid om code te bouwen.
Bron: opennet.ru
