A abordagem exclusiva da linguagem de programação Rust resulta em um código melhor com menos comprometimentos do que C, C++, Go e outras linguagens que você provavelmente usa. Ele também é atualizado regularmente, geralmente todos os meses.

Onde baixar a versão mais recente do Rust

Se você já possui uma versão anterior do Rust instalada via ferrugem, você pode acessar a versão mais recente através do seguinte comando:

$ rustup update stable

Os novos recursos do Rust 1.76.0

Descrito como relativamente pequeno pela equipe de lançamento do Rust, o Rust 1.76 foi lançado em 8 de fevereiro e oferece atualizações de compatibilidade ABI. Uma nova seção de compatibilidade de ABI na documentação do ponteiro de função descreve o que significa que as assinaturas de função sejam compatíveis com ABI.

A compatibilidade da ABI consiste principalmente na compatibilidade de tipos de argumentos e tipos de retorno. A documentação de compatibilidade da ABI lista os tipos que são garantidos como compatíveis com a ABI e observa os tipos que não são compatíveis com a ABI em geral. Uma nova adição a esta lista: agora é garantido que char e u32 são compatíveis com ABI. Eles sempre tiveram o mesmo tamanho e alinhamento, mas agora também são considerados equivalentes na chamada funcional ABI.

Rust 1.76 também fornece uma nova maneira de obter nomes de tipos a partir de referências. O any::type_name_of_val(&T) retornará um nome descritivo de qualquer referência a qualquer tipo.

Finalmente, o Rust 1.76 também estabiliza nove APIs:

  • Arc::unwrap_or_clone
  • Rc::unwrap_or_clone
  • Result::inspect
  • Result::inspect_err
  • Option::inspect
  • type_name_of_val
  • std::hash::{DefaultHasher, RandomState}
  • ptr::{from_ref, from_mut}
  • ptr::addr_eq

Os novos recursos do Rust 1.75.0

Introduzido em 28 de dezembro, Rust 1.75.0 suporta o uso de asyn fn e -> impl Trait em traços. No entanto, a versão inicial vem com algumas limitações, que deverão ser eliminadas em versões futuras.

Também no Rust 1.75.0, o compilador continua a ficar mais rápido, com o lançamento incluindo a aplicação do otimizador BOLT para versões binárias, trazendo uma melhoria de 2% no tempo decorrido nos benchmarks. BOLT otimiza o layout do librustc_driver.so biblioteca contendo a maior parte do código Rustc, para melhor utilização do cache.

Além disso, a equipe de desenvolvimento do Rust agora está construindo o Rustc com -Ccodegen-units=1, oferecendo mais oportunidades para otimizações no LLVM. Essa otimização trouxe uma melhoria separada de 1,5% nos benchmarks.

Rust 1.75.0 também apresenta APIs estabilizadas, incluindo Atomic*::from_ptr, FileTimes, FileTimesExt, File::set_modified, File::set_timese IpAddr::to_canonical.

Os novos recursos do Rust 1.74.0

Lançado em 16 de novembro, Rust 1.74.0 chega ao gerenciador de pacotes Cargo com vários recursos. Rust 1.74.0 oferece configuração de lint por meio do Cargo. O manifesto Cargo.toml agora oferece suporte a uma tabela (lints) para configurar o nível de relatório (proibir, negar, avisar, permitir) para lints do compilador e outras ferramentas. Com esta capacidade, não há necessidade de definir RUSTFLAGS (-F, -D, -W, -A), o que afetaria uma compilação inteira ou usaria atributos no nível de criação, como:

#!(forbid(unsafe_code))#!(deny(clippy::enum_glob_use))

Os desenvolvedores agora podem escrever esses atributos em um manifesto de pacote para o Cargo manipular:

(lints.rust)unsafe_code = "forbid" (lints.clippy)enum_glob_use = "deny"

Eles também podem ser configurados em um (workspace.lints) tabela, então herdada por (lints) workspace = true como outras configurações do espaço de trabalho. O Cargo rastreia as alterações nessas configurações ao decidir quais caixas reconstruir.

Outros recursos relacionados ao Cargo destacados no Rust 1.74.0 incluem provedores de credenciais e registros privados autenticados. Os provedores de credenciais permitem a configuração de como o Cargo obtém credenciais para um registro. Provedores integrados estão incluídos para armazenamento seguro de segredos relacionados ao sistema operacional em Linux, Windows e macOS. Provedores personalizados podem ser desenvolvidos para oferecer suporte a métodos arbitrários de armazenamento ou geração de tokens.

Os registros agora podem opcionalmente exigir autenticação para todas as operações, não apenas para publicação. Isso permite que registros privados de carga forneçam hospedagem mais segura de caixas. O uso de registros privados requer a configuração de um provedor de credenciais.

