Rust 1.47 Programlingvo-Eldono

Eldonita 1.47 de la Rust-sistema programlingvo, fondita de la projekto Mozilla, estis publikigita. La lingvo temigas memorsekurecon, disponigas aŭtomatan memoradministradon, kaj disponigas la rimedojn por atingi altan taskparalelecon sen uzado de rubkolektilo aŭ rultempo (rultempo estas reduktita al baza inicialigo kaj prizorgado de la norma biblioteko).

La aŭtomata memoradministrado de Rust eliminas erarojn dum manipulado de montriloj kaj protektas kontraŭ problemoj ekestiĝantaj de malalt-nivela memormanipulado, kiel ekzemple alirado de memorregiono post kiam ĝi estis liberigita, nulaj montriloj dereferences, bufrotranspasoj, ktp. Por distribui bibliotekojn, certigi kunigon kaj administri dependecojn, la projekto disvolvas la Cargo-pakaĵmanaĝeron. La deponejo crates.io estas subtenata por gastigado de bibliotekoj.

Ĉefaj novigoj:

  • Efektivigita subteno por trajtoj por tabeloj de arbitra grandeco. Antaŭe, pro la malkapablo difini senmarkajn funkciojn por ĉiuj entjervaloroj, la norma biblioteko disponigis enkonstruitan trajtosubtenon nur por tabeloj ĝis 32 elementoj en grandeco (la trajtoj por ĉiu grandeco estis statike difinitaj). Dank'al la kreado de konst-generaj funkcioj, eblis difini senmarkajn funkciojn por ajna tabelgrandeco, sed ili ankoraŭ ne estas inkluditaj en la stabilaj trajtoj de la lingvo, kvankam ili estas efektivigitaj en la kompililo kaj nun estas uzataj en la norma biblioteko. por tabelspecoj de ajna grandeco.
    Ekzemple, la sekva konstruo en Rust 1.47 presas la enhavon de tabelo, kvankam antaŭe ĝi rezultigus eraron:

fn ĉefa () {
estu xs = [0; 34];
println!("{:?}", xs);
}

  • Provizita eligo de pli mallongaj spuroj (backtrace), eligo en krizaj situacioj. Elementoj kiuj ne interesas en la plej multaj situacioj, sed malordigas la produktaĵon kaj malatentigas atenton de la primaraj kaŭzoj de la problemo, estas ekskluditaj de la spuro. Por redoni plenan spuron, vi povas uzi la mediovariablon "RUST_BACKTRACE=plena". Ekzemple, por la kodo

fn ĉefa () {
paniko!();
}

Antaŭe, la spuro estis eligita en 23 stadioj, sed nun ĝi estos reduktita al 3 stadioj, permesante al vi tuj ekkompreni la esencon:

fadeno 'ĉefa' panikiĝis ĉe 'eksplicita paniko', src/main.rs:2:5
staka malantaŭa spuro:
0: std::panicking::begin_panic
ĉe /rustc/d...d75a/library/std/src/panicking.rs:497
1: ludejo::ĉefa
ĉe ./src/main.rs:2
2: core::ops::function::FnOnce::call_once
ĉe /rustc/d...d75a/library/core/src/ops/function.rs:227

  • La rustc-kompililo estis ĝisdatigita por konstrui per LLVM 11 (Rust uzas LLVM kiel backend por kodgenerado). Samtempe, la kapablo konstrui kun malnova LLVM, ĝis versio 8, estas konservita, sed defaŭlte (en rust-lang/llvm-project) nun estas uzata LLVM 11. La eldono de LLVM 11 estas atendita en la venonta. tagoj.
  • Sur la Vindoza platformo, la rustc-kompililo provizas subtenon por ebligi kontrolojn de integreco de kontrolo (Control Flow Guard), aktivigitaj per la flago "-C control-flow-guard". Sur aliaj platformoj ĉi tiu flago estas ignorita nuntempe.
  • Nova parto de la API estis translokigita al la stabila kategorio, inkluzive de stabiligita Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32:: TAU kaj f64::TAU.
  • La atributo "const", kiu determinas la eblecon uzi ĝin en iu ajn kunteksto anstataŭ konstantoj, estas uzata en la metodoj:
    • nova por ĉiuj entjeroj krom nulo;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub kaj saturating_mul por ĉiuj entjeroj;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace kaj is_ascii_control por char kaj u8-tipoj.
  • Por FreeBSD, la ilaro de FreeBSD 11.4 estas uzata (FreeBSD 10 ne subtenas LLVM 11).

Prenita de opennet.ru

fonto: linux.org.ru

Aldoni komenton