Rust 1.47 Programming Language Release

Ang paglabas ng 1.47 ng Rust system programming language, na itinatag ng proyekto ng Mozilla, ay nai-publish. 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 ng garbage collector o runtime (runtime ay binabawasan 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. Upang ipamahagi ang mga aklatan, tiyakin ang pagpupulong at pamahalaan ang mga dependency, ang proyekto ay bumubuo ng Cargo package manager. Ang crates.io repository ay suportado para sa pagho-host ng mga aklatan.

Mga pangunahing inobasyon:

  • Ipinatupad ang suporta para sa mga katangian para sa mga array na may di-makatwirang 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 const generics functionality, 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 ginagamit na ngayon sa karaniwang library. para sa mga uri ng array ng anumang laki.
    Halimbawa, ang sumusunod na konstruksyon sa Rust 1.47 ay magpi-print ng mga nilalaman ng isang array, bagama't 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 bakas ay na-output sa 23 yugto, ngunit ngayon ay mababawasan ito sa 3 yugto, 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 ang LLVM 11 (Gumagamit ang Rust ng LLVM bilang backend para sa pagbuo ng code). Kasabay nito, ang kakayahang bumuo gamit ang lumang LLVM, hanggang sa bersyon 8, ay nananatili, ngunit bilang default (sa rust-lang/llvm-project) ay ginagamit na ngayon ang LLVM 11. Inaasahan ang paglabas ng LLVM 11 sa darating na panahon. 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 API ang inilipat sa stable na kategorya, kabilang ang stabilized Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, 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, ginagamit ang toolkit mula sa FreeBSD 11.4 (Hindi sinusuportahan ng FreeBSD 10 ang LLVM 11).

Kinuha mula sa opennet.ru

Pinagmulan: linux.org.ru

Magdagdag ng komento