Linguaxe de programación Rust versión 1.58

Publicouse o lanzamento da linguaxe de programación de propósito xeral Rust 1.58, 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 lograr 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:

  • Nos bloques de formato de liña, ademais da capacidade previamente dispoñible para substituír as variables listadas explícitamente despois dunha liña por número e nome, implícase a capacidade de substituír identificadores arbitrarios engadindo a expresión "{identificador}" á liña. Por exemplo: // Construcións admitidas anteriormente: println!("Ola, {}!", get_person()); println!("Ola, {0}!", get_person()); println!("Ola, {persoa}!", person = get_person()); // agora pode especificar let person = get_person(); println!("Ola, {persoa}!");

    Os identificadores tamén se poden especificar directamente nas opcións de formato. let (ancho, precisión) = get_format(); for (nome, puntuación) en get_scores() { println!("{nome}: {score:width$.precision$}"); }

    A nova substitución funciona en todas as macros que admiten a definición de formato de cadea, coa excepción da macro "pánico!". nas versións de 2015 e 2018 da linguaxe Rust, nas que panic!("{ident}") trátase como unha cadea normal (en Rust 2021 a substitución funciona).

  • O comportamento da estrutura de comandos std::process:: na plataforma Windows foi modificado para que ao executar ordes, por razóns de seguridade, xa non busque ficheiros executables no directorio actual. Exclúese o directorio actual porque podería usarse para executar código malicioso se os programas se executan en directorios non fiables (CVE-2021-3013). A nova lóxica de detección executable implica buscar nos directorios Rust, no directorio da aplicación, no directorio do sistema Windows e nos directorios especificados na variable de ambiente PATH.
  • A biblioteca estándar ampliou 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 asumir que unha función cambiará os valores en lugar de devolver un valor novo.
  • Unha nova parte da API trasladouse á categoría de estable, incluíndo os métodos e implementacións de trazos estabilizados:
    • Metadatos::is_symlink
    • Path::is_symlink
    • {entero}::div_saturación
    • Opción::unwrap_unchecked
    • Resultado::unwrap_unchecked
    • Resultado::unwrap_err_unchecked
  • O atributo "const", que determina a posibilidade de usalo en calquera contexto en lugar de constantes, úsase nas funcións:
    • Duración::novo
    • Duración::checked_add
    • Duración::saturating_add
    • Duración::checked_sub
    • Duración::saturating_sub
    • Duración::checked_mul
    • Duración::saturating_mul
    • Duración::checked_div
  • Permitiuse a desreferenciación de punteiros "*const T" en contextos "const".
  • No xestor de paquetes Cargo, engadiuse o campo rust_version aos metadatos do paquete e engadiuse a opción "--message-format" ao comando "instalación de carga".
  • O compilador implementa soporte para o mecanismo de protección CFI (Control Flow Integrity), que engade comprobacións antes de cada chamada indirecta para detectar algunhas formas de comportamento indefinido que poderían levar a unha violación da orde de execución normal (fluxo de control) como resultado da uso de exploits que cambian os punteiros almacenados na memoria en funcións.
  • O compilador engadiu soporte para as versións 5 e 6 do formato de comparación de cobertura LLVM, usado para avaliar a cobertura de código durante as probas.
  • No compilador, os requisitos para a versión mínima de LLVM aumentan a LLVM 12.
  • Implementouse o terceiro nivel de compatibilidade para a plataforma x86_64-unknown-none. 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.

Ademais, podemos sinalar a publicación por parte de Microsoft do lanzamento das bibliotecas Rust para Windows 0.30, que permiten utilizar a linguaxe Rust para desenvolver aplicacións para o sistema operativo Windows. O conxunto inclúe dous paquetes de caixas (windows e windows-sys), a través dos cales podes acceder á API Win nos programas Rust. O código para a compatibilidade da API xérase de forma dinámica a partir dos metadatos que describen a API, o que che permite implementar compatibilidade non só para as chamadas existentes da API de Win, senón tamén para as que aparecerán no futuro. A nova versión engade soporte para a plataforma de destino UWP (Universal Windows Platform) e implementa os tipos Handle e Debug.

Fonte: opennet.ru

Engadir un comentario