ืฉื—ืจื•ืจ ืฉืคืช ืชื›ื ื•ืช Rust 1.42

ื™ืฆื ืœืื•ืจ ืฉื—ืจื•ืจ ืฉืคืช ืชื›ื ื•ืช ืžืขืจื›ืช ื—ืœื•ื“ื” 1.42, ืฉื”ื•ืงืžื” ืขืœ ื™ื“ื™ ืคืจื•ื™ืงื˜ ืžื•ื–ื™ืœื”. ื”ืฉืคื” ืžืชืžืงื“ืช ื‘ื‘ื˜ื™ื—ื•ืช ื–ื™ื›ืจื•ืŸ, ืžืกืคืงืช ื ื™ื”ื•ืœ ื–ื™ื›ืจื•ืŸ ืื•ื˜ื•ืžื˜ื™ ื•ืžืกืคืงืช ื›ืœื™ื ืœื”ืฉื’ืช ืžืงื‘ื™ืœื™ื•ืช ื’ื‘ื•ื”ื” ืฉืœ ืžืฉื™ืžื•ืช ืœืœื ืฉื™ืžื•ืฉ ื‘ืื•ืกืฃ ืืฉืคื” ื–ืžืŸ ืจื™ืฆื”.

ื ื™ื”ื•ืœ ื”ื–ื™ื›ืจื•ืŸ ื”ืื•ื˜ื•ืžื˜ื™ ืฉืœ Rust ืžืฉื—ืจืจ ืืช ื”ืžืคืชื— ืžืžื ื™ืคื•ืœืฆื™ื” ืฉืœ ืžืฆื‘ื™ืขื™ื ื•ืžื’ืŸ ืžืคื ื™ ื‘ืขื™ื•ืช ื”ื ื•ื‘ืขื•ืช ืžืžื ื™ืคื•ืœืฆื™ื” ืฉืœ ื–ื™ื›ืจื•ืŸ ื‘ืจืžื” ื ืžื•ื›ื”, ื›ื’ื•ืŸ ื’ื™ืฉื” ื—ื•ืคืฉื™ืช ืœื–ื™ื›ืจื•ืŸ, ื”ืคื ื™ื™ืช ืžืฆื‘ื™ืข null, ื—ืจื™ื’ื•ืช ืžืื’ืจ ื•ื›ื“ื•ืžื”. ืžื ื”ืœ ื—ื‘ื™ืœื•ืช ืžืคื•ืชื— ืœื”ืคืฆืช ืกืคืจื™ื•ืช, ื”ื‘ื˜ื—ืช ื”ืจื›ื‘ื” ื•ื ื™ื”ื•ืœ ืชืœื•ืช ืขืœ ื™ื“ื™ ื”ืคืจื•ื™ืงื˜. ืžื˜ืขืŸ, ื”ืžืืคืฉืจ ืœืš ืœืงื‘ืœ ืืช ื”ืกืคืจื™ื•ืช ื”ื“ืจื•ืฉื•ืช ืœืชื•ื›ื ื™ืช ื‘ืœื—ื™ืฆื” ืื—ืช. ืžืื’ืจ ื ืชืžืš ื›ื“ื™ ืœืืจื— ืกืคืจื™ื•ืช crates.io.

