Rust 1.47 programmeerimiskeele väljalase

Avaldatud on Mozilla projektiga rajatud süsteemi programmeerimiskeele Rust versioon 1.47. Keel keskendub mälu ohutusele, pakub automaatset mäluhaldust ja pakub vahendeid ülesannete kõrge paralleelsuse saavutamiseks ilma prügikogujat või käitusaega kasutamata (käitusaeg taandub standardse teegi põhiinitsialiseerimisele ja hooldusele).

Rusti automaatne mäluhaldus välistab osutitega manipuleerimisel tekkivad vead ja kaitseb madala tasemega mäluga manipuleerimisest tulenevate probleemide eest, nagu mälupiirkonnale juurdepääs pärast selle vabastamist, null-osuti viited, puhvri ületamised jne. Teekide levitamiseks, komplekteerimise tagamiseks ja sõltuvuste haldamiseks arendatakse projektis Cargo paketihaldurit. Hoidlat crates.io toetatakse teekide majutamiseks.

Peamised uuendused:

  • Rakendatud suvalise suurusega massiivide tunnuste tugi. Kuna varem ei olnud võimalik määratleda kõigi täisarvude jaoks üldisi funktsioone, pakkus standardne teek sisseehitatud tunnuste tuge ainult massiividele, mille suurus oli kuni 32 elementi (iga suuruse tunnused olid staatiliselt määratletud). Tänu const generics funktsionaalsuse loomisele sai võimalikuks defineerida üldfunktsioone mis tahes massiivi suuruse jaoks, kuid need pole veel keele stabiilsete funktsioonide hulka kaasatud, kuigi need on kompilaatoris realiseeritud ja neid kasutatakse nüüd standardteegis mis tahes suurusega massiivitüüpidele.
    Näiteks järgmine konstruktsioon versioonis Rust 1.47 prindib massiivi sisu, kuigi varem oleks see põhjustanud tõrke:

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

  • Lühemate jälgede väljund (backtrace), väljund hädaolukordades. Elemendid, mis enamikus olukordades ei paku huvi, kuid segavad väljundit ja juhivad tähelepanu probleemi peamistelt põhjustelt, jäetakse jälgimisest välja. Täisjälje tagastamiseks võite kasutada keskkonnamuutujat "RUST_BACKTRACE=full". Näiteks koodi jaoks

fn main() {
paanika!();
}

Varem väljastati jälg 23 etapis, kuid nüüd vähendatakse seda 3 etapiks, mis võimaldab teil olemusest kohe aru saada:

lõim 'main' sattus paanikasse 'selgesõnalise paanika' peale, src/main.rs:2:5
virna tagasijälg:
0: std::paanika::begin_panic
aadressil /rustc/d…d75a/library/std/src/panicking.rs:497
1: mänguväljak::peamine
aadressil ./src/main.rs:2
2: core::ops::function::FnOnce::call_once
aadressil /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Rustc-kompilaatorit on värskendatud LLVM 11 abil (Rust kasutab koodi genereerimiseks taustaprogrammina LLVM-i). Samas säilib võimalus ehitada vana LLVM-iga kuni versioonini 8, kuid vaikimisi (rust-lang/llvm-projektis) on nüüd kasutusel LLVM 11. LLVM 11 väljalaset on oodata lähitulevikus. päevadel.
  • Windowsi platvormil pakub rustc-kompilaator tuge juhtimisvoo terviklikkuse kontrollide (Control Flow Guard) lubamiseks, mis aktiveeritakse lipu "-C control-flow-guard" abil. Teistel platvormidel seda lippu praegu eiratakse.
  • API uus osa on üle viidud stabiilsesse kategooriasse, sealhulgas stabiliseeritud Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32:: TAU ja f64::TAU.
  • Atribuuti “const”, mis määrab võimaluse kasutada seda konstantide asemel mis tahes kontekstis, kasutatakse järgmistes meetodites:
    • uus kõigi täisarvude jaoks peale nulli;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub ja saturating_mul kõigi täisarvude puhul;
    • is_ascii_alphabetic, is_ascii_whitespace, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_number, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace ja is_ascii ja_ucontrol8 tüüpide jaoks.
  • FreeBSD jaoks kasutatakse FreeBSD 11.4 tööriistakomplekti (FreeBSD 10 ei toeta LLVM 11).

Võetud alates opennet.ru

Allikas: linux.org.ru

Lisa kommentaar