Rust 1.47 Programlingvo-Eldono

eldonita eldono 1.47 de la sistema programlingvo rustiĝi, fondita de la projekto Mozilla. La lingvo temigas memorsekurecon, disponigas aŭtomatan memoradministradon, kaj disponigas rimedon por atingi altan taskan paralelecon sen uzi rubokolektisto и rultempo (Rultempo resumas 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 malaltnivela memormanipulado, kiel ekzemple alirado de memorregiono post kiam ĝi estis liberigita, nulaj montriloj dereferences, bufrotranspasoj, ktp. Pakaĵmanaĝero estas evoluigita por distribui bibliotekojn, certigi kunigon kaj administri dependecojn per la projekto. kargo. Deponejo estas subtenata por gastigi bibliotekojn kestoj.io.

Ĉefa novigoj:

  • Efektivigita subteno por tipoj tabeloj ajna 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 la funkcieco de konstantaj generikoj ("const generikoj"), eblis difini ĝeneralajn funkciojn por iu ajn tabelo, sed ili ankoraŭ ne estas inkluditaj en la stabilaj lingvotrajtoj, kvankam ili estas efektivigitaj en la kompililo kaj nun. implikita en la norma biblioteko por tabelaj trajtoj 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 paŝoj, kiuj permesas vin 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 uzante LLVM 11 (Rusto uzoj LLVM kiel backend por generado de kodo). Samtempe, la kapablo konstrui kun pli malnovaj LLVM-oj, ĝis versio 8, estas konservita, sed defaŭlte (en rust-lang/llvm-projekto) nun uzas LLVM 11. LLVM 11 estas atendita esti liberigita en la venontaj 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 APIoj estis translokigita al la stabila kategorio, inkluzive de stabiligita
    Ident::new_raw,
    Range::estas_malplena,
    RangeInclusive::estas_malplena,
    Rezulto::as_deref,
    Rezulto::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 implikita ilaro de FreeBSD 11.4 (FreeBSD 10 ne subtenas LLVM 11).

fonto: opennet.ru

Aldoni komenton