Versió del llenguatge de programació Rust 1.60

S'ha publicat el llançament del llenguatge de programació de propòsit general Rust 1.60, 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:

  • El compilador rustc té un sistema estabilitzat basat en LLVM per generar dades de cobertura que s'utilitzen per avaluar la cobertura del codi durant les proves. Per habilitar les dades de cobertura durant el muntatge, heu d'utilitzar la marca "-Cinstrument-coverage", per exemple, iniciant el muntatge amb l'ordre "RUSTFLAGS="-C instrument-coverage" cargo build". Després d'executar el fitxer executable compilat d'aquesta manera, el fitxer default.proraw es desarà al directori actual, per al seu processament, podeu utilitzar la utilitat llvm-profdata del component llvm-tools-preview. La sortida processada per llvm-profdata es pot passar a llvm-cov per generar un informe de cobertura de codi anotat. La informació sobre l'enllaç al codi font s'obté del fitxer executable que s'està examinant, que inclou les dades necessàries sobre la connexió entre els comptadors de cobertura i el codi. 1| 1|fn principal() { 2| 1| println!("Hola, món!"); 3| 1|}
  • Al gestor de paquets de càrrega, s'ha estabilitzat el suport per a la bandera "-timings", que inclou la generació d'un informe detallat sobre el progrés de la construcció i el temps d'execució de cada pas. L'informe pot ser útil per optimitzar el rendiment del procés de muntatge.
  • El gestor de paquets de càrrega ofereix una nova sintaxi per al mecanisme de compilació condicional i selecció de dependències opcionals, configurada al fitxer Cargo.toml enumerant una llista de propietats anomenades a la secció [funcions] i activada habilitant les propietats durant la construcció del paquet. utilitzant la bandera "--features". La nova versió afegeix suport per a dependències en espais de noms separats i dependències febles.

    En el primer cas, és possible utilitzar elements amb el prefix "dep:" dins de la secció "[funcions]" per enllaçar explícitament a una dependència opcional sense representar implícitament aquesta dependència com una característica. En el segon cas, s'ha afegit suport per marcar amb el signe “?”. ("nom-paquet?/nom-funció") dependències opcionals que només s'han d'incloure si alguna altra propietat inclou la dependència opcional donada. Per exemple, a l'exemple següent, l'habilitació de la propietat serde habilitarà la dependència "serde", així com la propietat "serde" per a la dependència "rgb", però només si la dependència "rgb" està habilitada en un altre lloc: [dependencies] serde = { versió = " 1.0.133", opcional = true } rgb = { versió = "0.8.25", opcional = true } [característiques] serde = ["dep:serde", "rgb?/serde"]

  • S'ha retornat el suport per a la compilació incremental, que es va desactivar a l'última versió. S'ha resolt l'error del compilador que va provocar la desactivació de la funció.
  • S'han resolt alguns problemes per proporcionar temporitzadors instantanis amb una garantia de temporització monòtona, que té en compte el temps que passa el sistema en mode de repòs. Anteriorment, sempre que era possible, s'utilitzava l'API del sistema operatiu per fer funcionar el temporitzador, que no tenia en compte situacions problemàtiques que trenquessin la monotonia del temps, com ara problemes de maquinari, l'ús de la virtualització o errors en el sistema operatiu.
  • 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:
    • Arc::nou_cíclic
    • Rc::nou_cíclic
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • PotserUninit::assume_init_drop
    • PotserUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • use::abs_diff
    • Visualització per a io::ErrorKind
    • De per ExitCode
    • No per! (escriviu "mai")
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected!
  • El tercer nivell de suport s'ha implementat per a les plataformes mips64-openwrt-linux-musl* i armv7-unknown-linux-uclibceabi (softfloat). El tercer nivell inclou el suport bàsic, però sense proves automatitzades, publicar compilacions oficials o comprovar si es pot crear el codi.
  • El compilador s'ha canviat per utilitzar LLVM 14.

A més, podeu assenyalar:

  • S'ha afegit suport per a l'arrencada del compilador rustc mitjançant el backend rustc_codegen_gcc, que us permet utilitzar la biblioteca libgccjit del projecte GCC com a generador de codi a rustc, que permet que rustc proporcioni suport per a arquitectures i optimitzacions disponibles a GCC. La promoció del compilador significa la possibilitat d'utilitzar un generador de codi basat en GCC a rustc per crear el compilador rustc. Des del punt de vista pràctic, aquesta característica us permet crear programes rust per a arquitectures que abans no eren compatibles amb rustc.
  • Està disponible el llançament del conjunt d'eines uutils coreutils 0.0.13, dins del qual s'està desenvolupant un anàleg del paquet GNU Coreutils, reescrit en llenguatge Rust. Coreutils inclou més d'un centenar d'utilitats, com ara sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln i ls. L'objectiu del projecte és crear una implementació alternativa multiplataforma de Coreutils, capaç d'executar-se a les plataformes Windows, Redox i Fuchsia, així com la distribució sota la llicència permissiva MIT, en lloc de la llicència copyleft GPL.

    La nova versió ha millorat la implementació de moltes utilitats, inclosa la compatibilitat significativament millorada de les utilitats cp, dd, df, split i tr amb els seus homòlegs del projecte GNU. S'ofereix documentació en línia. L'analitzador clap s'utilitza per analitzar els arguments de la línia d'ordres, la qual cosa ha millorat la sortida de la marca "--help" i ha afegit suport per a abreviatures d'ordres llargues (per exemple, podeu especificar "ls -col" en lloc de "ls -color". ”).

Font: opennet.ru

Afegeix comentari