A equipe de desenvolvimento do Rust tem o prazer de anunciar o lançamento de uma nova versão do Rust, 1.33.0. Rust é uma linguagem de programação que permite a todos criar software confiável e eficiente.
Se você possui uma versão anterior do Rust instalada usando rustup
, para fazer o upgrade do Rust para a versão 1.33.0, basta fazer o seguinte:
$ rustup update stable
Se você ainda não instalou o rustup
, poderá instalá-lo na página correspondente do nosso site. Notas de versão detalhadas do Rust 1.33.0 estão disponíveis no GitHub.
O que está incluído na versão estável 1.33.0
Principais melhorias desta versão: expansão significativa dos recursos const fn
e estabilização da nova API de pinos.
Estender const fn
const fn
agora pode fazer muito mais , a saber:
- correspondência incondicional (irrefutável) de padrões (por exemplo,
const fn foo((x, y): (u8, u8)) { ... }
) let
ligações (por exemplo, let x = 1;
)- ligações mutáveis
let
(por exemplo, let mut x = 1;
) - expressões de atribuição (por exemplo
x = y
) e operadores de atribuição (por exemplo x += y
), incluindo atribuição a projeções (por exemplo, um campo de estrutura ou o resultado de um operador de indexação - x[3] = 42
) - declarações de expressão (por exemplo,
3;
)
Agora você pode chamar "const unsafe fn" de "const fn" , por exemplo:
const unsafe fn foo() -> i32 { 5 } const fn bar() -> i32 { unsafe { foo() } }
Graças a essas melhorias, tornou-se possível declarar uma constante um grande número de funções da biblioteca padrão. Eles estão listados abaixo na seção da biblioteca.
API de pinos
Esta edição introduz um novo mecanismo no idioma, introduzido digite std :: pin :: Pin e tipo de marcador Unpin . A idéia principal é descrita em detalhes na documentação "std :: pin" do módulo :
Às vezes, pode ser útil proibir o movimento de um objeto, ou seja, garantir a imutabilidade do seu endereço na memória. O cenário principal para usar esse recurso são estruturas de auto-referência, pois a movimentação desses objetos levará a ponteiros inválidos, o que pode levar a um comportamento indefinido (UB).
Pin<P>
garante que o objeto referenciado por qualquer ponteiro do tipo P
tenha um local fixo na memória, ou seja, ele não pode ser movido e sua memória não pode ser liberada. Tais valores são chamados de "fixados".
Espera-se que esse mecanismo seja usado principalmente pelos autores das bibliotecas, portanto, não iremos nos aprofundar nos detalhes agora (que podem ser encontrados na documentação no link acima). No entanto, a estabilização dessa API é um evento importante para todos os usuários do Rust, porque é um passo fundamental para o muito aguardado async
/ await
. O status do trabalho restante nessa direção pode ser monitorado em areweasyncyet.rs .
Importar como "_"
Agora você pode importar entidades como "_" . Isso permite importar a implementação do tipo sem inserir seu nome no espaço para nome atual, por exemplo:
use std::io::Read as _;
Veja as notas de versão para mais detalhes.
Estabilização da biblioteca padrão
Aqui está uma lista de tudo que se tornou constante:
- Os métodos overflow ({add, sub, mul, shl, shr}) de todos os tipos numéricos agora são constantes.
- Os métodos rotate_left, rotate_right e wrapping_ {add, sub, mul, shl, shr} de todos os tipos numéricos agora são constantes.
- Os métodos is_positive e is_negative de todos os tipos numéricos assinados agora são constantes.
- O método get de todos os tipos diferentes de zero agora é constante.
- Os métodos count_ones, count_zeros, líder_zeros, trailing_zeros, swap_bytes, from_be, from_le, to_be, to_le de todos os tipos numéricos agora são constantes.
- O método Ipv4Addr :: new agora é constante.
Além disso, as seguintes APIs são estabilizadas:
Veja as notas de versão para mais detalhes.
Aprimoramentos de carga
Agora, o Cargo remontará a caixa se um de seus arquivos tiver sido modificado durante a compilação inicial.
Veja as notas de versão para mais detalhes.
Crates.io
Conforme anunciado anteriormente , a partir desta versão, o crates.io exigirá um endereço de e-mail de confirmação para a publicação de engradados. A partir de 2019-03-01 00:00 UTC, a implementação da cargo publish
de cargo publish
falhará com contas sem correio verificado.
Isso é necessário para atender aos requisitos da DMCA . Se você não notou os avisos sobre isso que a carga escreveu em versões recentes, vá para crates.io/me para indicar e confirmar seu e-mail. Este endereço de correspondência nunca será publicado e será usado exclusivamente para a funcionalidade direta do crates.io.
Desenvolvedores 1.33.0
Muitas pessoas juntas criaram o Rust 1.33. Não poderíamos ter concluído o trabalho sem cada um de vocês. Obrigada