Linguaxe de programación Rust versión 1.65

Publicouse o lanzamento da linguaxe de programación de propósito xeral Rust 1.65, 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 e proporciona os medios para conseguir un alto paralelismo de traballos evitando o uso dun colector de lixo e o tempo de execución (o tempo de execución redúcese á inicialización básica e ao mantemento da biblioteca estándar).

Os métodos de manexo da memoria de Rust salvan ao desenvolvedor de erros ao manipular os punteiros e protexen contra os problemas que xurdan debido ao manexo de memoria de baixo nivel, como acceder a unha área de memoria despois de liberarse, 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.

A seguridade da memoria ofrécese en Rust no momento da compilación mediante a comprobación de referencias, o seguimento da propiedade do obxecto, o seguimento da vida útil dos obxectos (ámbitos) e a avaliación da corrección do acceso á memoria durante a execución do código. Rust tamén ofrece protección contra desbordamentos de enteiros, require a inicialización obrigatoria dos valores variables antes do seu uso, manexa mellor os erros na biblioteca estándar, aplica o concepto de referencias e variables inmutables por defecto, ofrece unha forte escritura estática para minimizar os erros lóxicos.

Principais novidades:

  • Engadido soporte para tipos asociados xenéricos (GAT, Generic Associated Types), que permiten crear alias de tipos asociados a outro tipo e permiten asociar construtores de tipos con trazos. trazo Foo { tipo Bar<'x>; }
  • Implementouse a expresión "let ... else", o que lle permite comprobar a condición de coincidencia do patrón directamente dentro da expresión "let" e executar código arbitrario se o patrón non coincide. let Ok(count) = u64::from_str(count_str) else { panic!("Non se pode analizar o número enteiro: '{count_str}'"); };
  • Permitir o uso dunha instrución break para saír prematuramente dos bloques con nome, utilizando o nome do bloque (etiqueta) para identificar o bloque que se vai finalizar. let result = 'bloqueo: { do_thing(); if condition_not_met() { romper o bloque 1; } facer_o_seguinte(); if condition_not_met() { romper o bloque 2; } facer_o_último(); 3};
  • Para Linux, engadiuse a posibilidade de gardar por separado a información de depuración (split-debuginfo), que antes só estaba dispoñible para a plataforma macOS. Ao especificar a opción "-Csplit-debuginfo=descomprimido", os datos de debuginfo en formato DWARF gardaranse en varios ficheiros de obxecto separados cunha extensión ".dwo". Especificando "-Csplit-debuginfo=packed" crearase un único paquete en formato ".dwp" que inclúe todos os datos de información de depuración para o proxecto. Para integrar debuginfo directamente na sección .debug_* dos obxectos ELF, pode usar a opción "-Csplit-debuginfo=off".
  • Unha nova parte da API trasladouse á categoría de estable, incluíndo os métodos e implementacións de trazos estabilizados:
    • std::backtrace::Backtrace
    • Encadernado::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • O atributo “const”, que determina a posibilidade de usalo en calquera contexto en lugar de constantes, úsase nas funcións <*const T&>::offset_from e <*mut T>::offset_from
  • Como parte da fase final de transferencia da implementación do protocolo LSP (Language Server Protocol) a Rust-analyzer, a implementación obsoleta de Rust Language Server (RLS) foi substituída por un servidor stub que emite unha advertencia cunha suxestión para cambiar a Rust Language Server. usando un analizador de óxido.
  • Durante a compilación, o soporte para a implementación en liña do código intermedio MIR está habilitado, o que acelera a compilación de paquetes típicos de caixas nun 3-10 %.
  • Para acelerar as compilacións programadas, o xestor de paquetes Cargo ofrece a clasificación dos traballos en espera de execución na cola.

Ademais, podes observar a entrevista sobre o uso da linguaxe Rust en Volvo para desenvolver compoñentes de sistemas de información automoción. Non hai plans para reescribir código existente e probado en Rust, pero para o código novo, Rust é unha das opcións preferidas para mellorar a calidade a custos máis baixos. Tamén se crearon grupos de traballo relacionados co uso da linguaxe Rust nas asociacións de automoción AUTOSAR (AUTomotive Open System ARchitecture) e SAE (Society of Automotive Engineers).

Ademais, David Kleidermacher, vicepresidente de enxeñería de Google, falou sobre a tradución do código empregado na plataforma Android para xestionar as claves de cifrado a Rust, así como o uso de Rust na implementación do protocolo DNS sobre HTTPS na pila. para chips UWB- (Ultra-Wideband) e no marco de virtualización (Android Virtualization Framework) asociado ao chip Tensor G2. Tamén se están a desenvolver novas pilas para Bluetooth e Wi-Fi, reescritas en Rust, para Android. A estratexia xeral é reforzar gradualmente a seguridade, primeiro convertendo os compoñentes de software máis vulnerables e vitais a Rust e despois expandindo a outros subsistemas relacionados. O ano pasado, a linguaxe Rust incluíuse na lista de idiomas permitidos para desenvolver a plataforma Android.

Fonte: opennet.ru

Engadir un comentario