Lançamento do Rust 1.42.0: modelos de fatia e mensagens de pânico mais convenientes

A equipe Rust tem o prazer de anunciar o lançamento de uma nova versão, 1.42.0. Rust é uma linguagem de programação que permite a todos criar software confiável e eficiente.


Se você instalou a versão anterior do Rust usando ferramentas rustup, para atualizar para a versão 1.42.0, basta executar o seguinte comando:


rustup update stable

Se você ainda não o instalou rustup, pode instalá-lo na página correspondente do nosso site e também ver notas de versão detalhadas no GitHub.


O que está incluído na versão estável 1.42.0


As principais inovações do Rust 1.42.0 são mensagens de pânico mais convenientes no caso de uma chamada unwrap, modelos de fatia, declarando obsoletos Error::descriptione muito mais. Veja as notas de versão para mais informações.


Mensagens de pânico de Optione Resultagora incluem números de linha úteis


No Rust 1.41.1, uma chamada unwrap()para um valor Option::Nonegerou uma mensagem de erro semelhante à seguinte:


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

Da mesma forma, os números de linha em mensagens de pânico gerados por chamadas unwrap_err, expecte expect_err, como os métodos correspondentes para o tipo Result, também designado internos core.


No Rust 1.42.0, todas essas oito funções geram mensagens de pânico que incluem os números de linha de onde foram chamados. Novas postagens são mais ou menos assim:


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

Isso significa que a chamada incorreta unwrapestava na linha 2 do arquivo 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