Objavljena je bila izdaja splošnega programskega jezika Rust 1.84, 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:
- Upravitelj paketov Cargo ima stabiliziran mehanizem za obdelavo odvisnosti, ki izbere različice odvisnih komponent ob upoštevanju združljivosti z različicami prevajalnika Rust, ki so deklarirane kot minimalno podprte v projektu (MSRV, Minimum Supported Rust Version). Nova funkcija odpravlja potrebo vzdrževalcev po ročnem izbiranju starejših različic vsake odvisnosti v projektih, ki ostajajo združljivi s starejšimi različicami kompleta orodij Rust. Nov način razreševanja odvisnosti bo privzeto omogočen v izdaji Rust 1.85, vendar je za zdaj na voljo kot možnost, ki jo je mogoče omogočiti tako, da navedete 'incompatible-rust-versions = " v razdelku "[resolver]" v razdelku ". cargo/config.toml" datoteka. nadomestna"'.
- Začeli smo pretvorbo prevajalnika v nov reševalec tipov, zasnovan za preverjanje meja uporabnosti lastnosti, normalizacijo tipov in ocenjevanje združljivosti tipov. V različici 1.84 se za preverjanje skladnosti implementacij lastnosti uporablja nov upravljalnik, tj. ocenjevanje obstoja največ ene lastnosti za zadevno vrsto, ob upoštevanju kode iz drugih paketov zabojev. To preverjanje nam je omogočilo, da smo se znebili težav v implementaciji obdelovalnika starega tipa, ki bi lahko povzročile konflikte zaradi presečišča implementacij različnih tipov.
- Predlagan je bil nov API »Strict Provenance«, ki ga je mogoče uporabiti za pretvorbo kazalca v celo število in nazaj, ob upoštevanju metapodatkov, priloženih kazalcu, z informacijami o njegovem izvoru in področju uporabe (poleg naslov, vrednost »provenence« je dodana kazalcu z informacijami o povezavi z drugimi kazalci, kar vam omogoča, da določite, kje in kdaj lahko kazalec dostopa do pomnilnika). Pri prevajanju kazalca na celo število in nazaj pride do nedefiniranega vedenja zaradi težav pri sledenju izvoru nastalega kazalca. Novi API vam omogoča izvajanje operacij kazalca na nizki ravni, kot je shranjevanje dodatnih informacij v bite nizkega reda kazalca, ne da bi kazalec pretvorili v celo število.
- Nov del API-ja je bil premaknjen v kategorijo stabilnega, vključno s stabiliziranimi metodami in implementacijami lastnosti:
- Ipv6Addr::is_unique_local
- Ipv6Addr::is_unicast_link_local
- core::ptr::with_exposed_provenance
- core::ptr::with_exposed_provenance_mut
- ::naslov
- ::expose_provenance
- ::z_naslovom
- ::naslov_zemljevida
- ::isqrt
- ::preverjeno_isqrt
- ::isqrt
- NonZero::isqrt
- core::ptr::without_provenance
- core::ptr::without_provenance_mut
- core::ptr::viseče
- core::ptr::dangling_mut
- Pin::as_deref_mut
- Znak "const" se uporablja v funkcijah:
- AtomicBool::from_ptr
- AtomicPtr::from_ptr
- AtomicU8::from_ptr
- AtomicU16::from_ptr
- AtomicU32::from_ptr
- AtomicU64::from_ptr
- AtomicUsize::from_ptr
- AtomicI8::from_ptr
- AtomicI16::from_ptr
- AtomicI32::from_ptr
- AtomicI64::from_ptr
- AtomicIsize::from_ptr
- ::je_null
- ::as_ref
- ::as_mut
- Pin::novo
- Pin::new_unchecked
- Pin::get_ref
- Pin::into_ref
- Pin::get_mut
- Pin::get_unchecked_mut
- Pin::static_ref
- Pin::static_mut
- Podpora za inline vstavke asemblerja za arhitekture s390x in Arm64EC je bila stabilizirana.
- Podpora za večvrednostne, referenčne tipe in funkcionalnost zadnjega klica je bila stabilizirana za ciljno platformo WebAssembly.
- Implementirana je bila druga raven podpore za platformo wasm32v1-none. Druga raven podpore vključuje garancijo za montažo.
Poleg tega je mogoče opaziti več projektov, povezanih z Rust:
- Objavljena je bila izdaja operacijskega sistema Tock 2.2, ki je napisan v jeziku Rust in je namenjen uporabi v mikrokontrolerjih. Sistem omogoča hkratno izvajanje več nezaupljivih aplikacij na vgrajenih napravah z omejeno velikostjo RAM-a, kot so senzorji, TPM (Trusted Platform Module), ključi za preverjanje pristnosti in nosljive naprave. Podprte so platforme z mikrokontrolerji, ki temeljijo na arhitekturah ARM Cortex-M in RISC-V. Ključna lastnost Tocka je izolacija plasti aplikacije, jedra in gonilnika ter izolacija vsake aplikacije in gonilnika posebej. Izolacija uporablja zmožnosti jezika Rust in ločevanje na ravni zaščite pomnilnika.
- Projekt VEKOS (Verified Experimental Kernel OS) razvija jedro operacijskega sistema v jeziku Rust, ki omogoča preverjanje izvršljivih komponent. Za vsako operacijo datotečnega sistema, ustvarjanje procesa in dodelitev pomnilnika se ustvari kriptografski dokaz, ki omogoča preverjanje operacije med izvajanjem (izvedba se primerja z uporabo verige blokov za preverjanje dejanj v operacijskem sistemu). V datotečnem sistemu VKFS se za zagotovitev celovitosti in zaščite pred retroaktivnim popačenjem uporablja struktura »Merkle Tree«, v kateri vsaka veja preveri vse osnovne veje in vozlišča, zahvaljujoč zgoščevanju dreves. Dodeljevanje pomnilnika se izvede v načinu COW (Copy-On-Write).
- Skupina raziskovalcev iz Microsofta in Inria razvija podnabor jezika C, Mini-C, zasnovan za samodejno prevajanje programov C v predstavitev Rust. Za razliko od prevajalnika c2rust novi projekt omogoča ustvarjanje kode Rust brez uporabe unsafe, vendar je namenjen predvsem pretvorbi projektov C, ki imajo formalno dokazilo o zanesljivosti. Posledica tega je, da bo lažje najprej pretvoriti projekt C v predstavitev Mini-C, ki ne dovoljuje aritmetike kazalcev, kot pa prepisati nevarne bloke po neposrednem prevajanju iz C v Rust.
Izvedba prevajalnika temelji na kompletu orodij KaRaMeL. Mini-C je bil razvit in preizkušen kot del projekta prepisovanja kriptografske knjižnice HACL* v Rust, za katero je bilo predloženo formalno dokazilo o zanesljivosti. Podoben dokaz je bil uporabljen za prikaz zmožnosti ustvarjanja varne kode Rust iz Mini-C.
- Daniel Stenberg, avtor pripomočka curl, je napovedal, da projekt Curl ne bo več razvijal in vzdrževal alternativnega zaledja HTTP, napisanega v Rustu, z uporabo knjižnice Hyper. Naveden razlog je nezanimanje s strani razvijalcev in uporabnikov.
- Napovedana je bila beta izdaja ukazne lupine Fish 4.0, prepisane v Rust. Po dveh letih razvoja je bila kodna baza Fish v celoti prenesena iz C++ v Rust. Prehod na Rust nam je omogočil, da smo rešili težave z večnitnostjo, pridobili sodobna orodja, ki zaznajo napake v fazi prevajanja, izboljšali varnost pomnilnika in naredili projekt privlačnejši za nove razvijalce.
- Projekt Tor je objavil izdajo Arti 1.3.2, alternativne izvedbe odjemalca Tor v Rustu. Arti ponuja vdelano knjižnico, ki jo lahko uporabljajo različne aplikacije. Pri ustvarjanju Artija so bile upoštevane pretekle izkušnje pri razvoju Tor, da bi se izognili znanim arhitekturnim težavam in naredili projekt bolj modularen in učinkovit. Veja 1.x je označena kot primerna za uporabo splošnih uporabnikov in zagotavlja enako raven zasebnosti, uporabnosti in stabilnosti kot glavna izvedba C. Nova različica nadaljuje razvoj RPC, narejene so bile priprave za implementacijo relejne podpore in dodana je zaščita pred napadi DoS na storitve Onion.
- Objavljena je bila izdaja igralnega mehanizma Bevy 0.15, napisanega v Rustu. Motor uporablja podatkovno usmerjen model za definiranje logike igre, zgrajen na vrhu že pripravljenih komponent Bevy ECS (Entity Component System), ki jih je mogoče izvajati vzporedno. Podpira 2D in 3D upodabljanje, skeletno animacijo, definicijo grafa upodabljanja, sistem za generiranje prizorov, okvir uporabniškega vmesnika, spreminjanje prizorov in virov brez potrebe po ponovnem zagonu.
- Objavljen je bil urejevalnik besedil konzole Helix 25.01, napisan v Rustu in razširja ideje, ki so del vim in neovim. Podpira integracijo s strežniki LSP in Tree-sitter, hkratno izbiro več blokov, uporabo več kazalcev pri urejanju, teme in protokol za odpravljanje napak DAP (Debug Adapter Protocol).
- Motor brskalnika Servo, napisan v Rustu, je dodal podporo za temni način oblikovanja. Velikost brskalnika ServoShell je bila zmanjšana za 20 %. Podpora za spletne specifikacije je bila razširjena na možnost prijave in branja sporočil v Discord (pošiljanje sporočil še ni mogoče).
- Mozilla je predstavila komplet orodij Uniffi for React Native za ustvarjanje modulov za React Native v jeziku Rust.
- Delovanje kodirnikov slik PNG je bilo testirano. Izkazalo se je, da so dekoderji Rust (png, zune-png, wuffs) hitrejši od dekoderjev C (libpng, spng, stb_image). Na primer, paket crate png (image-rs) je bil boljši od libpng za 1.8-krat v sistemu x86 in 1.5-krat v sistemu ARM. image-rs: 375.401 MP/s (povprečje) 318.632 MP/s (geomean) zune-png: 376.649 MP/s (povprečje) 302.529 MP/s (geomean) wuffs: 376.205 MP/s (povprečje) 287.181 MP/s ( geomean) libpng: 208.906 MP/s (povprečje) 173.034 MP/s (geomean) spng: 299.515 MP/s (povprečje) 235.495 MP/s (geomean) stb_image: 234.353 MP/s (povprečje) 171.505 MP/s (geomean)
Vir: opennet.ru
