Rust 1.47 Programming Language Release

Vrystelling 1.47 van die Rust-stelsel-programmeertaal, gestig deur die Mozilla-projek, is gepubliseer. Die taal fokus op geheueveiligheid, verskaf outomatiese geheuebestuur en bied die middele om hoë taakparallellisme te bereik sonder om 'n vullisverwyderaar of looptyd te gebruik (looptyd word verminder tot basiese inisialisering en instandhouding van die standaardbiblioteek).

Rust se outomatiese geheuebestuur elimineer foute wanneer wysers gemanipuleer word en beskerm teen probleme wat voortspruit uit laevlakgeheuemanipulasie, soos toegang tot 'n geheuegebied nadat dit vrygestel is, nulwyserverwysings, bufferoorskryding, ens. Om biblioteke te versprei, samestelling te verseker en afhanklikhede te bestuur, ontwikkel die projek die Cargo-pakketbestuurder. Die crates.io-bewaarplek word ondersteun vir die aanbieding van biblioteke.

Belangrikste innovasies:

  • Geïmplementeerde ondersteuning vir eienskappe vir skikkings van arbitrêre grootte. Voorheen, as gevolg van die onvermoë om generiese funksies vir alle heelgetalwaardes te definieer, het die standaardbiblioteek ingeboude kenmerkondersteuning slegs vir skikkings tot 32 elemente in grootte verskaf (die eienskappe vir elke grootte is staties gedefinieer). Danksy die skepping van konst generiese funksionaliteit het dit moontlik geword om generiese funksies vir enige skikkingsgrootte te definieer, maar hulle is nog nie ingesluit in die stabiele kenmerke van die taal nie, alhoewel hulle in die samesteller geïmplementeer is en nou in die standaardbiblioteek gebruik word. vir verskeidenheid tipes van enige grootte.
    Byvoorbeeld, die volgende konstruk in Rust 1.47 sal die inhoud van 'n skikking druk, hoewel dit voorheen 'n fout tot gevolg sou gehad het:

fn hoof() {
laat xs = [0; 34];
println!("{:?}", xs);
}

  • Verskaf uitset van korter spore (terugspoor), uitset in noodsituasies. Elemente wat nie in die meeste situasies van belang is nie, maar die uitset deurmekaar maak en die aandag van die primêre oorsake van die probleem aflei, word van die spoor uitgesluit. Om 'n volledige spoor terug te gee, kan jy die omgewingsveranderlike "RUST_BACKTRACE=full" gebruik. Byvoorbeeld, vir die kode

fn hoof() {
paniek!();
}

Voorheen is die opsporing in 23 stadiums vertoon, maar nou sal dit tot 3 stadiums verminder word, sodat jy dadelik die essensie kan begryp:

draad 'hoof' paniekbevange by 'eksplisiete paniek', src/main.rs:2:5
stapel terugspoor:
0: std::paniek::begin_paniek
by /rustc/d…d75a/library/std/src/panicking.rs:497
1: speelgrond::hoof
by ./src/main.rs:2
2: kern::ops::funksie::FnOnce::call_once
by /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Die rustc samesteller is opgedateer om te bou met LLVM 11 (Rust gebruik LLVM as 'n backend vir kodegenerering). Terselfdertyd word die vermoë om met ou LLVM te bou, tot weergawe 8, behou, maar by verstek (in rust-lang/llvm-projek) word LLVM 11 nou gebruik. Die vrystelling van LLVM 11 word in die komende verwag dae.
  • Op die Windows-platform bied die rustc-samesteller ondersteuning om beheervloei-integriteitkontroles (Control Flow Guard) moontlik te maak, geaktiveer met die "-C control-flow-guard"-vlag. Op ander platforms word hierdie vlag vir eers geïgnoreer.
  • 'n Nuwe gedeelte van die API is na die stabiele kategorie oorgedra, insluitend gestabiliseerde Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32:: TLU en f64::TLU.
  • Die "const"-kenmerk, wat die moontlikheid bepaal om dit in enige konteks in plaas van konstantes te gebruik, word in die metodes gebruik:
    • nuut vir alle heelgetalle behalwe nul;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub en saturating_mul vir alle heelgetalle;
    • is_ascii_alfabeties, is_ascii_hoofletters, is_ascii_kleinletters, is_ascii_alfanumeries, is_ascii_syfer, is_ascii_hexdigit, is_ascii_interpunksie, is_ascii_grafies, is_ascii_witspasie en is_ascii_tipes en is_ascii_tipes
  • Vir FreeBSD word die gereedskapstel van FreeBSD 11.4 gebruik (FreeBSD 10 ondersteun nie LLVM 11 nie).

Geneem vanaf opennet.ru

Bron: linux.org.ru

Voeg 'n opmerking