Rust 1.66 programmeertaal release

De release van de algemene programmeertaal Rust 1.66, 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:

  • Bij opsommingen met gehele representaties (het attribuut “#[repr(Int)]”) is expliciete aanduiding van de discriminant (het nummer van de optie in de opsomming) toegestaan, zelfs als de opsomming velden bevat. #[repr(u8)] enum Foo { A(u8), # discriminant 0 B(i8), # discriminant 1 C(bool) = 42, # discriminant 42 }
  • Functie core::hint::black_box toegevoegd, die eenvoudigweg de ontvangen waarde retourneert. Omdat de compiler gelooft dat een bepaalde functie iets specifieks doet, kan de black_box-functie worden gebruikt om de optimalisatie van lussen door de compiler uit te schakelen bij het uitvoeren van codeprestatietests of bij het onderzoeken van gegenereerde machinecode (zodat de compiler de code niet als onbruikbaar beschouwt en deze verwijdert Het). In het onderstaande voorbeeld voorkomt het specificeren van black_box(v.as_ptr()) bijvoorbeeld dat de compiler ervan uitgaat dat de vector v niet in gebruik is. gebruik std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • De pakketbeheerder "cargo" biedt de opdracht "remove", waarmee u afhankelijkheden van het Cargo.toml-manifest vanaf de opdrachtregel kunt verwijderen.
  • Een nieuw deel van de API is overgebracht naar de stabiele categorie, inclusief de methoden en implementaties van eigenschappen:
    • proc_macro::Span::brontekst
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, packing_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, packing_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, packing_sub_unsigned}
    • Btreeset::{eerste, laatste, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Voeg AsFd-implementaties toe voor stdio-vergrendelingstypen bij gebruik van WASI.
    • impl TryFrom > voor Box<[T; N]>
    • core::hint::black_box
    • Duur::try_from_secs_{f32,f64}
    • Optie::uitpakken
    • std::os::fd
  • Het gebruik van de bereiken “..X” en “..=X” is toegestaan ​​in sjablonen.
  • Bij het samenstellen van de frontend van de rustc-compiler en de backend van LLVM worden de optimalisatiemodi LTO (Link Time Optimization) en BOLT (Binary Optimization and Layout Tool) gebruikt, waarmee de prestaties van de resulterende code kunnen worden verbeterd en het geheugenverbruik kan worden verminderd.
  • Het derde ondersteuningsniveau is geïmplementeerd voor de platforms armv5te-none-eabi en thumbv5te-none-eabi. Het derde niveau omvat basisondersteuning, maar zonder geautomatiseerd testen, het publiceren van officiële builds of het controleren of de code kan worden gebouwd.
  • Ondersteuning toegevoegd voor koppeling met universele macOS-bibliotheken.

Bovendien kunnen we de opname van de front-end van de Rust-taalcompiler (gccrs) in de GCC-codebasis opmerken. De frontend is opgenomen in de GCC 13-branch, die in mei 2023 wordt uitgebracht. Vanaf GCC 13 kunnen de native GCC-tools worden gebruikt om programma's in de Rust-taal te compileren zonder de noodzaak om de rustc-compiler te installeren, gebouwd met behulp van LLVM-ontwikkelingen. De GCC 13-implementatie van Rust zal een bètaversie zijn en niet standaard ingeschakeld.

Bron: opennet.ru

Voeg een reactie