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 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”.