Versão da linguagem de programação Rust 1.60

Foi publicado o lançamento da linguagem de programação de uso geral Rust 1.60, fundada pelo projeto Mozilla, mas agora desenvolvida sob os auspícios da organização independente sem fins lucrativos Rust Foundation. A linguagem se concentra na segurança da memória e fornece os meios para obter alto paralelismo de trabalho, evitando o uso de um coletor de lixo e tempo de execução (o tempo de execução é reduzido à inicialização básica e manutenção da biblioteca padrão).

Os métodos de manipulação de memória do Rust salvam o desenvolvedor de erros ao manipular ponteiros e protegem contra problemas que surgem devido ao manuseio de memória de baixo nível, como acessar uma área de memória após ter sido liberada, desreferenciar ponteiros nulos, saturação de buffer, etc. Para distribuir bibliotecas, prover builds e gerenciar dependências, o projeto desenvolve o gerenciador de pacotes Cargo. O repositório crates.io é compatível com hospedagem de bibliotecas.

A segurança da memória é fornecida no Rust em tempo de compilação por meio de verificação de referência, acompanhando a propriedade do objeto, acompanhando o tempo de vida do objeto (escopos) e avaliando a exatidão do acesso à memória durante a execução do código. Rust também fornece proteção contra estouros de número inteiro, requer inicialização obrigatória de valores de variáveis ​​antes do uso, lida melhor com erros na biblioteca padrão, aplica o conceito de referências e variáveis ​​imutáveis ​​por padrão, oferece tipagem estática forte para minimizar erros lógicos.

Principais inovações:

  • O compilador Rustc possui um sistema estabilizado baseado em LLVM para gerar dados de cobertura usados ​​para avaliar a cobertura de código durante o teste. Para habilitar os dados de cobertura durante a montagem, você deve usar o sinalizador “-Cinstrument-coverage”, por exemplo, iniciando a montagem com o comando “RUSTFLAGS=”-C instrument-coverage” cargo build”. Depois de executar o arquivo executável compilado desta forma, o arquivo default.profraw será salvo no diretório atual, para processamento que você pode usar o utilitário llvm-profdata do componente llvm-tools-preview. A saída processada por llvm-profdata pode então ser passada para llvm-cov para gerar um relatório anotado de cobertura de código. As informações sobre o link para o código-fonte são retiradas do arquivo executável que está sendo examinado, que inclui os dados necessários sobre a conexão entre os contadores de cobertura e o código. 1| 1|fn principal() { 2| 1| println!("Olá, mundo!"); 3| 1|}
  • No gerenciador de pacotes de carga, foi estabilizado o suporte à bandeira “-timings”, que inclui a geração de um relatório detalhado sobre o andamento da construção e o tempo de execução de cada etapa. O relatório pode ser útil para otimizar o desempenho do processo de montagem.
  • O gerenciador de pacotes cargo oferece uma nova sintaxe para o mecanismo de compilação condicional e seleção de dependências opcionais, configurada no arquivo Cargo.toml listando uma lista de propriedades nomeadas na seção [features] e ativada habilitando as propriedades durante a construção do pacote usando o sinalizador “--features”. A nova versão adiciona suporte para dependências em namespaces separados e dependências fracas.

    No primeiro caso, é possível usar elementos com o prefixo “dep:” dentro da seção “[features]” para vincular explicitamente a uma dependência opcional sem representar implicitamente essa dependência como um recurso. No segundo caso, foi adicionado suporte para marcação com o sinal “?”. ("nome do pacote?/nome do recurso") dependências opcionais que só devem ser incluídas se alguma outra propriedade incluir a dependência opcional fornecida. Por exemplo, no exemplo abaixo, habilitar a propriedade serde habilitará a dependência "serde", bem como a propriedade "serde" para a dependência "rgb", mas somente se a dependência "rgb" estiver habilitada em outro lugar: [dependências] serde = { versão = "1.0.133", opcional = verdadeiro } rgb = { versão = "0.8.25", opcional = verdadeiro } [recursos] serde = ["dep:serde", "rgb?/serde"]

  • O suporte para compilação incremental, que estava desabilitado na última versão, foi retornado. O bug do compilador que causou a desativação do recurso foi resolvido.
  • Resolvidos alguns problemas ao fornecer temporizadores instantâneos com garantia de temporização monotônica, que leva em consideração o tempo gasto pelo sistema no modo de hibernação. Anteriormente, a API do SO era utilizada sempre que possível para operar o timer, o que não levava em consideração situações problemáticas que quebram a monotonia do tempo, como problemas de hardware, uso de virtualização ou erros no sistema operacional.
  • Uma nova parte da API foi movida para a categoria de estável, incluindo os métodos e implementações de características que foram estabilizadas:
    • Arco::new_cíclico
    • Rc::novo_cíclico
    • fatia::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • TalvezUninit::assume_init_drop
    • TalvezUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • usarize::abs_diff
    • Exibição para io::ErrorKind
    • De para ExitCode
    • Não para ! (digite "nunca")
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected!
  • O terceiro nível de suporte foi implementado para as plataformas mips64-openwrt-linux-musl* e armv7-unknown-linux-uclibceabi (softfloat). O terceiro nível envolve suporte básico, mas sem testes automatizados, publicação de compilações oficiais ou verificação se o código pode ser compilado.
  • O compilador foi alterado para usar o LLVM 14.

Além disso, você pode observar:

  • Adicionado suporte para inicializar o compilador Rustc usando o backend Rustc_codegen_gcc, que permite usar a biblioteca libgccjit do projeto GCC como um gerador de código em Rustc, o que permite que Rustc forneça suporte para arquiteturas e otimizações disponíveis no GCC. Promoção do compilador significa a capacidade de usar um gerador de código baseado em GCC no Rustc para construir o próprio compilador Rustc. Do lado prático, esse recurso permite construir programas Rust para arquiteturas que não eram suportadas anteriormente no Rustc.
  • Está disponível o lançamento do kit de ferramentas uutils coreutils 0.0.13, dentro do qual está sendo desenvolvido um análogo do pacote GNU Coreutils, reescrito na linguagem Rust. Coreutils vem com mais de cem utilitários, incluindo sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln e ls. O objetivo do projeto é criar uma implementação alternativa multiplataforma do Coreutils, capaz de rodar nas plataformas Windows, Redox e Fuchsia, bem como ser distribuída sob a licença permissiva MIT, em vez da licença copyleft GPL.

    A nova versão melhorou as implementações de muitos utilitários, incluindo uma compatibilidade significativamente melhorada dos utilitários cp, dd, df, split e tr com seus equivalentes do projeto GNU. Documentação on-line fornecida. O analisador clap é usado para analisar argumentos de linha de comando, o que melhorou a saída do sinalizador “--help” e adicionou suporte para abreviações de comandos longos (por exemplo, você pode especificar “ls -col” em vez de “ls -color ”).

Fonte: opennet.ru

Adicionar um comentário