Rust 1.66 Programming Language Release

Die algemene programmeertaal Rust 1.66, wat deur die Mozilla-projek gestig is, maar nou ontwikkel is onder die beskerming van die onafhanklike nie-winsgewende organisasie Rust Foundation, is vrygestel. Die taal fokus op geheueveiligheid en bied die middele om hoë werkparallelisme te bereik terwyl die gebruik van 'n vullisverwyderaar en looptyd vermy word (looptyd word verminder tot basiese inisialisering en instandhouding van die standaardbiblioteek).

Rust se geheue hantering metodes red die ontwikkelaar van foute wanneer wysers gemanipuleer word en beskerm teen probleme wat ontstaan ​​as gevolg van laevlak geheue manipulasie, soos toegang tot 'n geheue area nadat dit vrygestel is, herkenning van nulwysers, buffer oorskryding, ens. Om biblioteke te versprei, bouwerk te verskaf en afhanklikhede te bestuur, ontwikkel die projek die Cargo-pakketbestuurder. Die crates.io-bewaarplek word ondersteun vir die aanbieding van biblioteke.

Geheueveiligheid word tydens samestellingstyd in Rust verskaf deur verwysingskontrolering, tred te hou met objekeienaarskap, tred te hou met objekleeftye (bestekke), en die korrektheid van geheuetoegang tydens kode-uitvoering te assesseer. Roes bied ook beskerming teen heelgetal oorvloei, vereis verpligte inisialisering van veranderlike waardes voor gebruik, hanteer foute beter in die standaard biblioteek, pas die konsep van onveranderlike verwysings en veranderlikes by verstek toe, bied sterk statiese tik om logiese foute te minimaliseer.

Belangrikste innovasies:

  • In opsommings met heelgetalvoorstellings (die "#[repr(Int)]" kenmerk), word eksplisiete aanduiding van die diskriminant (variantnommer in die opsomming) toegelaat, selfs al bevat die opsomming velde. #[repr(u8)] enum Foo { A(u8), # diskriminant 0 B(i8), # diskriminant 1 C(bool) = 42, # diskriminant 42 }
  • Bygevoeg funksie kern::wenk::black_box wat eenvoudig die ontvangde waarde terugstuur. Aangesien die samesteller dink dat hierdie funksie iets doen, kan die black_box-funksie gebruik word om samestelleroptimalisasies vir lusse te deaktiveer wanneer kodeprestasietoetsing uitgevoer word of wanneer gegenereerde masjienkode ondersoek word (sodat die samesteller nie die kode as ongebruik beskou en dit verwyder nie). Byvoorbeeld, in die voorbeeld hieronder, verhoed black_box(v.as_ptr()) die samesteller om te dink dat die vektor v nie gebruik word nie. gebruik std::wenk::black_box; fn push_cap(v: &mut Vec) { vir i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • Die "cargo"-pakketbestuurder bied die "remove"-opdrag, wat jou toelaat om afhanklikhede van die Cargo.toml-manifes van die opdragreël af te verwyder.
  • 'n Nuwe gedeelte van die API is na die kategorie stal geskuif, insluitend die metodes en implementering van eienskappe is gestabiliseer:
    • proc_makro::span::bronteks
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{first, last, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Voeg AsFd-implementasies by vir stdio-slottipes wanneer WASI gebruik word.
    • impl TryFrom > vir Box<[T; N]>
    • kern::wenk::black_box
    • Tydsduur::probeer_van_sekondes_{f32,f64}
    • Opsie :: unzip
    • std::os::fd
  • Die reekse "..X" en "..=X" word in sjablone toegelaat.
  • Wanneer die voorkant van die rustc-samesteller en die LLVM-agterkant gebou word, word LTO (Link Time Optimization) en BOLT (Binary Optimization and Layout Tool) optimeringsmodusse gebruik om die werkverrigting van die gevolglike kode te verhoog en geheueverbruik te verminder.
  • Geïmplementeerde vlak 5-ondersteuning vir armv5te-none-eabi en thumbvXNUMXte-none-eabi platforms. Die derde vlak impliseer basiese ondersteuning, maar sonder outomatiese toetsing, publisering van amptelike bouwerk en kontrolering van die vermoë om die kode te bou.
  • Bygevoeg ondersteuning vir skakel na macOS Generiese biblioteke.

Boonop kan ons let op die insluiting in die GCC-kodebasis van die front-end samesteller van die Rust-taal (gccrs). Die frontend is ingesluit in die GCC 13-tak, wat in Mei 2023 vrygestel sal word. Vanaf GCC 13, sal die standaard GCC-gereedskapstel gebruik kan word om Rust-programme saam te stel sonder dat dit nodig is om die rustc-samesteller wat gebou is met behulp van LLVM-ontwikkelings te installeer. Die Rust-implementering in GCC 13 sal in beta-status wees, nie by verstek geaktiveer nie.

Bron: opennet.ru

Voeg 'n opmerking