Versió del llenguatge de programació Rust 1.66

S'ha publicat el llançament del llenguatge de programació de propòsit general Rust 1.66, 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 i proporciona els mitjans per aconseguir un alt paral·lelisme de treballs evitant l'ús d'un col·lector d'escombraries i el temps d'execució (el temps d'execució es redueix a la inicialització bàsica i al manteniment de la biblioteca estàndard).

Els mètodes de gestió de memòria de Rust estalvien al desenvolupador d'errors en manipular els punters i protegeixen dels problemes que sorgeixen a causa del maneig de la memòria de baix nivell, com ara accedir a una àrea de memòria després d'haver-se alliberat, 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.

La seguretat de la memòria es proporciona a Rust en temps de compilació mitjançant la comprovació de referències, el seguiment de la propietat de l'objecte, el seguiment de la vida útil dels objectes (àmbits) i l'avaluació de la correcció de l'accés a la memòria durant l'execució del codi. Rust també proporciona protecció contra desbordaments d'enters, requereix la inicialització obligatòria dels valors de les variables abans de l'ús, gestiona millor els errors a la biblioteca estàndard, aplica el concepte de referències i variables immutables per defecte, ofereix una escriptura estàtica forta per minimitzar els errors lògics.

Principals innovacions:

  • En les enumeracions amb representacions senceres (l'atribut “#[repr(Int)]”, es permet la indicació explícita del discriminant (el número de l'opció a l'enumeració), fins i tot si l'enumeració conté camps. #[repr(u8)] enum Foo { A(u8), # discriminant 0 B(i8), # discriminant 1 C(bool) = 42, # discriminant 42 }
  • S'ha afegit la funció core::hint::black_box, que simplement retorna el valor rebut. Com que el compilador creu que una funció determinada fa una cosa específica, la funció black_box es pot utilitzar per desactivar l'optimització dels bucles del compilador quan es realitza una prova de rendiment del codi o quan s'examina el codi de màquina generat (de manera que el compilador no consideri el codi inutilitzable i l'elimini). això). Per exemple, a l'exemple següent, especificar black_box(v.as_ptr()) impedeix que el compilador assumi que el vector v no està en ús. utilitzar std::hint::black_box; fn push_cap(v: &mut Vec) { per i en 0..4 { v.push(i); caixa_negra(v.as_ptr()); } }
  • El gestor de paquets "càrrega" ofereix l'ordre "eliminar", que us permet eliminar dependències del manifest Cargo.toml des de la línia d'ordres.
  • 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:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{primer, últim, pop_primer, pop_últim}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Afegiu implementacions AsFd per als tipus de bloqueig stdio quan feu servir WASI.
    • impl TryFrom > per a la caixa<[T; N]>
    • core::hint::black_box
    • Durada::try_from_secs_{f32,f64}
    • Opció::descomprimir
    • std::os::fd
  • L'ús dels intervals “..X” i “..=X” està permès a les plantilles.
  • En muntar el frontend del compilador rustc i el backend de LLVM, s'utilitzen els modes d'optimització LTO (Link Time Optimization) i BOLT (Binary Optimization and Layout Tool), que permeten augmentar el rendiment del codi resultant i reduir el consum de memòria.
  • El tercer nivell de suport s'ha implementat per a les plataformes armv5te-none-eabi i thumbv5te-none-eabi. El tercer nivell inclou el suport bàsic, però sense proves automatitzades, publicar compilacions oficials o comprovar si es pot crear el codi.
  • S'ha afegit suport per enllaçar amb biblioteques universals de macOS.

A més, podem destacar la inclusió de la part frontal del compilador de llenguatge Rust (gccrs) a la base de codi GCC. La interfície s'inclou a la branca GCC 13, que es publicarà el maig de 2023. A partir de GCC 13, les eines GCC natives es poden utilitzar per compilar programes en el llenguatge Rust sense necessitat d'instal·lar el compilador rustc, creat amb desenvolupaments LLVM. La implementació GCC 13 de Rust serà una versió beta, no activada per defecte.

Font: opennet.ru

Afegeix comentari