Rust 1.33 Release

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 _; //     : pub trait Read {} 

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:



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

Source: https://habr.com/ru/post/pt442244/


All Articles