Linguagem de programação Rust versão 2021 (1.56)

Foi publicado o lançamento da linguagem de programação do sistema Rust 1.56, fundada pelo projeto Mozilla, mas agora desenvolvida sob os auspícios da organização independente sem fins lucrativos Rust Foundation. Além do número de versão regular, o lançamento também é denominado Rust 2021 e marca uma estabilização das mudanças propostas nos últimos três anos. Rust 2021 também servirá de base para aumentar a funcionalidade nos próximos três anos, semelhante à forma como o lançamento do Rust 2018 se tornou a base para o desenvolvimento da linguagem nos últimos três anos.

Para manter a compatibilidade, os desenvolvedores podem usar rótulos “2015”, “2018” e “2021” em seus programas, permitindo que os programas sejam vinculados a fatias de estado de linguagem correspondentes às edições selecionadas do Rust. As edições foram introduzidas para separar alterações incompatíveis e são configuradas nos metadados dos pacotes de carga através do campo “edição” na seção “[pacote]”. Por exemplo, a edição “2018” inclui a funcionalidade estabilizada a partir do final de 2018 e também cobre todas as alterações posteriores que não quebrem a compatibilidade. A edição 2021 inclui adicionalmente recursos de quebra de interoperabilidade propostos na versão 1.56 atual e aprovados para implementação futura. Além da linguagem em si, os editores também levam em consideração o estado das ferramentas e da documentação.

Principais incompatibilidades registradas em Rust 2021:

  • Captura separada em encerramentos - Os encerramentos agora podem capturar nomes de campos individuais em vez do identificador inteiro. Por exemplo, "|| ax + 1" capturará apenas "ax" em vez de "a".
  • A característica IntoIterator para arrays: array.into_iter() permite iterar sobre os elementos do array por valores, em vez de por referências.
  • O processamento de expressões “|” foi alterado em macro_rules (Boolean OR) em padrões - O especificador ":pat" nas correspondências agora respeita "A | B".
  • O gerenciador de pacotes de carga inclui por padrão a segunda versão do resolvedor de recursos, cujo suporte apareceu no Rust 1.51.
  • As características TryFrom, TryInto e FromIterator foram adicionadas ao módulo de biblioteca padrão prelúdio.
  • As macros panic!(..) e assert!(expr, ..) agora sempre usam format_args!(..) para formatar strings, semelhante a println!().
  • As expressões ident#, ident»..." e ident'...' são reservadas na sintaxe da linguagem.
  • Os avisos bare_trait_objects e ellipsis_inclusive_range_patterns foram movidos para erros.

Novo no Rust 1.56:

  • No Cargo.toml, na seção “[pacote]”, foi adicionado o campo ferrugem-versão, através do qual você pode determinar a versão mínima suportada do Rust para o pacote crate. Se a versão atual não corresponder ao parâmetro especificado, o Cargo irá parar de funcionar com uma mensagem de erro.
  • Ao combinar padrões usando expressões "binding @ pattern", é fornecido suporte para especificar vinculações adicionais (por exemplo, "let array @ Matrix { row_len, .. } = get_matrix();").
  • 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:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • String::encolher_para
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • O atributo “const”, que determina a possibilidade de utilização em qualquer contexto ao invés de constantes, é utilizado em funções
    • std::mem::transmutar
    • [T]::primeiro
    • [T]::split_first
    • [T]::último
    • [T]::split_last
  • O compilador foi alterado para usar o LLVM versão 13.
  • Um segundo nível de suporte foi implementado para a plataforma aarch64-apple-ios-sim e um terceiro nível para as plataformas powerpc-unknown-freebsd e riscv32imc-esp-espidf. 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.

Lembre-se de que Rust se concentra na segurança da memória, fornece gerenciamento automático de memória e fornece meios para alcançar alto paralelismo na execução de trabalhos 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.

Fonte: opennet.ru

Adicionar um comentário