Versão da linguagem de programação Rust 1.42

publicado liberação da linguagem de programação do sistema Ferrugem 1.42, fundado pelo projeto Mozilla. A linguagem se concentra na segurança da memória, fornece gerenciamento automático de memória e fornece ferramentas para alcançar alto paralelismo de tarefas sem usar um coletor de lixo e tempo de execução.

O gerenciamento automático de memória do Rust libera o desenvolvedor da manipulação de ponteiros e protege contra problemas decorrentes da manipulação de memória de baixo nível, como acessos de memória pós-liberação, desreferências de ponteiro nulo, saturação de buffer e assim por diante. Está sendo desenvolvido um gerenciador de pacotes para distribuir bibliotecas, garantir a montagem e gerenciar dependências pelo projeto. Carga, permitindo que você obtenha as bibliotecas necessárias para o programa com um clique. Um repositório é suportado para hospedar bibliotecas caixas.io.

O principal inovações:

  • Adicionado por suporte para modelos para correspondência de partes de fatias (matrizes dinâmicas, fatia). Anteriormente, as correspondências exatas eram permitidas, mas agora é possível usar construções marcadas com ".." para cobrir os elementos restantes do array. Por exemplo:

    fn foo(palavras: &[&str]) {
    combinar palavras {

    // verifica os elementos iniciais do array e ignora
    elementos que os seguem
    ["Olá", "Mundo", "!", ..] => println!("Olá Mundo!"),

    // verifica os dois primeiros elementos "Foo" e "Bar", e o resto não é importante
    ["Foo", "Bar", ..] => println!("Baz"),

    // ignora tudo, mas o último elemento deve ser "!".
    [.., “!”] => println!(“!!!”),

    // na fatia inicial incluímos tudo exceto o último elemento, que deve ser “z”
    [iniciar @ .., "z"] => println!("começa com: {:?}", iniciar),

    // no slice final colocamos tudo menos o primeiro elemento, que deveria ser “a”.
    ["a", end @ ..] => println!("termina com: {:?}", end),

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

  • Adicionada uma nova macro “corresponde!”, que recebe uma expressão e um padrão como entrada e retorna “verdadeiro” se o padrão corresponder à expressão. O modelo pode usar operações “|” e se".

    corresponder a self.partial_cmp(outro) {
    Alguns (menos) => verdadeiro,
    _ => falso,
    }

    corresponde!(self.partial_cmp(outro), Alguns(Menos))

    deixe foo = 'f';
    afirmar!(corresponde!(foo, 'A'..='Z' | 'a'..='z'));

    deixe barra = Alguns(4);
    afirmar!(corresponde!(bar, Some(x) se x > 2));

  • Em mensagens de pânico exibidas quando usadas incorretamente
    tipos Opção e Resultado agora exibem números de linha com um link para o código que fez a chamada problemática, em vez de links para o código que implementa a chamada na libcore. Por exemplo, a mudança afeta chamadas para unwrap e expect sobre Option::None, ou trava ao usar unwrap_err, expect, expect_err e métodos semelhantes no tipo Result.

  • O gerenciador de pacotes Cargo fornece substituição automática de “proc_macro crate” no bloco “extern” para pacotes com macros procedurais. Esta mudança permite que a diretiva "use" seja aplicada a macros procedurais sem a necessidade de especificar "extern crate proc_macro;" no código. Por exemplo, se o programa usar a linha “use proc_macro::TokenStream;”, então o código continuará funcionando se “extern crate proc_macro;” for removido dele.
  • Os recursos da biblioteca padrão foram expandidos. Em iter::Vazio adicionado Suporte para envio e sincronização para quaisquer valores T.
    Pin de chamadas::{map_unchecked, map_unchecked_mut} entregue de ter que retornar um valor de tipo para a implementação "Sized".
    Em io::Cursor implementado ParcialEq e Eq. O atributo “const” determina a possibilidade de uso em qualquer contexto ao invés de constantes, aplicado para o método Layout::new.

  • Uma nova parte da API foi transferida para a categoria estável incluindo CondVar::wait_while estabilizado CondVar::wait_timeout_while
    DebugMap::chave, DebugMap::valor,
    ManualmenteDrop::take,
    ptr::slice_from_raw_parts_mut e ptr::slice_from_raw_parts.

  • O método Error::description foi descontinuado.
  • Forneceu suporte de segundo nível para plataformas armv7a-none-eabi e riscv64gc-unknown-linux-gnu. Foi fornecido suporte para a biblioteca padrão da plataforma riscv64gc-unknown-linux-gnu.
    Plataformas Apple de 32 bits rebaixado até o terceiro nível de suporte, que implica suporte básico, mas sem testes automatizados e publicação de builds oficiais. O downgrade no suporte se deve ao fato de a Apple não oferecer mais suporte a plataformas de 32 bits.

Fonte: opennet.ru

Adicionar um comentário