Rust 1.74.0 corrige uma situação em que foram recebidos erros de que “um tipo de retorno não pode conter uma projeção ou Self que faz referência a tempos de vida de um escopo pai.” O compilador agora permite mencionar Self e tipos associados em tipos de retorno opacos, como async fn e -> impl Trait. Esse recurso aproxima o Rust de como a linguagem deve funcionar, disse a equipe de lançamento do Rust. Esta funcionalidade tinha um feature gate instável porque sua implementação originalmente não lidava adequadamente com os tempos de vida capturados. Depois que isso foi corrigido, foi dado tempo para ter certeza de que estava tudo bem.

Rust 1.74.0 estabiliza uma série de APIs, como core::num::Saturating, std::io::Error::othere impl_TryFrom<char> for u16. O lançamento também aumenta os requisitos mínimos das plataformas Apple para macOS 10.12 Sierra, iOS 10 e tvOS 10.

Os novos recursos do Rust 1.73.0

Rust 1.73.0, publicado em 5 de outubro, traz mensagens de pânico mais limpas. A saída produzida pelo manipulador de pânico padrão foi alterada para colocar mensagens de pânico em sua própria linha, em vez de serem colocadas entre aspas. Isso pode facilitar a leitura das mensagens de pânico, disse a equipe de lançamento do Rust. Além disso, mensagens de pânico produzidas por assert-eg e assert-ne foram modificados, movendo a mensagem personalizada e removendo algumas pontuações desnecessárias.

Rust 1.73.0 também apresenta inicialização local de thread. LocalKey<Cell<T>> e LocalKey<RefCell<T>> agora pode ser manipulado diretamente com get(), set()e replace() métodos em vez de saltar através de um with(|inner| …) fechamento conforme necessário para geral LocalKey trabalhar. LocalKey<T> é o tipo de thread_local! estática. Os novos métodos tornam o código comum mais conciso e evitam a execução de código de inicialização extra para o valor padrão especificado em thread_local! para novos tópicos. Rust 1.73 também estabiliza várias APIs.

Os novos recursos do Rust 1.72.0

Anunciado em 24 de agosto, Rust 1.72.0 permite que os desenvolvedores habilitem código condicionalmente usando o cfg operador, para verificações condicionais de configuração, para fornecer determinadas funções apenas com determinados recursos de caixa ou apenas em plataformas específicas. Anteriormente, os itens desabilitados assim seriam efetivamente invisíveis para o compilador. Com Rust 1.72.0, o compilador lembrará o nome e cfg condições desses itens. Ele poderia relatar, por exemplo, se uma função que um desenvolvedor tentou chamar não está disponível porque um recurso de caixa deve estar habilitado.

Também em Rust 1.72.0, const o tempo de avaliação agora é ilimitado. Anteriormente, Rust limitava o número máximo de instruções executadas como parte de qualquer avaliação constante, para evitar const avaliação de entrar em um loop infinito em tempo de compilação ou de outra forma levar tempo ilimitado na compilação. Os desenvolvedores agora podem fazer uma quantidade ilimitada de const avaliação em tempo de compilação.

Em outras partes do Rust 1.72.0, vários lints do Clippy foram colocados no Rustc. E uma série de APIs foram estabilizadas, incluindo CStr::from_bytes_with_nul e CStr::to_Bytes.

Em uma versão futura, a equipe de desenvolvimento do Rust planeja aumentar a versão mínima do Windows com suporte para o Windows 10. O Rust 1.75 está programado para ser a última versão do Rust a oferecer suporte oficial ao Windows 7, Windows 8 e Windows 8.1.

Rust 1.72.0 segue Rust 1.71.1 de 3 de agosto, que corrigiu uma situação em que o gerenciador de pacotes Cargo não respeitava o desmascaramento ao extrair dependências, o que poderia ter permitido que um invasor local editasse o cache do código-fonte extraído de outro usuário . Rust 1.71.1 também abordou várias regressões introduzidas em Rust 1.71.0, incluindo a conclusão do Bash sendo interrompida para usuários do instalador do conjunto de ferramentas Rustup.

Os novos recursos do Rust 1.71.0

Rust 1.71.0 foi lançado em 13 de julho. Com esta versão, Rust nas plataformas Windows suporta o uso de funções de bibliotecas dinâmicas sem exigir que essas bibliotecas estejam disponíveis no momento da construção, usando um novo kind="raw-dylib”" opção para #(link). Isso evita que os usuários tenham que instalar essas bibliotecas, o que é particularmente um problema para compilação cruzada, e evita ter que enviar versões stub de bibliotecas em caixas para vincular. Rust 1.71.0 também suporta símbolos de ligação fornecidos por DLLs por ordinal em vez de símbolo nomeado, por meio de um novo #link_ordinal atributo.

