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

Foi publicado o lançamento da linguagem de programação do sistema Rust 1.57, 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, fornece gerenciamento automático de memória e fornece meios para alcançar alto paralelismo de tarefas sem usar um coletor de lixo ou tempo de execução (o tempo de execução é reduzido à inicialização básica e manutenção da biblioteca padrão).

O gerenciamento automático de memória do Rust elimina erros ao manipular ponteiros e protege contra problemas decorrentes da manipulação de memória de baixo nível, como acesso a uma região de memória após ela ter sido liberada, desreferências de ponteiro nulo, saturação de buffer, etc. Para distribuir bibliotecas, garantir a montagem e gerenciar dependências, o projeto está desenvolvendo o gerenciador de pacotes Cargo. O repositório crates.io é compatível com hospedagem de bibliotecas.

Principais inovações:

  • O uso da macro “pânico!” foi estabilizado. em contextos criados durante a compilação, como declarações "const fn". Além disso, além de usar “pânico!” As declarações const permitem o uso da macro “assert!”. e algumas outras APIs de biblioteca padrão. A estabilização ainda não cobre toda a infra-estrutura de formatação, por isso, na sua forma actual, a macro “pânico!” só pode ser usado com strings estáticas (panic!(“...")) ou com um único valor interpolado "&str" ao substituir (panic!("{}", a)), que deve ser limitado à substituição de "{ }" sem especificadores de formatação e outros tipos. No futuro, a aplicabilidade de macros em contextos constantes será ampliada, mas os recursos estabilizados já são suficientes para realizar verificações de assert na fase de compilação: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = afirmar!(std::mem::size_of:: () == 8);
  • O gerenciador de pacotes Cargo permite a utilização de perfis com nomes arbitrários, não se limitando a “dev”, “release”, “test” e “bench”. Por exemplo, para permitir a otimização no estágio de vinculação (LTO) somente quando as montagens do produto final forem geradas, você pode criar um perfil de “produção” em Cargo.toml e adicionar o sinalizador “lto = true” a ele. Entretanto, ao definir seus próprios perfis, você deve especificar um perfil existente para herdar dele as configurações padrão. O exemplo abaixo cria um perfil de “produção” que complementa o perfil de “lançamento” incluindo o sinalizador “lto = true”. O perfil em si é ativado chamando cargo com a opção “--profile production”, e os artefatos de montagem serão colocados no diretório “target/production”. [perfil.produção] herda = "release" lto = true
  • Foi estabilizado o uso de try_reserve para os tipos Vec, String, HashMap, HashSet e VecDeque, o que permite reservar espaço antecipadamente para um determinado número de elementos de um determinado tipo, a fim de reduzir a frequência das operações de alocação de memória e evitar trava durante a operação devido à falta de memória.
  • É permitido especificar macros com chaves em expressões como "m!{ .. }.method()" e "m!{ .. }?".
  • A execução das funções File::read_to_end e read_to_string foi otimizada.
  • O suporte para a especificação Unicode foi atualizado para a versão 14.0.
  • Expandido o número de funções marcadas como "#[must_use]" para emitir um aviso se o valor de retorno for ignorado, o que ajuda a identificar erros causados ​​​​pela suposição de que uma função alterará os valores em vez de retornar um novo valor.
  • Adicionado back-end experimental para geração de código usando libgccjit.
  • 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:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • coleções::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserva
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterador::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Comando::get_program
    • Comando::get_args
    • Comando::get_envs
    • Comando::get_current_dir
    • ComandoArgs
    • ComandoEnvs
  • O atributo “const”, que determina se pode ser usado em qualquer contexto em vez de constantes, é usado na função hint::unreachable_unchecked.
  • O terceiro nível de suporte foi implementado para armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi e armv7a-kmc- plataformas solid_asp3-eabihf. 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.

Fonte: opennet.ru

Adicionar um comentário