Linguaxe de programación Rust versión 1.60

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

  • O compilador rustc ten un sistema estabilizado baseado en LLVM para xerar datos de cobertura utilizados para avaliar a cobertura do código durante as probas. Para habilitar os datos de cobertura durante a montaxe, debes usar a marca "-Cinstrument-coverage", por exemplo, iniciando a montaxe co comando "RUSTFLAGS="-C instrument-coverage" cargo build". Despois de executar o ficheiro executable compilado deste xeito, o ficheiro default.proraw gardarase no directorio actual, para o seu procesamento pode utilizar a utilidade llvm-profdata do compoñente llvm-tools-preview. A saída procesada por llvm-profdata pódese pasar a llvm-cov para xerar un informe de cobertura de código anotado. A información sobre a ligazón ao código fonte tómase do ficheiro executable que se está examinando, que inclúe os datos necesarios sobre a conexión entre os contadores de cobertura e o código. 1| 1|fn main() { 2| 1| println!("Ola, mundo!"); 3| 1|}
  • No xestor de paquetes de carga, estabilizouse o soporte para a bandeira "-timings", que inclúe a xeración dun informe detallado sobre o progreso da compilación e o tempo de execución de cada paso. O informe pode ser útil para optimizar o rendemento do proceso de montaxe.
  • O xestor de paquetes de carga ofrece unha nova sintaxe para o mecanismo de compilación condicional e selección de dependencias opcionais, configurada no ficheiro Cargo.toml listando unha lista de propiedades nomeadas na sección [características] e activada activando as propiedades durante a construción do paquete. usando a bandeira "--features". A nova versión engade soporte para dependencias en espazos de nomes separados e dependencias débiles.

    No primeiro caso, é posible utilizar elementos co prefixo "dep:" dentro da sección "[características]" para vincular explícitamente a unha dependencia opcional sen representar implícitamente esta dependencia como unha característica. No segundo caso, engadiuse soporte para marcar co sinal “?”. ("nome-paquete?/nome-función") dependencias opcionais que só deberían incluírse se algunha outra propiedade inclúe a dependencia opcional indicada. Por exemplo, no seguinte exemplo, activar a propiedade serde activará a dependencia "serde", así como a propiedade "serde" para a dependencia "rgb", pero só se a dependencia "rgb" está habilitada noutro lugar: [dependencias] serde = { version = " 1.0.133", optional = true } rgb = { version = "0.8.25", optional = true } [características] serde = ["dep:serde", "rgb?/serde"]

  • Devolveuse o soporte para a compilación incremental, que estaba desactivada na última versión. Resolveuse o erro do compilador que provocou a desactivación da función.
  • Resolveuse algúns problemas ao proporcionar aos temporizadores instantáneos unha garantía de temporización monótona, que ten en conta o tempo que pasa o sistema en modo de suspensión. Anteriormente, sempre que era posible, utilizábase a API do SO para operar o temporizador, que non tiña en conta situacións problemáticas que rompen a monotonía do tempo, como problemas de hardware, uso da virtualización ou erros no sistema operativo.
  • Unha nova parte da API trasladouse á categoría de estable, incluíndo os métodos e implementacións de trazos estabilizados:
    • Arc::new_cyclic
    • Rc::novo_cíclico
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • QuizaisUninit::assume_init_drop
    • QuizaisUninit::assume_init_read
    • i8::diff_abs
    • i16::diff_abs
    • i32::diff_abs
    • i64::diff_abs
    • i128::diff_abs
    • isize::abs_diff
    • u8::diff_abs
    • u16::diff_abs
    • u32::diff_abs
    • u64::diff_abs
    • u128::diff_abs
    • use::abs_diff
    • Visualización para io::ErrorKind
    • De para ExitCode
    • Non para! (escriba "nunca")
    • _Op_Asignar<$t>
    • arch::is_aarch64_feature_detected!
  • Implementouse o terceiro nivel de soporte para as plataformas mips64-openwrt-linux-musl* e armv7-unknown-linux-uclibceabi (softfloat). O terceiro nivel implica soporte básico, pero sen probas automatizadas, publicación de compilacións oficiais e verificación da compilabilidade do código.
  • O compilador cambiouse para usar LLVM 14.

Ademais, podes observar:

  • Engadiuse compatibilidade para o arranque do compilador rustc mediante o backend rustc_codegen_gcc, que che permite usar a biblioteca libgccjit do proxecto GCC como xerador de código en rustc, o que permite que Rustc proporcione soporte para arquitecturas e optimizacións dispoñibles en GCC. A promoción do compilador significa a posibilidade de usar un xerador de código baseado en GCC en rustc para construír o propio compilador de rustc. No lado práctico, esta función permítelle construír programas de oxidación para arquitecturas que antes non eran compatibles con rustc.
  • Está dispoñible a versión do kit de ferramentas uutils coreutils 0.0.13, dentro do cal se está a desenvolver un análogo do paquete GNU Coreutils, reescrito na linguaxe Rust. Coreutils inclúe máis de cen utilidades, incluíndo sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln e ls. O obxectivo do proxecto é crear unha implementación alternativa multiplataforma de Coreutils, capaz de executarse en plataformas Windows, Redox e Fuchsia, así como a distribución baixo a licenza permisiva MIT, en lugar da licenza copyleft GPL.

    A nova versión mellorou as implementacións de moitas utilidades, incluíndo unha compatibilidade significativamente mellorada das utilidades cp, dd, df, split e tr cos seus homólogos do proxecto GNU. Documentación en liña facilitada. O analizador clap utilízase para analizar os argumentos da liña de comandos, o que mellorou a saída da marca "--help" e engadiu soporte para abreviaturas de comandos longos (por exemplo, pode especificar "ls -col" en lugar de "ls -color". ").

Fonte: opennet.ru

Engadir un comentario