ื”ืขื™ืงืจื™ ื—ื™ื“ื•ืฉื™ื:

  • ื ื•ืกืฃ ืชืžื™ื›ื” ื‘ืชื‘ื ื™ื•ืช ืœื”ืชืืžืช ื—ืœืงื™ื ืฉืœ ืคืจื•ืกื•ืช (ืžืขืจื›ื™ื ื“ื™ื ืžื™ื™ื, ืคืจื•ืกื”). ื‘ืขื‘ืจ ื”ืชืืคืฉืจื• ื”ืชืืžื•ืช ืžื“ื•ื™ืงื•ืช, ืืš ื›ืขืช ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืงื•ื ืกื˜ืจื•ืงื˜ื™ื ื”ืžืกื•ืžื ื™ื ".." ื›ื“ื™ ืœื›ืกื•ืช ืืช ืฉืืจ ื”ืืœืžื ื˜ื™ื ืฉืœ ื”ืžืขืจืš. ืœื“ื•ื’ืžื”:

    fn foo(words: &[&str]) {
    ื”ืชืืžืช ืžื™ืœื™ื {

    // ื‘ื•ื“ืง ืืช ืจื›ื™ื‘ื™ ื”ื”ืชื—ืœื” ืฉืœ ื”ืžืขืจืš ื•ืžืชืขืœื
    ืืœืžื ื˜ื™ื ื”ื‘ืื™ื ืื—ืจื™ื”ื
    ["ืฉืœื•ื", "ืขื•ืœื", "!", ..] => println!("ืฉืœื•ื ืขื•ืœื!"),

    // ื‘ื•ื“ืง ืืช ืฉื ื™ ื”ืืœืžื ื˜ื™ื ื”ืจืืฉื•ื ื™ื "Foo" ื•-"Bar", ื•ื”ืฉืืจ ืœื ื—ืฉื•ื‘
    ["Foo", "Bar", ..] => println!("Baz"),

    // ืชืชืขืœื ืžื”ื›ืœ, ืื‘ืœ ื”ืืœืžื ื˜ ื”ืื—ืจื•ืŸ ื—ื™ื™ื‘ ืœื”ื™ื•ืช "!".
    [.., "!"] => println!(โ€œ!!!โ€),

    // ื‘ืคืจื•ืกืช ื”ื”ืชื—ืœื” ืื ื• ื›ื•ืœืœื™ื ื”ื›ืœ ืžืœื‘ื“ ื”ืืœืžื ื˜ ื”ืื—ืจื•ืŸ, ืฉืืžื•ืจ ืœื”ื™ื•ืช "z"
    [start @ .., "z"] => println!("ืžืชื—ื™ืœ ืขื: {:?}", ื”ืชื—ืœ),

    // ื‘ืคืจื•ืกื” ื”ืกื•ืคื™ืช ืฉืžื ื• ื”ื›ืœ ืžืœื‘ื“ ื”ืืœืžื ื˜ ื”ืจืืฉื•ืŸ, ืฉืืžื•ืจ ืœื”ื™ื•ืช "a".
    ["a", end @ ..] => println!("ืžืกืชื™ื™ื ืขื: {:?}", ืกื•ืฃ),

    rest => println!("{:?}", rest),
    }
    }

  • ื ื•ืกืฃ ืžืืงืจื• ื—ื“ืฉ "ืžืชืื™ื!", ืฉืœื•ืงื— ื‘ื™ื˜ื•ื™ ื•ืชื‘ื ื™ืช ื›ืงืœื˜, ื•ืžื—ื–ื™ืจ "true" ืื ื”ืชื‘ื ื™ืช ืชื•ืืžืช ืœื‘ื™ื˜ื•ื™. ื”ืชื‘ื ื™ืช ื™ื›ื•ืœื” ืœื”ืฉืชืžืฉ ื‘ืคืขื•ืœื•ืช "|". ื•ืื".

    match self.partial_cmp(other) {
    ื—ืœืง (ืคื—ื•ืช) => ื ื›ื•ืŸ,
    _ => ืฉืงืจ,
    }

    matches!(self.partial_cmp(other), Some(Less))

    let foo = 'f';
    assert!(matches!(foo, 'A'..='Z' | 'a'..='z'));

    let bar = Some(4);
    assert!(matches!(bar, Some(x) if x > 2));

  • ื”ื•ื“ืขื•ืช ื‘ื”ืœื” ื”ืžื•ืฆื’ื•ืช ื‘ืขืช ืฉื™ืžื•ืฉ ืœื ื ื›ื•ืŸ
    ืกื•ื’ื™ื Option ื•-Result, ืžืฆื™ื’ื™ื ื›ืขืช ืžืกืคืจื™ ืฉื•ืจื•ืช ืขื ืงื™ืฉื•ืจ ืœืงื•ื“ ืฉืขืฉื” ืืช ื”ืงืจื™ืื” ื”ื‘ืขื™ื™ืชื™ืช, ื‘ืžืงื•ื ืงื™ืฉื•ืจื™ื ืœืงื•ื“ ื”ืžื™ื™ืฉื ืืช ื”ืงืจื™ืื” ื‘-libcore. ืœื“ื•ื’ืžื”, ื”ืฉื™ื ื•ื™ ืžืฉืคื™ืข ืขืœ ืงืจื™ืื•ืช ืœ- unwrap and expect over Option::None, ืื• ืงื•ืจืก ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-unwrap_err, expect, expect_err ื•ืฉื™ื˜ื•ืช ื“ื•ืžื•ืช ื‘ืกื•ื’ Result.

  • ืžื ื”ืœ ื”ื—ื‘ื™ืœื•ืช ืฉืœ Cargo ืžืกืคืง ื”ื—ืœืคื” ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ "proc_macro crate" ืœื‘ืœื•ืง "extern" ืขื‘ื•ืจ ื—ื‘ื™ืœื•ืช ืขื ืคืงื•ื“ื•ืช ืžืืงืจื• ืคืจื•ืฆื“ื•ืจืœื™ื•ืช. ืฉื™ื ื•ื™ ื–ื” ืžืืคืฉืจ ืœื”ื—ื™ืœ ืืช ื”ื”ื ื—ื™ื” "use" ืขืœ ืคืงื•ื“ื•ืช ืžืืงืจื• ืคืจื•ืฆื“ื•ืจืœื™ื•ืช ืžื‘ืœื™ ืœืฆื™ื™ืŸ "extern crate proc_macro;" ื‘ืงื•ื“. ืœื“ื•ื’ืžื”, ืื ื”ืชื•ื›ื ื™ืช ืžืฉืชืžืฉืช ื‘ืฉื•ืจื” "use proc_macro::TokenStream;", ืื– ื”ืงื•ื“ ื™ืžืฉื™ืš ืœืขื‘ื•ื“ ืื "extern crate proc_macro;" ื™ื•ืกืจ ืžืžื ื•.
  • ื”ื™ื›ื•ืœื•ืช ืฉืœ ื”ืกืคืจื™ื™ื” ื”ืกื˜ื ื“ืจื˜ื™ืช ื”ื•ืจื—ื‘ื•. ื‘ืื™ื˜ืจ::ืจื™ืง ื”ื•ืกื™ืฃ ืชืžื™ื›ืช ืฉืœื™ื—ื” ื•ืกื ื›ืจื•ืŸ ืœื›ืœ ืขืจื›ื™ T.
    ืกื™ื›ืช ืฉื™ื—ื•ืช::{map_unchecked, map_unchecked_mut} ื ืžืกืจ ืžื”ืฆื•ืจืš ืœื”ื—ื–ื™ืจ ืขืจืš ืกื•ื’ ืขื‘ื•ืจ ื”ื™ื™ืฉื•ื "ื’ื•ื“ืœ".
    ื‘-io::ืกืžืŸ ืžื•ื˜ืžืข PartialEq ื•-Eq. ื”ืชื›ื•ื ื” "const" ืงื•ื‘ืขืช ืืช ืืคืฉืจื•ืช ื”ืฉื™ืžื•ืฉ ื‘ื›ืœ ื”ืงืฉืจ ื‘ืžืงื•ื ืงื‘ื•ืขื™ื, ืžื™ื•ืฉื ืขื‘ื•ืจ ื”ืฉื™ื˜ื” Layout::new.

  • ื—ืœืง ื—ื“ืฉ ืฉืœ ื”-API ื”ื•ืขื‘ืจ ืœืงื˜ื’ื•ืจื™ื” ื”ื™ืฆื™ื‘ื”, ื›ื•ืœืœ ื”-CondVar::wait_while ื”ืžื™ื•ืฆื‘, CondVar::wait_timeout_while,
    DebugMap::key, DebugMap::value,
    ื™ื“ื ื™ Drop::take,
    ptr::slice_from_raw_parts_mut ื•-ptr::slice_from_raw_parts.

  • ืฉื™ื˜ืช Error::description ื”ื•ืฆืื” ืžืฉื™ืžื•ืฉ.
  • ืกื™ืคืง ืชืžื™ื›ื” ื‘ืจืžื” ืฉื ื™ื™ื” ืขื‘ื•ืจ ืคืœื˜ืคื•ืจืžื•ืช armv7a-none-eabi ื•-riscv64gc-unknown-linux-gnu. ื ื™ืชื ื” ืชืžื™ื›ื” ื‘ืกืคืจื™ื™ื” ื”ืกื˜ื ื“ืจื˜ื™ืช ืขื‘ื•ืจ ืคืœื˜ืคื•ืจืžืช riscv64gc-unknown-linux-gnu.
    ืคืœื˜ืคื•ืจืžื•ืช 32 ืกื™ื‘ื™ื•ืช ืฉืœ ืืคืœ ื”ื•ืจื“ ื‘ื“ืจื’ื” ืขื“ ืœืจืžื” ื”ืฉืœื™ืฉื™ืช ืฉืœ ืชืžื™ื›ื”, ืžื” ืฉืžืจืžื– ืขืœ ืชืžื™ื›ื” ื‘ืกื™ืกื™ืช, ืืš ืœืœื ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช ื•ืคืจืกื•ื ืฉืœ ืžื‘ื ื™ื ืจืฉืžื™ื™ื. ื”ืฉื“ืจื•ื’ ืœืื—ื•ืจ ื‘ืชืžื™ื›ื” ื ื•ื‘ืข ืžื›ืš ืฉืืคืœ ื›ื‘ืจ ืœื ืชื•ืžื›ืช ื‘ืคืœื˜ืคื•ืจืžื•ืช 32 ืกื™ื‘ื™ื•ืช.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”