Linguaxe de programación Rust versión 1.57

Publicouse a versión da linguaxe de programación do sistema Rust 1.57, fundada polo proxecto Mozilla, pero agora desenvolvida baixo os auspicios da organización independente sen ánimo de lucro Rust Foundation. A linguaxe céntrase na seguridade da memoria, proporciona unha xestión automática da memoria e proporciona os medios para conseguir un alto paralelismo de tarefas 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.

Principais novidades:

  • Estabilizouse o uso da macro "pánico". en contextos creados durante a compilación, como declaracións "const fn". Ademais, ademais de usar "pánico!" as declaracións const permiten o uso da macro "assert!". e algunhas outras API de biblioteca estándar. A estabilización aínda non cobre toda a infraestrutura de formato, polo que na súa forma actual a macro "pánico!" só se pode usar con cadeas estáticas (pánico!(“...")) ou cun único valor interpolado "&str" ao substituír (pánico!("{}", a)), que debería limitarse a substituír "{ }" sen especificadores de formato e outros tipos. No futuro, ampliarase a aplicabilidade das macros en contextos constantes, pero as capacidades estabilizadas xa son suficientes para realizar comprobacións de afirmacións na fase de compilación: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = afirmar!(std::mem::size_of:: () == 8);
  • O xestor de paquetes Cargo permite o uso de perfís con nomes arbitrarios, sen limitarse a "dev", "release", "test" e "bench". Por exemplo, para habilitar a optimización na fase de ligazón (LTO) só cando se xeran os conxuntos de produtos finais, pode crear un perfil de "produción" en Cargo.toml e engadirlle a bandeira "lto = true". Non obstante, ao definir os seus propios perfís, debe especificar un perfil existente para herdar a configuración predeterminada del. O seguinte exemplo crea un perfil de "produción" que complementa o perfil de "versión" incluíndo a bandeira "lto = true". O propio perfil actívase chamando a carga coa opción "--profile production" e os artefactos de montaxe colocaranse no directorio "destino/produción". [profile.production] inherits = "lanzamento" lto = verdadeiro
  • Estabilizouse o uso de try_reserve para os tipos Vec, String, HashMap, HashSet e VecDeque, o que permite reservar espazo con antelación para un determinado número de elementos dun determinado tipo co fin de reducir a frecuencia das operacións de asignación de memoria e evitar falla durante a operación por falta de memoria.
  • Permítese especificar macros con chaves en expresións como "m!{ .. }.method()" e "m!{ .. }?".
  • Optimizouse a execución das funcións File::read_to_end e read_to_string.
  • Actualizouse a compatibilidade coa especificación Unicode á versión 14.0.
  • Ampliouse o número de funcións marcadas como "#[must_use]" para emitir unha advertencia se se ignora o valor de retorno, o que axuda a identificar os erros causados ​​ao supoñer que unha función cambiará os valores en lugar de devolver un valor novo.
  • Engadido backend experimental para a xeración de código usando libgccjit.
  • Unha nova parte da API trasladouse á categoría de estable, incluíndo os métodos e implementacións de trazos estabilizados:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • coleccións::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • 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::está_dispoñible
    • Comando::get_program
    • Comando::get_args
    • Comando::get_envs
    • Comando::get_current_dir
    • CommandArgs
    • CommandEnvs
  • O atributo "const", que determina se se pode usar en calquera contexto en lugar de constantes, úsase na función hint::unreachable_unchecked.
  • Implementouse o terceiro nivel de soporte 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 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.

Fonte: opennet.ru

Engadir un comentario