เบ›เปˆเบญเบ 1.47 เบ‚เบญเบ‡เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบฅเบฐเบšเบปเบš Rust, เบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเป‚เบ„เบ‡เบเบฒเบ™ Mozilla, เป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เบžเบตเบกเบกเบฒ. เบžเบฒเบชเบฒเบชเบธเบกเปƒเบชเปˆเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เปเบฅเบฐเบชเบฐเบซเบ™เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เป€เบžเบทเปˆเบญเบšเบฑเบ™เบฅเบธเบงเบฝเบเบ‡เบฒเบ™เบ‚เบฐเบซเบ™เบฒเบ™เบชเบนเบ‡เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เป€เบเบฑเบšเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบซเบผเบท runtime (runtime เบซเบผเบธเบ”เบฅเบปเบ‡เป€เบ›เบฑเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปเบฅเบฐเบเบฒเบ™เบšเปเบฒเบฅเบธเบ‡เบฎเบฑเบเบชเบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™).

เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ‚เบญเบ‡ Rust เบเปเบฒเบˆเบฑเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ manipulating pointers เปเบฅเบฐเบ›เป‰เบญเบ‡เบเบฑเบ™เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเป€เบเบตเบ”เบˆเบฒเบเบเบฒเบ™เบซเบกเบนเบ™เปƒเบŠเป‰เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒ, เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบžเบฒเบเบžเบทเป‰เบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบปเบ”เบ›เปˆเบญเบ, null pointer dereferences, buffer overruns, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เป€เบžเบทเปˆเบญเปเบˆเบเบขเบฒเบเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”, เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™เบ›เบฐเบเบญเบšเปเบฅเบฐเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช, เป‚เบ„เบ‡เบเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒเบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ”เบชเบดเบ™เบ„เป‰เบฒ. เบ„เบฑเบ‡เป€เบเบฑเบš crates.io เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบžเบฒเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”.

เบ™เบฐเบงเบฑเบ”เบ•เบฐเบเปเบฒเบ•เบปเป‰เบ™เบ•เป:

  • เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบชเปเบฒเบฅเบฑเบš array เบ‚เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ” arbitrary. เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบปเปˆเบงเป„เบ›เบชเปเบฒเบฅเบฑเบšเบ„เปˆเบฒเบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบกเบ—เบฑเบ‡เบซเบกเบปเบ”, เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เป„เบ”เป‰เบชเบฐเบซเบ™เบญเบ‡เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เบ•เบปเบงเบžเบฝเบ‡เปเบ•เปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ arrays เบ—เบตเปˆเบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เป€เบ–เบดเบ‡ 32 เบญเบปเบ‡เบ›เบฐเบเบญเบš (เบฅเบฑเบเบชเบฐเบ™เบฐเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ‚เบฐเบซเบ™เบฒเบ”เปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบชเบฐเบ–เบดเบ•เบด). เบ‚เปเบ‚เบญเบšเปƒเบˆเบเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ‚เบญเบ‡ const generics, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบเปเบฒเบ™เบปเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบปเปˆเบงเป„เบ›เบชเปเบฒเบฅเบฑเบšเบ‚เบฐเบซเบ™เบฒเบ” array เปƒเบ”, เปเบ•เปˆเบžเบงเบเบกเบฑเบ™เบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบฅเบงเบกเบขเบนเปˆเปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เบ‚เบญเบ‡เบžเบฒเบชเบฒ, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเบนเปˆเปƒเบ™ compiler เปเบฅเบฐเบ›เบฐเบˆเบธเบšเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™. เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ” array เบ‚เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบ”เบเปเปˆเบ•เบฒเบก.
    เบ•เบปเบงเบขเปˆเบฒเบ‡, เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปƒเบ™ Rust 1.47 เบˆเบฐเบžเบดเบกเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡ array, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เบกเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”:

fn เบซเบผเบฑเบ() {
เปƒเบซเป‰ xs = [0; 34];
println!("{:?}", xs);
}

  • เบชเบฐเบซเบ™เบญเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบฎเบญเบเบ—เบตเปˆเบชเบฑเป‰เบ™เบเบงเปˆเบฒ (backtrace), เบœเบปเบ™เบœเบฐเบฅเบดเบ”เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบชเบธเบเป€เบชเบตเบ™. เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆ, เปเบ•เปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบœเบปเบ™เบœเบฐเบฅเบดเบ”เปเบฅเบฐเบฅเบปเบšเบเบงเบ™เบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเบˆเบฒเบเบชเบฒเป€เบซเบ”เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒ, เปเบกเปˆเบ™เบ–เบทเบเบเบปเบเป€เบงเบฑเป‰เบ™เบˆเบฒเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก. เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบ„เบทเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเป€เบ•เบฑเบก, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก "RUST_BACKTRACE=full". เบ•เบปเบงเบขเปˆเบฒเบ‡, เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบซเบฑเบ”

fn เบซเบผเบฑเบ() {
เบ„เบงเบฒเบกโ€‹เบ•เบทเปˆโ€‹เบ™โ€‹เบ•เบปเบโ€‹เปƒเบˆ!();
}

เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเปเบกเปˆเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เปƒเบ™ 23 เบ‚เบฑเป‰เบ™เบ•เบญเบ™, เปเบ•เปˆเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบฑเบ™เบˆเบฐเบ–เบทเบเบซเบผเบธเบ”เบฅเบปเบ‡เป€เบ›เบฑเบ™ 3 เบ‚เบฑเป‰เบ™เบ•เบญเบ™, เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเป„เบ”เป‰เบ—เบฑเบ™เบ—เบต:

เบเบฐเบ—เบนเป‰ 'เบซเบผเบฑเบ' เบ•เบปเบเปƒเบˆเบขเบนเปˆ 'เบ„เบงเบฒเบกเบ•เบทเปˆเบ™เบ•เบปเบเปƒเบˆเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡', src/main.rs:2:5
stack backtrace:
0: std::panicking::begin_panic
เบ—เบตเปˆ /rustc/dโ€ฆd75a/library/std/src/panicking.rs:497
1: เบชเบฐเบซเบ™เบฒเบกเป€เบ”เบฑเบเบซเบผเบดเป‰เบ™:: เบ•เบปเป‰เบ™เบ•เป
เบ—เบตเปˆ ./src/main.rs:2
2: เบซเบผเบฑเบ::ops::function::FnOnce::call_once
เบ—เบตเปˆ /rustc/dโ€ฆd75a/library/core/src/ops/function.rs:227

  • rustc compiler เป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เป‚เบ”เบเปƒเบŠเป‰ LLVM 11 (Rust เปƒเบŠเป‰ LLVM เป€เบ›เบฑเบ™ backend เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”). เปƒเบ™เบ‚เบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™, เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ”เป‰เบงเบ LLVM เป€เบเบปเปˆเบฒ, เป€เบ–เบดเบ‡เบฎเบธเปˆเบ™ 8, เป„เบ”เป‰เบ–เบทเบเบฎเบฑเบเบชเบฒเป„เบงเป‰, เปเบ•เปˆเป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ (เปƒเบ™ rust-lang/llvm-project) LLVM 11 เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™. เบเบฒเบ™เบ›เปˆเบญเบ LLVM 11 เบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเบขเบนเปˆเปƒเบ™เบ—เบตเปˆเบˆเบฐเบกเบฒเป€เบ–เบดเบ‡. เบกเบทเป‰.
  • เปƒเบ™เปเบžเบฅเบฐเบ•เบฐเบŸเบญเบก Windows, rustc compiler เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบชเบปเบกเบšเบนเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ„เบงเบšเบ„เบธเบก (Control Flow Guard), เป€เบ›เบตเบ”เปƒเบŠเป‰เป‚เบ”เบเปƒเบŠเป‰เบ—เบธเบ‡ "-C control-flow-guard". เปƒเบ™เป€เบงเบ—เบตเบญเบทเปˆเบ™เป†, เบ—เบธเบ‡เบ™เบตเป‰เบ–เบทเบเบฅเบฐเป€เบฅเบตเบเปƒเบ™เบ•เบญเบ™เบ™เบตเป‰.
  • เบชเปˆเบงเบ™เปƒเปเปˆเบ‚เบญเบ‡ API เป„เบ”เป‰เบ–เบทเบเป‚เบญเบ™เป„เบ›เปƒเบชเปˆเปเบงเบ”เปเบนเปˆเบ—เบตเปˆเปเบฑเป‰เบ™เบ„เบปเบ‡, เบฅเบงเบกเบ—เบฑเบ‡ Ident เบ„เบปเบ‡เบ—เบตเปˆ::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32:: TAU เปเบฅเบฐ f64::TAU.
  • เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ "const", เป€เบŠเบดเปˆเบ‡เบเปเบฒเบ™เบปเบ”เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบกเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบ„เปˆเบฒเบ„เบปเบ‡เบ—เบตเปˆ, เปเบกเปˆเบ™เปƒเบŠเป‰เปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™:
    • เปƒเปเปˆเบชเบณเบฅเบฑเบšเบˆเบณเบ™เบงเบ™เป€เบ•เบฑเบกเบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบชเบนเบ™;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub เปเบฅเบฐ saturating_mul เบชเปเบฒเบฅเบฑเบšเบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบกเบ—เบฑเบ‡เบซเบกเบปเบ”;
    • is_ascii_alphabetic, is_ascii_เบ•เบปเบงเบžเบดเบกเปƒเบซเบเปˆ, is_ascii_เบ•เบปเบงเบžเบดเบกเบ™เป‰เบญเบ, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace_c u เปเบฅเบฐ 8ascii.
  • เบชเปเบฒเบฅเบฑเบš FreeBSD, เบŠเบธเบ”เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบˆเบฒเบ FreeBSD 11.4 เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰ (FreeBSD 10 เบšเปเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ LLVM 11).

เป€เบญเบปเบฒเบกเบฒเบˆเบฒเบ opennet.ru

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: linux.org.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™