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

aconteceu liberação da linguagem de programação do sistema Ferrugem 1.34, desenvolvido pelo projeto Mozilla. A linguagem se concentra na segurança da memória, fornece gerenciamento automático de memória e fornece um meio de alcançar alto paralelismo de tarefas sem usar um coletor de lixo ou 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:

  • O gerenciador de pacotes Cargo adicionou ferramentas para trabalhar com registros de pacotes alternativos que podem coexistir com o registro público crates.io. Por exemplo, os desenvolvedores de aplicativos proprietários agora podem usar seu próprio registro privado, que pode ser usado ao listar dependências no Cargo.toml, e aplicar um modelo de versionamento semelhante ao crates.io para seus produtos, bem como referir dependências a ambas as caixas. io e para seu próprio registro.

    Para adicionar registros externos a .cargo/config (localizado em $HOME ou no diretório do pacote)
    oferecida por seção “[registries]”, e para utilizar um registro externo, a opção “registry” apareceu na descrição de cada dependência no Cargo.toml. Para se conectar a um registro adicional, basta colocar o token de autenticação no arquivo ~/.cargo/credentials e executar o comando
    "cargo login --registry=my-registry" e publicar um pacote -
    "carga publicar -registry=meu-registro";

  • Adicionado suporte completo para usar o operador “?”. em testes doctests, permitindo que você use código de exemplo da documentação como testes. Anteriormente operador
    "?" poderia ser usado para tratar erros durante a execução do teste apenas na presença da função “fn main()” ou nas funções “#[test]”;

  • Em atributos personalizados definidos usando macros procedurais fornecido a capacidade de usar conjuntos arbitrários de tokens (“#[attr($tokens)]”, “#[attr[$tokens]] e #[attr{$tokens}]”). Anteriormente, os elementos só podiam ser especificados em uma forma de árvore/recursiva usando literais de string, por exemplo “#[foo(bar, baz(quux, foo = “bar”))]”, mas agora é possível usar enumerações (' #[range(0. .10)]') e construções como “#[bound(T: MyTrait)]”;
  • Tipos estabilizados (característica) Tentar de и Experimente, permitindo conversões de tipo com tratamento de erros. Por exemplo, métodos como from_be_bytes com tipos inteiros usam arrays como entrada, mas os dados geralmente vêm em um tipo Slice, e a conversão entre arrays e fatias é problemática para ser feita manualmente. Com a ajuda de novas características, a operação especificada pode ser executada dinamicamente por meio de uma chamada para .try_into(), por exemplo, “let num = u32::from_be_bytes(slice.try_into()?)”. Para conversões sempre bem-sucedidas (por exemplo, do tipo u8 para u32), um tipo de erro foi adicionado Infalível, permitindo o uso transparente
    TryFrom para todas as implementações existentes de "From";

  • A função foi descontinuada CommandExt::before_exec, que permitiu que um manipulador fosse executado antes da execução de exec, que foi executado no contexto de um processo filho bifurcado após a chamada fork(). Sob tais condições, alguns recursos do processo pai, como descritores de arquivos e áreas de memória mapeadas, poderiam ser duplicados, o que poderia levar a um comportamento indefinido e operação incorreta de bibliotecas.
    Recomenda-se usar uma função insegura em vez de before_exec CommandExt::pre_exec.

  • Tipos inteiros atômicos estabilizados com e sem sinal, variando em tamanho de 8 a 64 bits (por exemplo, AtômicoU8), bem como tipos assinados Diferente de ZeroI[8|16|32|64|128].
  • Uma nova parte da API foi movida para a categoria estável, incluindo Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] e os métodos SystemTime foram estabilizados ::checked_[add|sub]. As funções iter::from_fn e iter::successors foram estabilizadas;
  • Para todos os tipos inteiros, são implementados os métodos check_pow, saturating_pow, wrap_pow e overflowing_pow;
  • Adicionada a capacidade de ativar otimizações no estágio de vinculação, especificando a opção de construção “-C linker-plugin-lto”.

Fonte: opennet.ru

Adicionar um comentário