рдЬрдВрдЧ 1.42.0 рд░рд┐рд▓реАрдЬ: рдЯреБрдХрдбрд╝рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЖрддрдВрдХ рд╕рдВрджреЗрд╢

рд░рд╕реНрдЯ рдЯреАрдо рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг, 1.42.0 рдХреА рд░рд┐рд▓реАрдЬ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реБрдП рдкреНрд░рд╕рдиреНрди рд╣реИред рдЬрдВрдЧ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рд╕рднреА рдХреЛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рдХреБрд╢рд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред


рдпрджрд┐ рдЖрдкрдиреЗ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрдВрдЧ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ rustup, рддреЛ рд╕рдВрд╕реНрдХрд░рдг 1.42.0 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


rustup update stable

рдпрджрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ rustup, рддреЛ рдЖрдк рдЗрд╕реЗ рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреГрд╖реНрда рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рд╕рд╛рде рд╣реА GHHub рдкрд░ рд╡рд┐рд╕реНрддреГрдд рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред


рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг 1.42.0 рдореЗрдВ рдХреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ


рд░рд╕реНрдЯ 1.42.0 рдХреЗ рдореБрдЦреНрдп рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдореЗрдВ рдХреЙрд▓ unwrap, рд╕реНрд▓рд╛рдЗрд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреИрдирд┐рдХ рд╕рдВрджреЗрд╢ рд╣реИрдВ , рдЬреЛ рдЕрдкреНрд░рдЪрд▓рд┐рдд Error::descriptionрдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯ рджреЗрдЦреЗрдВ ред


рдкреИрдирд┐рдХ рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ OptionрдФрд░ ResultрдЕрдм рдЙрдкрдпреЛрдЧреА рд▓рд╛рдЗрди рдирдВрдмрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ


рд░реБрд╕реНрдЯ 1.41.1 рдореЗрдВ, unwrap()рд╡реИрд▓реНрдпреВ рдкрд░ рдХреЙрд▓ Option::Noneрдирд┐рдореНрди рдХреЗ рд╕рдорд╛рди рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:


thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', /.../src/libcore/macros/mod.rs:15:40

рдЗрд╕реА рддрд░рд╣, рдХреЙрд▓ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдкреИрдирд┐рдХ рдореИрд╕реЗрдЬреЗрд╕ рдореЗрдВ рд▓рд╛рдЗрди рдирдВрдмрд░ unwrap_err, expectрдФрд░ expect_err, рдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рддрд░реАрдХреЛрдВ рдХреА рддрд░рд╣ Result, рднреА рдЗрдВрдЯрд░реНрдирд▓ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ coreред


рдЬрдВрдЧ 1.42.0 рдореЗрдВ, рдЗрди рдЖрда рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рд╕рднреА рдЖрддрдВрдХ рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд▓рд╛рдЗрди рдирдВрдмрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдирдИ рдкреЛрд╕реНрдЯ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИрдВ:


thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/main.rs:2:5

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ unwrapрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрди 2 рдкрд░ рдЧрд▓рдд рдХреЙрд▓ рдерд╛ src/main.rsред


#[track_caller]. Rust, , .



Rust 1.26 " ", . :


fn foo(words: &[&str]) {
    match words {
        [] => println!("empty slice!"),
        [one] => println!("one element: {:?}", one),
        [one, two] => println!("two elements: {:?} {:?}", one, two),
        _ => println!("I'm not sure how many elements!"),
    }
}

, . , , .


Rust 1.42 :


fn foo(words: &[&str]) {
    match words {
        ["Hello", "World", "!", ..] => println!("Hello World!"),
        ["Foo", "Bar", ..] => println!("Baz"),
        rest => println!("{:?}", rest),
    }
}

.. " " (rest pattern), . , :


fn foo(words: &[&str]) {
    match words {
        //  ,    ,    "!".
        [.., "!"] => println!("!!!"),

        // `start` -     ,  ,    "z".
        [start @ .., "z"] => println!("starts with: {:?}", start),

        // `end` -     ,  ,    "a".
        ["a", end @ ..] => println!("ends with: {:?}", end),

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

, Inside Rust , ! .


matches!


, matches!, , true, . :


//   match:
match self.partial_cmp(other) {
    Some(Less) => true,
    _ => false,
}

//   `matches!`:
matches!(self.partial_cmp(other), Some(Less))

| if:


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

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

use proc_macro::TokenStream;


Rust 2018 extern crate. - , , , - extern crate proc_macro;.


, Cargo, 2018, ; use . , use proc_macro::TokenStream;, , extern crate proc_macro; . , .




API




Rust 1.42.0: Rust Cargo.



: 32- Apple 3.


Error::description


. Error::description . :


fn description(&self) -> &str

description &str, , . Error ; , , , : String. , Rust , Display/Debug, .


API Rust 1.0. : Rust 1.27, " ". , . , Error. , , Error. , description , тАФ , .


32- Apple


Apple 32- , . 3. , .


1.42.0


, Rust 1.42.0. , !



Rust - .


andreevlex, funkill, Hirrolot nlinker.


All Articles