Versió del llenguatge de programació Rust 1.65

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

  • S'ha afegit suport per a tipus associats genèrics (GAT, Generic Associated Types), que permeten crear àlies de tipus associats a un altre tipus i permeten associar constructors de tipus amb trets. tret Foo { tipus Bar<'x>; }
  • S'ha implementat l'expressió "let ... else", que us permet comprovar la condició de concordança del patró directament dins de l'expressió "let" i executar codi arbitrari si el patró no coincideix. let Ok(count) = u64::from_str(count_str) else { panic!("No es pot analitzar el nombre enter: '{count_str}'"); };
  • Permet l'ús d'una instrucció break per sortir dels blocs amb nom prematurament, utilitzant el nom del bloc (etiqueta) per identificar el bloc que s'ha d'acabar. let result = 'bloquejar: { do_thing(); if condition_not_met() { break 'bloc 1; } fer_la_següent(); if condition_not_met() { trencar el bloc 2; } fer_última_cosa(); 3};
  • Per a Linux, s'ha afegit la possibilitat de desar per separat la informació de depuració (split-debuginfo), que abans només estava disponible per a la plataforma macOS. Quan especifiqueu l'opció "-Csplit-debuginfo=unpacked", les dades de debuginfo en format DWARF es desaran en diversos fitxers d'objectes separats amb una extensió ".dwo". Si especifiqueu "-Csplit-debuginfo=packed" es crearà un únic paquet en format ".dwp" que inclourà totes les dades de debuginfo del projecte. Per integrar debuginfo directament a la secció .debug_* dels objectes ELF, podeu utilitzar l'opció "-Csplit-debuginfo=off".
  • 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:
    • std::backtrace::Backtrace
    • Lligat::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • L'atribut “const”, que determina la possibilitat d'utilitzar-lo en qualsevol context en lloc de constants, s'utilitza a les funcions <*const T&>::offset_from i <*mut T>::offset_from
  • Com a part de l'etapa final de transferència de la implementació del protocol LSP (Language Server Protocol) a rust-analyzer, la implementació obsoleta de Rust Language Server (RLS) es va substituir per un servidor stub que emet un avís amb un suggeriment per canviar a utilitzant un analitzador d'òxid.
  • Durant la compilació, s'habilita el suport per al desplegament en línia del codi intermedi MIR, la qual cosa accelera la compilació de paquets de caixes típics en un 3-10%.
  • Per accelerar les compilacions programades, el gestor de paquets de càrrega proporciona l'ordenació de les tasques que s'esperen d'execució a la cua.

A més, podeu observar l'entrevista sobre l'ús del llenguatge Rust a Volvo per desenvolupar components de sistemes d'informació d'automoció. No hi ha plans per reescriure el codi existent i provat a Rust, però per al codi nou, Rust és una de les opcions preferides per millorar la qualitat a menors costos. També s'han creat grups de treball relacionats amb l'ús del llenguatge Rust a les associacions d'automoció AUTOSAR (AUTomotive Open System ARchitecture) i SAE (Society of Automotive Engineers).

A més, David Kleidermacher, vicepresident d'enginyeria de Google, va parlar de la traducció del codi utilitzat a la plataforma Android per gestionar les claus d'encriptació a Rust, així com de l'ús de Rust en la implementació del protocol DNS sobre HTTPS a la pila. per a xips UWB (Ultra-Wideband) i en el marc de virtualització (Android Virtualization Framework) associat al xip Tensor G2. També s'estan desenvolupant noves piles per a Bluetooth i Wi-Fi, reescrites a Rust, per a Android. L'estratègia general és reforçar gradualment la seguretat, primer convertint els components de programari més vulnerables i vitals a Rust i després ampliant-se a altres subsistemes relacionats. L'any passat, el llenguatge Rust es va incloure a la llista d'idiomes permesos per desenvolupar la plataforma Android.

Font: opennet.ru

Afegeix comentari