Rust 1.47 Programming Language Release

Nai-publish ilabas ang 1.47 ng system programming language Kalawang, na itinatag ng proyekto ng Mozilla. Nakatuon ang wika sa kaligtasan ng memorya, nagbibigay ng awtomatikong pamamahala ng memorya, at nagbibigay ng paraan upang makamit ang mataas na parallelism ng gawain nang hindi gumagamit basurero ΠΈ runtime (runtime ay bumaba sa pangunahing pagsisimula at pagpapanatili ng karaniwang library).

Ang awtomatikong pamamahala ng memorya ng Rust ay nag-aalis ng mga error kapag nagmamanipula ng mga pointer at nagpoprotekta laban sa mga problemang nagmumula sa mababang antas ng pagmamanipula ng memorya, tulad ng pag-access sa isang rehiyon ng memorya pagkatapos na ito ay mapalaya, mga null pointer dereference, buffer overrun, atbp. Ang isang manager ng package ay binuo upang ipamahagi ang mga aklatan, tiyakin ang pagpupulong at pamahalaan ang mga dependency ng proyekto. Karga. Sinusuportahan ang isang repository upang mag-host ng mga aklatan crates.io.

Ang pangunahing mga inobasyon:

  • Ipinatupad ang suporta para sa mga uri mga array kahit anong laki. Dati, dahil sa kawalan ng kakayahang tukuyin ang mga generic na function para sa lahat ng mga halaga ng integer, ang karaniwang library ay nagbigay ng built-in na suporta sa katangian para lamang sa mga array na hanggang 32 elemento ang laki (ang mga katangian para sa bawat laki ay statically tinukoy). Salamat sa paglikha ng functionality ng constant generics ("const generics"), naging posible na tukuyin ang mga generic na function para sa anumang laki ng array, ngunit hindi pa sila kasama sa mga stable na feature ng wika, bagama't ipinatupad ang mga ito sa compiler at ngayon kasangkot sa karaniwang library para sa mga katangian ng array ng anumang laki.

    Halimbawa, ang sumusunod na konstruksyon sa Rust 1.47 ay magpi-print ng mga nilalaman ng isang array, kahit na dati ay nagresulta ito sa isang error:

    fn main() {
    hayaan ang xs = [0; 34];

    println!("{:?}", xs);
    }

  • Ibinigay ang output ng mas maikling mga bakas (backtrace), output sa mga sitwasyong pang-emergency. Ang mga elemento na hindi interesado sa karamihan ng mga sitwasyon, ngunit nakakalat sa output at nakakagambala ng atensyon mula sa mga pangunahing sanhi ng problema, ay hindi kasama sa bakas. Para magbalik ng buong bakas, maaari mong gamitin ang environment variable na "RUST_BACKTRACE=full". Halimbawa, para sa code

    fn main() {
    panic!();
    }

    Dati, ang trace ay output sa 23 yugto, ngunit ngayon ito ay mababawasan sa
    3 hakbang na nagbibigay-daan sa iyo upang agad na maunawaan ang kakanyahan:

    nataranta ang thread na 'pangunahing' sa 'hayagang panic', src/main.rs:2:5
    stack backtrace:
    0: std::panicking::begin_panic
    sa /rustc/d…d75a/library/std/src/panicking.rs:497
    1: palaruan::main
    sa ./src/main.rs:2
    2: core::ops::function::FnOnce::call_once
    sa /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Ang rustc compiler ay na-update upang bumuo gamit LLVM 11 (Kalawang gumagamit LLVM bilang backend para sa pagbuo ng code). Kasabay nito, ang kakayahang bumuo gamit ang mga mas lumang LLVM, hanggang sa bersyon 8, ay pinananatili, ngunit bilang default (sa rust-lang/llvm-project) ay gumagamit na ngayon ng LLVM 11. Inaasahang ilalabas ang LLVM 11 sa mga darating na araw.
  • Sa Windows platform, ang rustc compiler ay nagbibigay ng suporta para sa pagpapagana ng control flow integrity checks (Control Flow Guard), na isinaaktibo gamit ang flag na "-C control-flow-guard". Sa iba pang mga platform ang flag na ito ay hindi pinapansin sa ngayon.
  • Isang bagong bahagi ng mga API ang inilipat sa stable na kategorya, kabilang ang stabilized
    Ident::new_raw,
    Saklaw::is_empty,
    RangeInclusive::is_empty,
    Resulta::as_deref,
    Resulta::as_deref_mut,
    Vec:: tumagas,
    pointer::offset_from,
    f32::TAU at
    f64::TAU.

  • Ang katangiang "const", na tumutukoy sa posibilidad na gamitin ito sa anumang konteksto sa halip na mga constant, ay ginagamit sa mga pamamaraan:
    • bago para sa lahat ng integer maliban sa zero;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub at saturating_mul para sa lahat ng integer;
    • 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 at is_ascii_control para sa mga uri ng char at u8.
  • Para sa FreeBSD kasangkot toolkit mula sa FreeBSD 11.4 (Hindi sinusuportahan ng FreeBSD 10 ang LLVM 11).

Pinagmulan: opennet.ru

Magdagdag ng komento