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

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

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

  • เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ” arrays เบ‚เบฐเปœเบฒเบ”เปƒเบ”เบเปเป„เบ”เป‰. เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบปเปˆเบงเป„เบ›เบชเปเบฒเบฅเบฑเบšเบ„เปˆเบฒเบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบกเบ—เบฑเบ‡เบซเบกเบปเบ”, เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เป„เบ”เป‰เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบš arrays เบ—เบตเปˆเบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เป€เบ–เบดเบ‡ 32 เบญเบปเบ‡เบ›เบฐเบเบญเบš (เบฅเบฑเบเบชเบฐเบ™เบฐเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ‚เบฐเบซเบ™เบฒเบ”เปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบชเบฐเบ–เบดเบ•เบด). เบ‚เปเบ‚เบญเบšเปƒเบˆเบเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบญเบ‡ generics เบ„เบปเบ‡เบ—เบตเปˆ (" 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 (เบชเบญเบ เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ LLVM เป€เบ›เบฑเบ™ backend เบชเปเบฒเบฅเบฑเบš เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”). เปƒเบ™เบ‚เบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™, เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฑเบš LLVMs เป€เบเบปเปˆเบฒ, เป€เบ–เบดเบ‡เบฎเบธเปˆเบ™ 8, เป„เบ”เป‰เบ–เบทเบเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบงเป‰, เปเบ•เปˆเป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ (เปƒเบ™. rust-lang/llvm-เป‚เบ„เบ‡เบเบฒเบ™) เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰ LLVM 11. LLVM 11 เบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒเปƒเบ™เบกเบทเป‰เบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบฒ.
  • เปƒเบ™เปเบžเบฅเบฐเบ•เบฐเบŸเบญเบก Windows, rustc compiler เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบชเบปเบกเบšเบนเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ„เบงเบšเบ„เบธเบก (Control Flow Guard), activated เป‚เบ”เบเปƒเบŠเป‰เบ—เบธเบ‡ "-C control-flow-guard". เปƒเบ™เป€เบงเบ—เบตเบญเบทเปˆเบ™เป†, เบ—เบธเบ‡เบ™เบตเป‰เบ–เบทเบเบฅเบฐเป€เบฅเบตเบเปƒเบ™เบ•เบญเบ™เบ™เบตเป‰.
  • เบชเปˆเบงเบ™เปƒเบซเบกเปˆเบ‚เบญเบ‡ APIs เป„เบ”เป‰เบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡, เบฅเบงเบกเบ—เบฑเบ‡เบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡
    Ident::new_raw,
    เบŠเปˆเบงเบ‡::is_empty,
    RangeInclusive::is_empty,
    เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš::as_deref,
    เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš::as_deref_mut,
    Vec::เบฎเบปเปˆเบง,
    เบ•เบปเบงเบŠเบตเป‰::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

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