Também novo e melhorado no Rust 1.71.0:

  • Para visualização de depuração, o suporte é estabilizado para um novo atributo, #(debug_visualizer(natvis_file = "...")) e #(debug_visualizer(gdb_script_file = "...")), que permite incorporar descrições da estrutura XML Natvis e scripts GDB em bibliotecas Rust para melhorar a saída do depurador ao inspecionar estruturas de dados criadas por essas bibliotecas. Rust empacotou scripts semelhantes há algum tempo para a biblioteca padrão. Esse recurso permite que os criadores de bibliotecas forneçam uma experiência semelhante aos usuários.
  • Rust 1.71.0 estabiliza c-unwind e outro -unwind variantes ABI com sufixo. Cada ABI é equivalente à mesma ABI sem -unwindexceto que com -unwind o comportamento é definido como seguro quando uma operação de desenrolamento (uma exceção de pânico ou estilo C++) cruza o limite da ABI. Para panic-unwind, esta é uma maneira válida de permitir que exceções de um idioma desenrolem a pilha em outro idioma sem encerrar o processo, desde que a exceção seja capturada no mesmo idioma de onde se originou. Para panic=abort, isso normalmente abortará o processo imediatamente. Para esta estabilização inicial, nenhuma alteração é feita nas ABIs existentes; desenrolar-se entre eles permanece um comportamento indefinido. Uma versão futura do Rust alterará essas ABIs para corresponder ao comportamento especificado em uma RFC relacionada como a parte final da estabilização desse recurso, geralmente abortando no limite. Os desenvolvedores são incentivados a começar a usar novas variantes de ABI em seu código para permanecerem preparados para o futuro caso precisem se desenrolar além dos limites da ABI.
  • Vários *-linux-musl Os alvos serão fornecidos com o musl 1.2.3, uma implementação da biblioteca padrão C construída sobre a API de chamada do sistema Linux. Não se espera que a maioria dos usuários seja afetada por isso.
  • Várias APIs foram estabilizadas, como CStr::is_empty e BuildHasher::hash_one.

Os novos recursos do Rust 1.70

Lançado em 1º de junho de 2023, Rust 1.70 habilita por padrão o protocolo “esparso” para Cargo para leitura do índice de crates.io. Este recurso foi estabilizado no Rust 1.68, mas usá-lo com crates.io ainda exigia configuração. Os usuários devem ver um desempenho substancialmente melhorado ao buscar informações do índice crates.io.

Também no Rust 1.70, dois tipos foram estabilizados para inicialização única de dados compartilhados: OnceCell e sua contraparte thread-safe, OnceLock. Eles podem ser usados ​​em qualquer lugar onde a construção imediata não seja desejada e talvez nem mesmo possível, como em locais não residenciais.const dados em variáveis ​​globais.

Uma característica IsTerminal recém-estabilizada possui um único método para determinar se um determinado descritor ou identificador de arquivo representa um terminal ou TTY. Este é mais um caso de padronização de funcionalidades que existiam em características externas, como atty e is-terminalusando a biblioteca C isatty função em alvos Unix e funcionalidade semelhante em outros lugares. A versão 1.70 também suporta níveis nomeados de informações de depuração. Versões estáveis ​​e beta do Rust não permitirão mais instabilidade test opções, tornando-as verdadeiramente noturnas, conforme documentado. Rust 1.70 também estabiliza uma série de APIs, como NonZero*::MIN/MAX e BinaryHeap::retain.

Os novos recursos do Rust 1.69

Anunciado em 20 de abril de 2023, o Rust 1.69 não oferece novos recursos importantes, mas contém muitas pequenas melhorias, incluindo mais de 3.000 commits de mais de 500 colaboradores, disse a equipe de lançamento do Rust.

Rust 1.29 introduziu o cargo fix subcomando para corrigir automaticamente alguns avisos simples do compilador. Desde então, o número de avisos que podem ser corrigidos automaticamente continuou a aumentar. Além disso, foi adicionado suporte para corrigir automaticamente alguns avisos simples do Clippy. Para chamar a atenção para essas capacidades, Cargo agora irá sugerir a execução cargo fix ou cargo clippy --fix quando detecta avisos que podem ser corrigidos automaticamente:

warning: unused import: `std::hash::Hash`
--> src/main.rs:1:5
|
1| use std::hash::Hash;
|     ^^^^^^^^^^^^^^^
|
= note: `#(warn(unused_imports))` on by default

warning: `foo` (bin "foo") generated 1 warning (run `cargo fix --bin "foo"` to apply 1 suggestion)

A invocação completa do Cargo mostrada aqui só é necessária para aplicar correções com precisão a uma única caixa. Para aplicar correções a todos os membros padrão de um espaço de trabalho, executando cargo fix sem argumentos adicionais é tudo o que é necessário.

Também no Rust 1.69, as informações de depuração não são mais incluídas nos scripts de construção por padrão. Para aumentar a velocidade de compilação, o Cargo agora evita a emissão de informações de depuração em scripts de construção por padrão. Não haverá nenhum efeito visível quando os scripts de construção forem executados com sucesso. Finalmente, uma série de APIs foram estabilizadas, como cstr::from_bytes_until_nul e core::ffi::FromBytesUntilNulError.

Os novos recursos do Rust 1.68