Vrystelling van die Rust 1.59-programmeertaal met ondersteuning vir samestelling-insetsels

Die algemene programmeertaal Rust 1.59, 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:

  • Dit is moontlik om samestellingstaal-insetsels te gebruik, wat in aanvraag is in toepassings wat uitvoering op 'n lae vlak moet beheer of in staat moet wees om gespesialiseerde masjieninstruksies te gebruik. Samestelling-insetsels word bygevoeg deur makro's "asm!" en "global_asm!" gebruik string formatering sintaksis vir die naam van registers soortgelyk aan dié wat gebruik word vir string vervangings in Rust. Die samesteller ondersteun monteerinstruksies vir x86, x86-64, ARM, AArch64 en RISC-V argitekture. Invoeging voorbeeld: gebruik std::arch::asm; // Vermenigvuldig x met 6 deur verskuiwings te gebruik en tel let mut x op: u64 = 4; onveilige { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "voeg {x}, {tmp}", x = inout(reg) ) x, tmp = uit(reg) _, ); } assert_eq!(x, 4 * 6);
  • Bygevoeg ondersteuning vir gedestruktureerde (parallelle) opdragte, waarin verskeie eienskappe, skywe of strukture aan die linkerkant van die uitdrukking gespesifiseer word. Byvoorbeeld: laat (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Struct { e: 5, f: 3 }; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • Dit is moontlik om verstekwaardes vir const generics te spesifiseer: struct ArrayStorage { arr: [T; N], } impl ArrayStorage { fn new(a: T, b: T) -> ArrayStorage { ArrayStorage { arr: [a, b], } } }
  • Die Cargo-pakketbestuurder verskaf waarskuwings oor die gebruik van ongeldige strukture in afhanklikhede wat verwerk word as gevolg van foute in die samesteller (byvoorbeeld, as gevolg van 'n fout, is velde van gepakte strukture toegelaat om in veilige blokke geleen te word). Sulke konstrukte sal nie meer in 'n toekomstige weergawe van Rust ondersteun word nie.
  • Cargo en rustc het 'n ingeboude vermoë om uitvoerbare lêers te genereer wat gestroop is van ontfoutingsdata (strook = "debuginfo") en simbole (strook = "simbole"), sonder dat dit nodig is om 'n aparte nutsprogram te skakel. Die skoonmaakinstelling word geïmplementeer deur die "strip"-parameter in Cargo.toml: [profile.release] strip = "debuginfo", "symbols"
  • Inkrementele samestelling is by verstek gedeaktiveer. Die rede word gesê dat dit 'n tydelike oplossing is vir 'n fout in die samesteller wat lei tot ineenstortings en deserialiseringsfoute. 'n Foutoplossing is reeds voorberei en sal in die volgende weergawe ingesluit word. Om inkrementele samestelling terug te gee, kan jy die omgewingsveranderlike RUSTC_FORCE_INCREMENTAL=1 gebruik.
  • 'n Nuwe gedeelte van die API is na die kategorie stal geskuif, insluitend die metodes en implementering van eienskappe is gestabiliseer:
    • std::draad::beskikbaar_parallelisme
    • Resultaat::gekopieer
    • Resultaat::gekloon
    • boog::asm!
    • arch::global_asm!
    • ops::ControlFlow::is_break
    • ops::ControlFlow::is_continue
    • ProbeerVan vir u8
    • char ::TryFromCharError (Kloon, Debug, Display, PartialEq, Copy, Eq, Error)
    • iter::zip
    • NonZeroU8::is_krag_van_twee
    • NonZeroU16::is_krag_van_twee
    • NonZeroU32::is_krag_van_twee
    • NonZeroU64::is_krag_van_twee
    • NonZeroU128::is_krag_van_twee
    • DoubleEndedIterator vir Tolowercase-struktuur
    • DoubleEndedIterator vir ToUppercase-struktuur
    • ProbeerFrom vir [T; N]
    • Ontspan Veilig vir die Eenmalige struktuur
    • RefUnwindSafe vir 'n slag
    • armv8 neon ondersteuningsfunksies ingebou in die samesteller vir aarch64
  • Die "const"-kenmerk, wat die moontlikheid bepaal om dit in enige konteks in plaas van konstantes te gebruik, word in funksies gebruik:
    • mem::MaybeUninit::as_ptr
    • mem::MaybeUninit::assume_init
    • mem::MaybeUninit::assume_init_ref
    • ffi::CSr::from_bytes_with_nul_unchecked

Bron: opennet.ru

Voeg 'n opmerking