A equipe do Rust tem o prazer de anunciar uma nova versão do Rust, 1.99.0. O Rust é uma linguagem de programação que capacita todos a construir softwares confiáveis e eficientes.
Se você já tem uma versão anterior do Rust instalada viarustup, você pode obter a 1.99.0 com:
$rustup update stable
Se você ainda não tem, pode obterrustupda página apropriada no nosso site, e confira oNotas de lançamento detalhadas para 1.99.0.
Se você quiser nos ajudar testando futuras versões, considere atualizar localmente para usar o canal beta (rustup padrão beta) ou o canal nightly (rustup padrão nightly). Por favorinformequalquer bug que você encontrar!
O que há na versão 1.99.0 estável?
A tradução do texto fornecido para o português brasileiro é: "extern 'C' variádicos"
A versão 1.99.0 do Rust estabiliza a definição de funções variádicas com os ABIs "C" e "C-unwind". As funções variádicas definidas dessa forma utilizam uma lista de argumentos variável....Rust poderia já chamar funções variádicas definidas externamente (por exemplo, ... ) e aceitar um número arbitrário de argumentos.libc::printfCom Rust 1.99, essas funções podem agora ser escritas em Rust propriamente dito:
///Segurança: deve ser chamada com (pelo menos) 2 argumentos i32.
inseguroexterno"C"função anônimaresumo(mutávelargumentos: ...)-> Parai32 {
//SEGURANÇA: garantida pelo chamador.
leta =inseguro {args.próximo_arg::<i32>() };
letb =unsafe {args.next_arg::<i32>() };
a +b
}
fnfoo()->i32 {
inseguro {soma(0i32, 2i32) }
}
O tipo de...éVaListaque é compatível com o ABI (Interface Binária Aplicável) com a linguagem C.lista de argumentos variáveis.tipo em diferentes alvos. Quais tipos podem ser lidos de um?VaListé protegido pela.VaArgSafetraço.
Para mais detalhes sobre funções variádicas em C, consulte o...ReferênciaEsta liberação também estabiliza o suporte para definir funções variádicas "nudas" com ABIs não-"C", que devem ser escritas via assembly em linha.
Informações de layout a partir de ponteiros brutos
Esta liberação define os requisitos de segurança para recuperar o tamanho e o alinhamento de ponteiros brutos para ambosTipos dimensionados(seguros trivialmente, já possível na versão estável) e não-dimensionados.Tipos não dimensionadostipos.
Isso é feito ao estabilizar três funções:
Recomenda-se contra a liberação de ida e volta apósBox::vazamento
Embora não haja mudanças na semântica da linguagem em Rust 1.99, atualizamos a documentação emBox::vazamentoRecomenda-se evitar padrões que, posteriormente, liberem essa memória. Isso foi feito porque tal código foi encontrado com interações problemáticas com otimizações atuais e futuras do compilador, e é especialmente problemático com a estabilização iminente de alocadores personalizados. Em vez disso,Box::into_non_nulldeve ser preferido.
Esta orientação também se aplica a outrasfunções de vazamentona biblioteca padrão.
APIs Estabilizadas
IntoIteratorParaCaixa<[T; N]>EmIteradorPara&Caixa<[T; N]>EmIteradorPara&mut Caixa<[T; N]>Retenção de VecDeque para trásLista de argumentos va do core::ffiConversão de Box para não nuloCriação de Box a partir de não nuloDividir partes de VecCriar Vec a partir de partesTamanho bruto do valor de memória do core::memAlinhamento bruto do valor de memória do core::memAlocação de layout para o valor brutoString a partir de UTF-8 danificado, propriedadeConverter erro de UTF-8 em UTF-8 danificadoIterador fundido para PassoPorDefinir tempos com std::fsDefinir tempos sem seguir com std::fs
Outras mudanças
Verifique tudo o que mudouRust, CargoeClippy.
Contribuidores para 1.99.0
Muitas pessoas se uniram para criar o Rust 1.99.0. Não teríamos conseguido sem vocês.Obrigado!