Objavljen Rust 1.84. Jezgre Tock i Vekos napisane u Rustu. Mini-C dijalekt

Objavljen je programski jezik opće namjene Rust 1.84, utemeljen na projektu Mozilla, ali sada razvijen pod pokroviteljstvom nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije i pruža sredstva za postizanje visokog paralelizma poslova uz izbjegavanje upotrebe skupljača smeća i vremena izvođenja (vrijeme izvođenja je smanjeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustove metode rukovanja memorijom spašavaju programere od pogrešaka pri manipuliranju pokazivačima i štite od problema koji nastaju zbog rukovanja memorijom na niskoj razini, kao što je pristup memorijskom području nakon što je ono oslobođeno, dereferenciranje nultih pokazivača, prekoračenje međuspremnika, itd. Za distribuciju biblioteka, pružanje nadogradnji i upravljanje ovisnostima, projekt razvija upravitelja paketa Cargo. Repozitorij crates.io podržan je za smještaj knjižnica.

Sigurnost memorije osigurana je u Rustu tijekom kompajliranja provjerom referenci, praćenjem vlasništva objekta, praćenjem životnih vijekova objekta (opsega) i procjenom ispravnosti pristupa memoriji tijekom izvođenja koda. Rust također pruža zaštitu od prekoračenja cjelobrojnih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje pogreške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli prema zadanim postavkama, nudi snažno statično tipkanje za smanjenje logičkih pogrešaka.

Glavne inovacije:

  • Upravitelj paketa Cargo ima stabilizirani mehanizam za obradu ovisnosti koji odabire verzije zavisnih komponenti uzimajući u obzir kompatibilnost s verzijama prevoditelja Rust deklariranih kao minimalno podržanih od strane projekta (MSRV, Minimum Supported Rust Version). Nova značajka uklanja potrebu za održavateljima da ručno biraju starije verzije svake ovisnosti u projektima koji ostaju kompatibilni sa starijim verzijama Rust alata. Novi način rješavanja ovisnosti bit će omogućen prema zadanim postavkama u izdanju Rust 1.85, ali za sada je dostupan kao opcija koja se može omogućiti navođenjem 'incompatible-rust-versions = " u odjeljku "[razrješivač]" u ". cargo/config.toml" datoteka. rezervni"'.
  • Počeli smo pretvarati kompilator u novi alat za rješavanje tipova, dizajniran za provjeru granica primjenjivosti značajki, normalizaciju tipova i procjenu kompatibilnosti tipova. U verziji 1.84 koristi se novi rukovatelj za provjeru dosljednosti implementacija značajki, tj. procjenjujući postojanje najviše jedne osobine za predmetnu vrstu, uzimajući u obzir kod iz drugih pakiranja sanduka. Ova nam je provjera omogućila da se riješimo problema u staroj implementaciji rukovatelja tipovima, što bi potencijalno moglo dovesti do sukoba zbog križanja različitih implementacija tipova.
  • Predložen je novi API "Strict Provenance" koji se može koristiti za pretvaranje pokazivača u cijeli broj i natrag, uzimajući u obzir metapodatke priložene pokazivaču s informacijama o njegovom podrijetlu i području upotrebe (pored adresa, vrijednost "podrijetla" pridružena je pokazivaču s informacijama o vezi s drugim pokazivačima, što vam omogućuje da odredite gdje i kada pokazivač može pristupiti memoriji). Prilikom pretvaranja pokazivača na cijeli broj i natrag, događa se nedefinirano ponašanje zbog poteškoća u praćenju porijekla rezultirajućeg pokazivača. Novi API omogućuje izvođenje operacija pokazivača niske razine, kao što je pohranjivanje dodatnih informacija u bitove nižeg reda pokazivača, bez pretvaranja pokazivača u cijeli broj.
  • Novi dio API-ja premješten je u kategoriju stabilnih, uključujući metode i implementacije karakteristika koje su stabilizirane:
    • Ipv6Addr::is_unique_local
    • Ipv6Addr::is_unicast_link_local
    • core::ptr::with_exposed_provenance
    • core::ptr::with_exposed_provenance_mut
    • ::adresa
    • ::izložiti_porijeklo
    • ::s_adresom
    • ::map_addr
    • ::isqrt
    • ::provjereno_isqrt
    • ::isqrt
    • Nenula::isqrt
    • core::ptr::without_provenance
    • core::ptr::without_provenance_mut
    • jezgra::ptr::viseći
    • jezgra::ptr::dangling_mut
    • Pin::as_deref_mut
  • Znak “const” koristi se u funkcijama:
    • AtomicBool::from_ptr
    • AtomskiPtr::iz_ptr
    • AtomicU8::from_ptr
    • AtomicU16::from_ptr
    • AtomicU32::from_ptr
    • AtomicU64::from_ptr
    • AtomicSize::from_ptr
    • AtomskiI8::from_ptr
    • AtomskiI16::from_ptr
    • AtomskiI32::from_ptr
    • AtomskiI64::from_ptr
    • AtomicIsize::from_ptr
    • ::je_nula
    • ::kao_ref
    • ::kao_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
  • Podrška za inline asemblerske umetke za s390x i Arm64EC arhitekture je stabilizirana.
  • Podrška za viševrijednost, referentne tipove i funkcionalnost repnog poziva stabilizirana je za ciljnu platformu WebAssembly.
  • Implementirana je druga razina podrške za platformu wasm32v1-none. Druga razina podrške uključuje jamstvo za montažu.

Osim toga, postoji nekoliko projekata povezanih s Rustom:

  • Objavljeno je izdanje operativnog sustava Tock 2.2, napisanog u jeziku Rust i namijenjenog uporabi u mikrokontrolerima. Sustav omogućuje istovremeno izvršavanje više nepouzdanih aplikacija na ugrađenim uređajima s ograničenom veličinom RAM-a, kao što su senzori, TPM (Trusted Platform Module), autentifikacijski privjesci za ključeve i nosivi uređaji. Podržane su platforme s mikrokontrolerima temeljenim na ARM Cortex-M i RISC-V arhitekturama. Ključna značajka Tocka je izolacija slojeva aplikacije, kernela i upravljačkog programa, kao i izolacija svake aplikacije i upravljačkog programa zasebno. Izolacija koristi i mogućnosti jezika Rust i odvajanje na razini zaštite memorije.
  • Projekt VEKOS (Verified Experimental Kernel OS) razvija jezgru operativnog sustava u jeziku Rust, koja omogućuje provjeru izvršnih komponenti. Za svaku operaciju datotečnog sustava, stvaranje procesa i dodjelu memorije, generira se kriptografski dokaz koji omogućuje provjeru operacije tijekom izvođenja (implementacija se uspoređuje s korištenjem blockchaina za provjeru radnji u operativnom sustavu). U VKFS datotečnom sustavu, kako bi se osigurao integritet i zaštita od retroaktivnog izobličenja, koristi se Merkleova struktura stabla, svaka grana u kojoj provjerava sve temeljne grane i čvorove, zahvaljujući hashiranju stabla. Dodjela memorije izvodi se u načinu COW (Copy-On-Write).
  • Grupa istraživača iz Microsofta i Inrije razvija podskup C jezika, Mini-C, dizajniran za automatsko prevođenje C programa u Rust prikaz. Za razliku od c2rust prevoditelja, novi projekt vam omogućuje generiranje Rust koda bez korištenja nesigurnih, ali je prvenstveno usmjeren na pretvaranje C projekata koji imaju formalni dokaz pouzdanosti. Implikacija je da će biti lakše najprije pretvoriti C projekt u Mini-C reprezentaciju koja ne dopušta aritmetiku pokazivača nego ponovno pisati nesigurne blokove nakon izravnog prevođenja iz C-a u Rust.

    Implementacija prevoditelja temelji se na KaRaMeL alatu. Mini-C je razvijen i testiran kao dio projekta ponovnog pisanja HACL* kriptografske biblioteke u Rustu, za koji je dostavljen službeni dokaz pouzdanosti. Sličan dokaz korišten je za demonstraciju sposobnosti generiranja sigurnog Rust koda iz Mini-C-a.

  • Daniel Stenberg, autor uslužnog programa curl, najavio je da projekt Curl više neće razvijati i održavati alternativnu HTTP pozadinu napisanu u Rustu koristeći Hyper biblioteku. Kao razlog navodi se nezainteresiranost programera i korisnika.
  • Najavljeno je beta izdanje komandne ljuske Fish 4.0, prerađene u Rustu. Napominje se da je nakon dvije godine razvoja Fish kodna baza u potpunosti prebačena sa C++ na Rust. Prijelaz na Rust omogućio nam je da riješimo probleme s multithreadingom, dobijemo moderne alate koji otkrivaju pogreške u fazi kompilacije, poboljšamo sigurnost memorije i učinimo projekt privlačnijim za nove programere.
  • Projekt Tor objavio je izdanje Artija 1.3.2, alternativne implementacije Tor klijenta u Rustu. Arti nudi biblioteku koja se može ugraditi i koju mogu koristiti razne aplikacije. Pri stvaranju Artija uzeto je u obzir prošlo iskustvo u razvoju Tor-a kako bi se izbjegli poznati arhitektonski problemi i projekt učinio modularnijim i učinkovitijim. Grana 1.x označena je kao prikladna za korištenje od strane općih korisnika i pruža istu razinu privatnosti, upotrebljivosti i stabilnosti kao glavna C implementacija. Nova verzija nastavlja razvoj RPC-a, napravljene su pripreme za implementaciju relay podrške, a dodana je i zaštita od DoS napada na Onion servise.
  • Objavljeno je izdanje pokretača igre Bevy 0.15, napisanog u Rustu. Motor koristi Data Driven model za definiranje logike igre, izgrađen na vrhu skupa gotovih komponenti Bevy ECS (Entity Component System) koje se mogu izvoditi paralelno. Podržava 2D i 3D renderiranje, skeletnu animaciju, definiciju grafa renderiranja, sustav za generiranje scene, okvir korisničkog sučelja, izmjene scena i resursa bez potrebe za ponovnim pokretanjem.
  • Objavljen je konzolni uređivač teksta Helix 25.01, napisan u Rustu i proširuje ideje svojstvene vim-u i neovim. Podržava integraciju s LSP poslužiteljima i Tree-sitterom, simultani odabir nekoliko blokova, korištenje višestrukih pokazivača pri uređivanju, teme i DAP (Debug Adapter Protocol) protokol za otklanjanje pogrešaka.
  • Motor preglednika Servo, napisan u Rustu, dodao je podršku za tamni način dizajna. Veličina preglednika ServoShell smanjena je za 20%. Podrška za web specifikacije proširena je na mogućnost prijave i čitanja poruka u Discordu (slanje poruka još nije moguće).
  • Mozilla je predstavila Uniffi for React Native set alata za kreiranje modula za React Native u jeziku Rust.
  • Ispitana je izvedba PNG kodera slika. Pokazalo se da su Rust dekoderi (png, zune-png, wuffs) brži od C dekodera (libpng, spng, stb_image). Na primjer, paket crate png (image-rs) nadmašio je libpng za 1.8 puta na x86 sustavu i 1.5 puta na ARM sustavu. image-rs: 375.401 MP/s (prosječno) 318.632 MP/s (geomean) zune-png: 376.649 MP/s (prosjek) 302.529 MP/s (geomean) wuffs: 376.205 MP/s (prosjek) 287.181 MP/s ( geomean) libpng: 208.906 MP/s (prosječno) 173.034 MP/s (geomean) spng: 299.515 MP/s (prosjek) 235.495 MP/s (geomean) stb_image: 234.353 MP/s (prosjek) 171.505 MP/s (geomean)

Izvor: opennet.ru

Dodajte komentar