Izdaja programskega jezika Rust 1.65

Objavljena je bila izdaja splošnega programskega jezika Rust 1.65, ki ga je ustanovil projekt Mozilla, zdaj pa se razvija pod okriljem neodvisne neprofitne organizacije Rust Foundation. Jezik se osredotoča na varnost pomnilnika in zagotavlja sredstva za doseganje visoke paralelnosti opravil, hkrati pa se izogiba uporabi zbiralnika smeti in izvajalnega okolja (izvajalni čas je zmanjšan na osnovno inicializacijo in vzdrževanje standardne knjižnice).

Rustove metode ravnanja s pomnilnikom rešijo razvijalca pred napakami pri ravnanju s kazalci in ščitijo pred težavami, ki nastanejo zaradi ravnanja s pomnilnikom na nizki ravni, kot je dostop do območja pomnilnika, potem ko je bilo osvobojeno, dereferenciranje ničelnih kazalcev, prekoračitev medpomnilnika itd. Za distribucijo knjižnic, zagotavljanje gradenj in upravljanje odvisnosti projekt razvija upravitelja paketov Cargo. Repozitorij crates.io je podprt za gostovanje knjižnic.

Varnost pomnilnika je v Rustu zagotovljena v času prevajanja s preverjanjem sklicevanj, spremljanjem lastništva objekta, spremljanjem življenjskih dob objektov (obseg) in ocenjevanjem pravilnosti dostopa do pomnilnika med izvajanjem kode. Rust zagotavlja tudi zaščito pred celoštevilskimi prelivi, zahteva obvezno inicializacijo vrednosti spremenljivk pred uporabo, bolje obravnava napake v standardni knjižnici, privzeto uporablja koncept nespremenljivih referenc in spremenljivk, ponuja močno statično tipkanje za zmanjšanje logičnih napak.

Glavne novosti:

  • Dodana podpora za generične povezane tipe (GAT, Generic Associated Types), ki omogočajo ustvarjanje vzdevkov tipa, povezanih z drugim tipom, in vam omogočajo, da konstruktorje tipa povežete z lastnostmi. trait Foo { type Bar<'x>; }
  • Implementiran je bil izraz »let ... else«, ki vam omogoča, da preverite pogoj ujemanja z vzorcem neposredno znotraj izraza »let« in izvedete poljubno kodo, če se vzorec ne ujema. let Ok(count) = u64::from_str(count_str) else { panic!("Ne morem razčleniti celega števila: '{count_str}'"); };
  • Dovolite uporabo stavka za prekinitev za predčasen izhod iz poimenovanih blokov z uporabo imena (oznake) bloka za identifikacijo bloka, ki ga želite prekiniti. let result = 'block: { do_thing(); if condition_not_met() { break 'blok 1; } naredi_naslednjo_stvar(); if condition_not_met() { break 'block 2; } naredi_zadnjo_stvar(); 3};
  • Za Linux je bila dodana možnost ločenega shranjevanja informacij o odpravljanju napak (split-debuginfo), ki je bila prej na voljo samo za platformo macOS. Ko podate možnost "-Csplit-debuginfo=unpacked", bodo podatki o debuginfo v formatu DWARF shranjeni v več ločenih objektnih datotek s pripono ".dwo". Če navedete »-Csplit-debuginfo=packed«, boste ustvarili en sam paket v formatu ».dwp«, ki vključuje vse podatke o odpravljanju napak za projekt. Če želite integrirati debuginfo neposredno v razdelek .debug_* predmetov ELF, lahko uporabite možnost "-Csplit-debuginfo=off".
  • Nov del API-ja je bil premaknjen v kategorijo stabilnega, vključno s stabiliziranimi metodami in implementacijami lastnosti:
    • std::backtrace::backtrace
    • Vezano::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • Atribut “const”, ki določa možnost uporabe v poljubnem kontekstu namesto konstant, se uporablja v funkcijah <*const T&>::offset_from in <*mut T>::offset_from
  • V okviru zadnje faze prenosa implementacije protokola LSP (Language Server Protocol) na rust-analyzer je bila zastarela implementacija Rust Language Server (RLS) nadomeščena s škrbinskim strežnikom, ki izda opozorilo s predlogom za prehod na z uporabo analizatorja rje.
  • Med prevajanjem je omogočena podpora za inline uvajanje vmesne kode MIR, kar pospeši prevajanje tipičnih paketov zaboja za 3-10 %.
  • Za pospešitev načrtovanih gradenj upravljalnik paketov Cargo zagotavlja razvrščanje opravil, ki čakajo na izvedbo v čakalni vrsti.

Poleg tega si lahko ogledate intervju o uporabi jezika Rust pri Volvu za razvoj komponent avtomobilskih informacijskih sistemov. Ni načrtov za ponovno pisanje obstoječe in preizkušene kode v Rust, toda za novo kodo je Rust ena od prednostnih možnosti za izboljšanje kakovosti z nižjimi stroški. Delovne skupine, povezane z uporabo jezika Rust, so bile ustanovljene tudi v avtomobilskih združenjih AUTOSAR (AUTomotive Open System ARchitecture) in SAE (Society of Automotive Engineers).

Poleg tega je David Kleidermacher, Googlov podpredsednik za inženiring, spregovoril o prevodu kode, ki se uporablja v platformi Android za upravljanje šifrirnih ključev, v Rust, kot tudi o uporabi Rust pri implementaciji protokola DNS prek HTTPS v skladu za UWB-čipe (Ultra-Wideband) in v virtualizacijskem ogrodju (Android Virtualization Framework), povezanem s čipom Tensor G2. Novi skladi za Bluetooth in Wi-Fi, prepisani v Rust, se razvijajo tudi za Android. Splošna strategija je postopna krepitev varnosti, najprej s pretvorbo najbolj ranljivih in vitalnih komponent programske opreme v Rust in nato z razširitvijo na druge povezane podsisteme. Lansko leto je bil jezik Rust uvrščen na seznam dovoljenih jezikov za razvoj platforme Android.

Vir: opennet.ru

Dodaj komentar