Versió del llenguatge de programació Rust 1.58

S'ha publicat el llançament del llenguatge de programació de propòsit general Rust 1.58, fundat pel projecte Mozilla, però ara desenvolupat sota els auspicis de l'organització independent sense ànim de lucre Rust Foundation. El llenguatge se centra en la seguretat de la memòria, proporciona una gestió automàtica de la memòria i proporciona els mitjans per aconseguir un paral·lelisme de tasques elevat sense utilitzar un col·lector d'escombraries o temps d'execució (el temps d'execució es redueix a la inicialització bàsica i el manteniment de la biblioteca estàndard).

La gestió automàtica de la memòria de Rust estalvia al desenvolupador d'errors en manipular punters i protegeix dels problemes que sorgeixen a causa de la manipulació de la memòria de baix nivell, com ara accedir a una àrea de memòria després d'haver estat alliberada, desreferenciar punters nuls, desbordaments de memòria intermèdia, etc. Per distribuir biblioteques, proporcionar compilacions i gestionar dependències, el projecte desenvolupa el gestor de paquets Cargo. El repositori crates.io és compatible per allotjar biblioteques.

Principals innovacions:

  • En els blocs de format de línia, a més de la capacitat prèviament disponible per substituir variables enumerades explícitament després d'una línia per nombre i nom, s'implementa la possibilitat de substituir identificadors arbitraris afegint l'expressió "{identificador}" a la línia. Per exemple: // Construccions suportades anteriorment: println!("Hola, {}!", get_person()); println!("Hola, {0}!", get_person()); println!("Hola, {persona}!", persona = get_person()); // ara podeu especificar let person = get_person(); println!("Hola, {persona}!");

    Els identificadors també es poden especificar directament a les opcions de format. let (amplada, precisió) = get_format(); per a (nom, puntuació) a get_scores() { println!("{nom}: {score:width$.precision$}"); }

    La nova substitució funciona en totes les macros que admeten la definició del format de cadena, a excepció de la macro "panic!". a les versions de 2015 i 2018 del llenguatge Rust, en què el pànic!("{ident}") es tracta com una cadena normal (a Rust 2021 la substitució funciona).

  • S'ha canviat el comportament de l'estructura d'ordres std::process:: a la plataforma Windows de manera que quan s'executa ordres, per motius de seguretat, ja no cerqui fitxers executables al directori actual. El directori actual està exclòs perquè es podria utilitzar per executar codi maliciós si els programes s'executen en directoris no fiables (CVE-2021-3013). La nova lògica de detecció executable implica cercar els directoris Rust, el directori de l'aplicació, el directori del sistema de Windows i els directoris especificats a la variable d'entorn PATH.
  • La biblioteca estàndard ha ampliat el nombre de funcions marcades "#[must_use]" per emetre un avís si s'ignora el valor de retorn, cosa que ajuda a identificar els errors causats per suposar que una funció canviarà els valors en lloc de tornar un valor nou.
  • Una nova part de l'API s'ha mogut a la categoria d'estable, inclosos els mètodes i les implementacions de trets s'han estabilitzat:
    • Metadades::is_symlink
    • Path::is_symlink
    • {enteger}::saturating_div
    • Opció::unwrap_unchecked
    • Resultat::unwrap_unchecked
    • Resultat::unwrap_err_unchecked
  • L'atribut "const", que determina la possibilitat d'utilitzar-lo en qualsevol context en lloc de constants, s'utilitza a les funcions:
    • Durada::nou
    • Durada::checked_add
    • Durada::saturating_add
    • Durada::checked_sub
    • Durada::saturating_sub
    • Durada::checked_mul
    • Durada::saturating_mul
    • Durada::checked_div
  • Es permet la desreferenciació dels punters "*const T" en contextos "const".
  • Al gestor de paquets de càrrega, s'ha afegit el camp rust_version a les metadades del paquet i l'opció "--message-format" s'ha afegit a l'ordre "instal·lació de càrrega".
  • El compilador implementa suport per al mecanisme de protecció CFI (Control Flow Integrity), que afegeix comprovacions abans de cada trucada indirecta per detectar algunes formes de comportament no definit que podria conduir a una violació de l'ordre d'execució normal (flux de control) com a resultat del ús d'explotacions que canvien els punters emmagatzemats a la memòria en funcions.
  • El compilador ha afegit suport per a les versions 5 i 6 del format de comparació de cobertura LLVM, utilitzat per avaluar la cobertura del codi durant les proves.
  • Al compilador, els requisits per a la versió mínima de LLVM s'eleven a LLVM 12.
  • S'ha implementat el tercer nivell de suport per a la plataforma x86_64-unknown-none. El tercer nivell inclou el suport bàsic, però sense proves automatitzades, publicar compilacions oficials o comprovar si es pot crear el codi.

A més, podem destacar la publicació per part de Microsoft del llançament de les biblioteques Rust per a Windows 0.30, que us permeten utilitzar el llenguatge Rust per desenvolupar aplicacions per al sistema operatiu Windows. El conjunt inclou dos paquets de caixes (windows i windows-sys), mitjançant els quals podeu accedir a l'API Win als programes Rust. El codi per al suport de l'API es genera de forma dinàmica a partir de les metadades que descriuen l'API, la qual cosa us permet implementar el suport no només per a les trucades de l'API de Win existents, sinó també per a les trucades que apareixeran en el futur. La nova versió afegeix suport per a la plataforma de destinació UWP (Universal Windows Platform) i implementa els tipus Handle i Debug.

Font: opennet.ru

Afegeix comentari