Versión da linguaxe de programación Rust 2021 (1.56)

Publicouse a versión da linguaxe de programación do sistema Rust 1.56, fundada polo proxecto Mozilla, pero agora desenvolvida baixo os auspicios da organización independente sen ánimo de lucro Rust Foundation. Ademais do número de versión normal, a versión tamén se designa como Rust 2021 e marca unha estabilización dos cambios propostos nos últimos tres anos. Rust 2021 tamén servirá de base para aumentar a funcionalidade nos próximos tres anos, de xeito similar ao que o lanzamento de Rust 2018 se converteu na base para o desenvolvemento da linguaxe nos últimos tres anos.

Para manter a compatibilidade, os desenvolvedores poden usar as etiquetas "2015", "2018" e "2021" nos seus programas, o que permite que os programas se liguen a partes de estado da lingua correspondentes ás edicións seleccionadas de Rust. Introducíronse edicións para separar os cambios incompatibles e configúranse nos metadatos dos paquetes de carga a través do campo "edición" da sección "[paquete]". Por exemplo, a edición "2018" inclúe a funcionalidade estabilizada a finais de 2018 e tamén abrangue todos os cambios posteriores que non rompen a compatibilidade. A edición de 2021 inclúe ademais funcións de interoperabilidade propostas na versión 1.56 actual e aprobadas para a súa implementación futura. Ademais da propia lingua, os editores tamén teñen en conta o estado das ferramentas e da documentación.

Principais incompatibilidades rexistradas en Rust 2021:

  • Captura separada en peches: agora os peches poden capturar nomes de campo individuais en lugar do identificador completo. Por exemplo, "|| ax + 1" só capturará "ax" en lugar de "a".
  • O trazo IntoIterator para matrices: array.into_iter() permítelle iterar sobre elementos da matriz por valores, en lugar de por referencias.
  • O procesamento das expresións “|” cambiouse en macro_rules (OR booleano) en patróns: o especificador ":pat" nas coincidencias agora respecta "A | B".
  • O xestor de paquetes de carga inclúe por defecto a segunda versión do resolutor de funcións, cuxa compatibilidade apareceu en Rust 1.51.
  • Engadíronse os trazos TryFrom, TryInto e FromIterator ao módulo da biblioteca estándar de preludio.
  • As macros panic!(..) e assert!(expr, ..) agora sempre usan format_args!(..) para formatar cadeas, de xeito similar a println!().
  • As expresións ident#, ident»..." e ident'...' están reservadas na sintaxe da linguaxe.
  • Movéronse os avisos de bare_trait_objects e ellipsis_inclusive_range_patterns a erros.

Novo en Rust 1.56:

  • En Cargo.toml, na sección "[paquete]", engadiuse o campo rust-version, a través do cal pode determinar a versión mínima compatible de Rust para o paquete crate. Se a versión actual non coincide co parámetro especificado, Cargo deixará de funcionar cunha mensaxe de erro.
  • Cando se combinan patróns usando expresións "binding @ pattern", ofrécese soporte para especificar ligazóns adicionais (por exemplo, "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • Unha nova parte da API trasladouse á categoría de estable, incluíndo os métodos e implementacións de trazos estabilizados:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • O atributo "const", que determina a posibilidade de usar en calquera contexto en lugar de constantes, úsase nas funcións
    • std::mem::transmute
    • [T]::primeiro
    • [T]::dividir_primeiro
    • [T]::último
    • [T]::dividir_último
  • O compilador cambiouse para usar a versión 13 de LLVM.
  • Implementouse un segundo nivel de soporte para a plataforma aarch64-apple-ios-sim e un terceiro nivel para as plataformas powerpc-unknown-freebsd e riscv32imc-esp-espidf. O terceiro nivel implica soporte básico, pero sen probas automatizadas, publicación de compilacións oficiais ou comprobar se o código se pode construír.

Lembremos que Rust céntrase na seguridade da memoria, proporciona unha xestión automática da memoria e proporciona un medio para conseguir un alto paralelismo na execución dos traballos sen utilizar un colector de lixo ou tempo de execución (o tempo de execución redúcese á inicialización básica e ao mantemento da biblioteca estándar).

A xestión automática da memoria de Rust salva ao programador de erros ao manipular os punteiros e protexe contra problemas que xurdan debido á manipulación de memoria de baixo nivel, como acceder a unha área de memoria despois de que se liberase, desreferenciar punteiros nulos, exceder o búfer, etc. Para distribuír bibliotecas, proporcionar compilacións e xestionar dependencias, o proxecto desenvolve o xestor de paquetes Cargo. O repositorio crates.io é compatible para hospedar bibliotecas.

Fonte: opennet.ru

Engadir un comentario