publicado liberação da linguagem de programação do sistema Ferrugem 1.39, fundado 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.
Estabilizado uma nova sintaxe de programação assíncrona baseada na função "async", no bloco async move {...} e no operador ".await", que facilita a gravação de manipuladores que não bloqueiam o fluxo de comando principal. Em comparação com a API oferecida anteriormente para E/S assíncrona, as construções async/.await são simples de entender, altamente legíveis e permitem implementar interações assíncronas complexas usando técnicas familiares de controle de fluxo baseadas em loops, instruções condicionais e exceções.
A sintaxe Async-await permite criar funções que podem pausar sua execução, retornar o controle ao thread principal e então retomar a execução de onde parou. Por exemplo, essa pausa é necessária ao processar E/S, na qual outro trabalho pode ser feito enquanto se espera a chegada do próximo dado. Funções e blocos definidos com "async fn" e "async move" retornam uma característica promissor, que define uma representação de computação assíncrona diferida. Você pode iniciar diretamente um cálculo diferido e obter o resultado usando o operador “.await”. Nenhuma ação é executada ou pré-planejada até que .await seja chamado, permitindo a criação de construções aninhadas complexas sem sobrecarga adicional.
Estabilizado "#![feature(bind_by_move_pattern_guards)]", permitindo o uso de variáveis com o tipo de ligação "movimento secundário" nos modelos e use referências a essas variáveis na seção "if" da expressão "partida". Por exemplo, agora são permitidas as seguintes construções:
matriz de correspondência {
nums
se nums.iter().sum::() == 10
=> {
soltar(num);
}
_ => inacessível!(),
}
}
Indicação permitida atributos ao definir parâmetros de função, fechamentos e ponteiros de função. Atributos de compilação condicional (cfg, cfg_attr) que controlam diagnósticos via lint (permitir, avisar, negar e proibir) e atributos auxiliares de chamada de macro são suportados.
fnlen(
#[cfg(windows)] slice: &[u16], // usa o parâmetro no Windows
#[cfg(not(windows))] slice: &[u8], // usar em outro sistema operacional
) -> usar {
fatia.len()
}
Alertas sobre problemas identificados na verificação do empréstimo de variáveis (borrow checker) utilizando a técnica NLL (Non-Lexical Lifetimes), traduzido na categoria de erros fatais. Recorde-se que o sistema de verificação baseado num novo mecanismo de contabilização do tempo de vida das variáveis emprestadas permitiu identificar alguns problemas que passaram despercebidos ao antigo código de verificação. Como a saída de erros para tais verificações poderia afetar a compatibilidade com o código em funcionamento anteriormente, avisos foram emitidos inicialmente em vez de erros. Os avisos agora foram substituídos por erros ao executar no modo Rust 2018. Na próxima versão, a saída de erro também será implementada no modo Rust 2015, o que finalmente eliminará o antigo verificador de empréstimo;
O atributo “const”, que determina a possibilidade de utilização em qualquer contexto ao invés de constantes, é utilizado para as funções Vec::new, String::new, LinkedList::new, str::len, [T]::len ,str::as_bytes,
abs, wrap_abs e overflowing_abs;
Uma nova parcela de APIs foi transferida para a categoria estável, incluindo métodos que foram estabilizados
Pin::into_inner, Instant::checked_duration_since e Instant::saturating_duration_since;
O gerenciador de pacotes de carga agora pode usar a extensão “.toml” para arquivos de configuração. Adicionado suporte preliminar para construção da biblioteca padrão diretamente do Cargo. Adicionado o sinalizador "--workspace", substituindo o polêmico sinalizador "--all". Um novo campo foi adicionado aos metadados "publicar“, que permite publicar dependências especificando uma tag git e um número de versão. Adicionada opção de teste "-Ztimings" para gerar um relatório HTML dos tempos de execução de vários estágios de compilação.
No compilador Rustc, as mensagens de diagnóstico incluem cortar as pontas do código que não cabem no terminal. Forneceu terceiro nível de suporte para plataformas alvo
i686-unknown-uefi e sparc64-unknown-openbsd. O terceiro nível envolve suporte básico, mas sem testes automatizados e publicação de compilações oficiais.