Lëshimi i Rust 1.84. Bërthamat Tock dhe Vekos, të shkruara në Rust. Dialekti Mini-C

Lëshohet versioni i gjuhës së programimit të përgjithshëm Rust 1.84, i bazuar në projektin Mozilla, por tani po zhvillohet nën mbikëqyrjen e një organizate jofitimprurëse të pavarur, Rust Foundation. Gjuha është fokusuar në sigurimin e punës me memorie dhe ofron mjete për të arritur një paralelizëm të lartë në ekzekutimin e detyrave, duke u mbështetur pa përdorimin e mbledhësit të plehrave dhe runtime (runtime përbëhet nga inicializimi i bazës dhe mbështetjes së bibliotekës standarde).

Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit me treguesit dhe e mbrojnë atë nga problemet që lindin për shkak të punës me kujtesën në nivel të ulët, si qasja në një zonë kujtese pas çlirimit të saj, dereferencimi i treguesve null, dalja jashtë kufijve të buffers etj. Për shpërndarjen e bibliothekave, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti zhvillohet me menaxherin e paketave Cargo. Për mbështetje të bibliothekave, ekziston një repository crates.io.

Puna e sigurt me kujtesën sigurohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve, llogaritjes së kohëzgjatjes së jetës së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në kujtesë gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtjen nga tejkalimet e numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, aplikon konceptin e referencave dhe variablave të pandryshueshëm (immutable) si standard dhe ofron tipizimin e fortë statik për të minimizuar gabimet logjike.

Novitetet kryesore:

  • NĂ« menaxherin e paketave Cargo Ă«shtĂ« stabilizuar mekanizmi i trajtimit tĂ« varĂ«sive, i cili zgjedh versionet e komponentĂ«ve tĂ« varur duke marrĂ« parasysh pĂ«rputhshmĂ«rinĂ« me versionet e kompilerit Rust, tĂ« deklaruara si minimalisht tĂ« mbĂ«shtetura nga projekti (MSRV, Minimum Supported Rust Version). MundĂ«sia e re lejon mbikĂ«qyrĂ«sit tĂ« shmangin nevojĂ«n pĂ«r tĂ« zgjedhur manualisht versionet e vjetra tĂ« çdo varĂ«sie nĂ« projekte qĂ« ruajnĂ« pĂ«rputhshmĂ«rinĂ« me versionet e vjetra tĂ« mjeteve Rust. Reza e re e pĂ«rcaktimit tĂ« varĂ«sive do tĂ« aktivizohet si parazgjedhje nĂ« publikimin e Rust 1.85, ndĂ«rsa tani Ă«shtĂ« e disponueshme nĂ« formatin e opsionit, pĂ«r ta aktivizuar atĂ« nĂ« seksionin "[resolver]" nĂ« skedarin ".cargo/config.toml" duhet tĂ« specifikohet ‘incompatible-rust-versions = "fallback"‘.
  • Ka filluar pĂ«rkthimi i kompajlerit nĂ« njĂ« trajtues tĂ« ri tĂ« llojeve (trait solver), i dizajnuar pĂ«r tĂ« kontrolluar kufijtĂ« e aplikueshmĂ«risĂ« sĂ« tipazheve, normalizimin e llojeve dhe vlerĂ«simin e pĂ«rputhshmĂ«risĂ« sĂ« llojeve. NĂ« versionin 1.84, trajtuesi i ri Ă«shtĂ« angazhuar pĂ«r tĂ« kontrolluar konsistencĂ«n e realizimeve tĂ« tipazheve, domethĂ«nĂ« pĂ«r tĂ« vlerĂ«suar ekzistencĂ«n e jo mĂ« shumĂ« se njĂ« tipaz pĂ«r llojin e shqyrtuar duke marrĂ« parasysh kodin nga crate-paketet e tjera. Kjo verifikim ka lejuar heqjen e problemeve nĂ« implementimin e vjetĂ«r tĂ« trajtuesit tĂ« llojeve, tĂ« cilat potencialisht mund tĂ« sillnin konflikte pĂ«r shkak tĂ« ndĂ«rthurrjes sĂ« realizimeve tĂ« ndryshme tĂ« tipazheve.
  • ËshtĂ« propozuar njĂ« API i ri "Strict Provenance", i cili mund tĂ« pĂ«rdoret pĂ«r tĂ« konvertuar njĂ« tregues nĂ« njĂ« numĂ«r tĂ« plotĂ« dhe anasjelltas, duke marrĂ« parasysh metadatĂ«n e lidhur me treguesin qĂ« jep informacion pĂ«r origjinĂ«n dhe fushĂ«n e pĂ«rdorimit (pĂ«rveç adresĂ«s, treguesit i shtohet vlera "provenance" me informacion mbi lidhjet me tregues tĂ« tjerĂ«, qĂ« lejojnĂ« tĂ« pĂ«rcaktohet ku dhe kur treguesi mund tĂ« qaset nĂ« memorje). Kur konvertohet njĂ« tregues nĂ« njĂ« numĂ«r tĂ« plotĂ« dhe anasjelltas, ndodhin sjellje tĂ« paqartĂ« pĂ«r shkak tĂ« vĂ«shtirĂ«sive nĂ« gjurmimin e origjinĂ«s sĂ« treguesit rezultues. API i ri lejon kryerjen e operacioneve tĂ« nivelit tĂ« ulĂ«t me treguesit, si ruajtja e informacionit shtesĂ« nĂ« bitĂ«t e poshtĂ«m tĂ« treguesit, pa e kthyer atĂ« nĂ« njĂ« numĂ«r tĂ« plotĂ«.
  • NjĂ« grup i ri API u kalua nĂ« kategorinĂ« e stabilizuar, pĂ«rfshirĂ« stabilizimin e metodave dhe implementimeve tĂ« trait-Ă«ve:
    • Ipv6Addr::is_unique_local
    • Ipv6Addr::is_unicast_link_local
    • core::ptr::with_exposed_provenance
    • core::ptr::with_exposed_provenance_mut
    • ::addr
    • ::expose_provenance
    • ::with_addr
    • ::map_addr
    • ::isqrt
    • ::checked_isqrt
    • ::isqrt
    • NonZero::isqrt
    • core::ptr::without_provenance
    • core::ptr::without_provenance_mut
    • core::ptr::dangling
    • core::ptr::dangling_mut
    • Pin::as_deref_mut
  • Priznaku «const» aplicohet nĂ« funksione:
    • 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
    • ::is_null
    • ::as_ref
    • ::as_mut
    • Pin::new
    • Pin::new_unchecked
    • Pin::get_ref
    • Pin::into_ref
    • Pin::get_mut
    • Pin::get_unchecked_mut
    • Pin::static_ref
    • Pin::static_mut
  • ËshtĂ« stabilizuar mbĂ«shtetje pĂ«r inlinĂ« e asambleve pĂ«r arkitekturat s390x dhe Arm64EC.
  • PĂ«r platformĂ«n e synuar WebAssembly Ă«shtĂ« stabilizuar mbĂ«shtetje pĂ«r funksionalitetin multivalue, reference-types dhe tail-call.
  • ËshtĂ« realizuar niveli i dytĂ« i mbĂ«shtetjes pĂ«r platformĂ«n wasm32v1-none. Niveli i dytĂ« i mbĂ«shtetjes nĂ«nkupton garancinĂ« e ndĂ«rtimit.

Për më tepër, mund të theksohen disa projekte që lidhen me Rust:

  • ËshtĂ« publikuar lĂ«shimi i sistemit operativ Tock 2.2, i shkruar nĂ« gjuhĂ«n Rust dhe i orientuar pĂ«r pĂ«rdorim nĂ« mikrokompjuterĂ«. Sistemi mundĂ«son organizimin e ekzekutimit tĂ« disa aplikacioneve tĂ« pasigurt nĂ« pajisjet e inkorporuara, tĂ« cilat kanĂ« njĂ« kapacitet tĂ« kufizuar RAM-i, si sensorĂ«t, TPM (Moduli i PlatformĂ«s sĂ« Besueshme), çelĂ«sat e autentikimit dhe pajisjet e veshshme. MbĂ«shteten platforma me mikrokompjuterĂ« tĂ« bazuar nĂ« arkitekturĂ«n ARM Cortex-M dhe RISC-V. Karakteristika kryesore e Tock Ă«shtĂ« izolimi i niveleve tĂ« aplikacioneve, bĂ«rthamĂ«s dhe shtresĂ«s me drejtorĂ«, si dhe izolimi i çdo aplikacioni dhe drejtuari veçmas. PĂ«r izolim pĂ«rdoren si mundĂ«sitĂ« e gjuhĂ«s Rust, ashtu edhe ndarja nĂ« nivelin e mbrojtjes sĂ« memories.
  • Projektet VEKOS (Sistemi Operativ i Verifikuar Eksperimental) zhvillon bĂ«rthamĂ«n e sistemit operativ nĂ« gjuhĂ«n Rust, qĂ« siguron verifikimin e komponenteve nĂ« ekzekutimin. Me çdo operacion nĂ« sistemin e skedarĂ«ve, krijimin e proceseve dhe alokimin e memories, formohet njĂ« konfirmim kriptografik qĂ« lejon verifikimin e operacionit gjatĂ« ekzekutimit (implementimi krahasohet me aplikimin e blockchain pĂ«r verifikimin e veprimeve nĂ« sistemin operativ). NĂ« sistemin e skedarĂ«ve VKFS, pĂ«r tĂ« siguruar integritetin dhe mbrojtjen nga shkatĂ«rrimi pas faktit, pĂ«rdoret struktura 'pemĂ« Merkle' (Merkle Tree), çdo degĂ« e sĂ« cilĂ«s verifikon tĂ« gjitha degĂ«t dhe nyjat poshtĂ« saj, falĂ« hash-it tĂ« pemĂ«s. Alokimi i memories bĂ«het nĂ« modin COW (Copy-On-Write).
  • NjĂ« grup kĂ«rkuesish nga Microsoft dhe Inria po zhvillon njĂ« nĂ«ngrup tĂ« gjuhĂ«s C — Mini-C, e cila Ă«shtĂ« e destinuar pĂ«r transaltim automatik tĂ« programeve nĂ« gjuhĂ«n C nĂ« njĂ« pĂ«rfaqĂ«sim nĂ« gjuhĂ«n Rust. Ndryshe nga kompilatorĂ«t c2rust, projekti i ri lejon gjenerimin e kodit Rust pa pĂ«rdorur unsafe, por Ă«shtĂ« fokusuar kryesisht nĂ« konvertimin e projekteve C qĂ« kanĂ« provimin formal tĂ« besueshmĂ«risĂ«. Supozohet se do tĂ« jetĂ« mĂ« e lehtĂ« fillimisht tĂ« pĂ«rkthehet njĂ« projekt C nĂ« njĂ« pĂ«rfaqĂ«sim nĂ« Mini-C, nĂ« tĂ« cilin nuk lejohen operacione aritmetike me tregues, sesa riprogramimi i blloqeve unsafe pas kompilimit tĂ« drejtpĂ«rdrejtĂ« nga C nĂ« Rust.

    Realizimi i kompilatorit bazohet në mjetet e KaRaMeL. Mini-C është zhvilluar dhe testuar në kuadër të një projekti për rifaktorizimin në Rust të bibliotekës kriptografike HACL*, për të cilën është ofruar një provë formale e besueshmërisë. Një e tillë provë është përdorur për të demonstruar mundësinë e gjenerimit të kodit të sigurt në Rust nga Mini-C.

  • Daniel Stenberg, autori i mjeteve curl, shpalli ndalimin e zhvillimit dhe mbĂ«shtetjes sĂ« projektit Curl, njĂ« backend alternativ HTTP, i shkruar nĂ« Rust duke pĂ«rdorur bibliotekĂ«n Hyper. Si shkak pĂ«r kĂ«tĂ« u pĂ«rmend mungesa e interesit nga zhvilluesit dhe pĂ«rdoruesit.
  • ËshtĂ« njoftuar lançimi i beta versionit tĂ« Shell-it Fish 4.0, tĂ« ri-shkruar nĂ« Rust. Kjo Ă«shtĂ« theksuar se pas dy viteve tĂ« zhvillimit, baza e kodit tĂ« Fish-it Ă«shtĂ« transferuar plotĂ«sisht nga C++ nĂ« Rust. Kalimi nĂ« Rust ndihmoi nĂ« zgjidhjen e problemeve me multithreading, siguroi mjete moderne qĂ« zbulojnĂ« gabime nĂ« fazĂ«n e kompilimit, rriti sigurinĂ« e punĂ«s meMemorinĂ« dhe bĂ«ri projektin mĂ« tĂ«rheqĂ«s pĂ«r zhvilluesit e rinj.
  • Projekti Tor publikoi versionin Arti 1.3.2, njĂ« zbatim alternativ tĂ« klientit Tor nĂ« Rust. Arti ofron njĂ« bibliotekĂ« tĂ« integruar, e cila mund tĂ« pĂ«rdoret nga aplikacione tĂ« ndryshme. GjatĂ« krijimit tĂ« Arti, Ă«shtĂ« marrĂ« parasysh eksperienca e kaluar nĂ« zhvillimin e Tor pĂ«r tĂ« shmangur problemet arkitekturore tĂ« njohura, duke e bĂ«rĂ« projektin mĂ« modular dhe efikas. DegĂ«n 1.x e cila Ă«shtĂ« shĂ«nuar si e pĂ«rshtatshme pĂ«r pĂ«rdoruesit e zakonshĂ«m, ofron tĂ« njĂ«jtin nivel konfidencialiteti, pĂ«rdorshmĂ«rie dhe stabiliteti si implementimi kryesor nĂ« C. NĂ« versionin e ri, Ă«shtĂ« vazhduar zhvillimi i RPC, Ă«shtĂ« pĂ«rgatitur mbĂ«shtetje pĂ«r relays dhe Ă«shtĂ« shtuar mbrojtja nga sulmet DoS nĂ« shĂ«rbimet Onion.
  • ËshtĂ« publikuar versioni i motorit tĂ« lojĂ«rave Bevy 0.15, i shkruar nĂ« Rust. NĂ« motor aplikohet njĂ« model tĂ« dhĂ«nash tĂ« drejtuar (Data Driven) pĂ«r pĂ«rcaktimin e logjikĂ«s sĂ« lojĂ«s, e ndĂ«rtuar mbi njĂ« set komponentesh tĂ« gatshme Bevy ECS (Entity Component System), tĂ« cilat mund tĂ« ekzekutohen paralelisht. MbĂ«shtetet renderimi 2D dhe 3D, animacioni skeletor, pĂ«rcaktimi i grafit tĂ« renderimit, sistemi i formimit tĂ« skenave, kuadri pĂ«r ndĂ«rtimin e ndĂ«rfaqes sĂ« pĂ«rdoruesit, dhe ndryshimet nĂ« skena dhe burime pa pasur nevojĂ« pĂ«r rinisje.
  • ËshtĂ« botuar editori i tekstit nĂ« konsolĂ«n Helix 25.01, i shkruar nĂ« Rust dhe qĂ« zgjerohet mbi idetĂ« qĂ« pĂ«rcaktojnĂ« vim dhe neovim. MbĂ«shtetet integrimi me serverĂ« LSP dhe Tree-sitter, pĂ«rzgjedhja e shumĂ« blloqeve njĂ«herĂ«sh, pĂ«rdorimi i shumĂ« kursoreve gjatĂ« renditjes, temat e dizajnit, protokolli i debug DAP (Debug Adapter Protocol).
  • Motori i shfletuesit Servo, i shkruar nĂ« Rust, ka marrĂ« mbĂ«shtetje pĂ«r modin e errĂ«t. MadhĂ«sia e shfletuesit ServoShell Ă«shtĂ« reduktuar me 20%. MbĂ«shtetje pĂ«r specifikimet web Ă«shtĂ« arritur deri nĂ« mundĂ«sinĂ« e hyrjes dhe leximit tĂ« mesazheve nĂ« Discord (dĂ«rgimi i mesazheve aktualisht nuk Ă«shtĂ« i mundur).
  • Kompania Mozilla ka prezantuar mjetin Uniffi pĂ«r React Native pĂ«r krijimin e moduleve pĂ«r React Native nĂ« gjuhĂ«n Rust.
  • JanĂ« kryer teste pĂ«r performancĂ«n e koduesve tĂ« imazheve nĂ« formatin PNG. Dekoduesit nĂ« Rust (png, zune-png, wuffs) rezultuan mĂ« tĂ« shpejtĂ« se dekoduesit nĂ« C (libpng, spng, stb_image). PĂ«r shembull, paketi crate png (image-rs) e kaloi libpng me 1.8 herĂ« nĂ« sistemin x86 dhe me 1.5 herĂ« nĂ« sistemin ARM. image-rs: 375.401 MP/s (mesatarĂ«) 318.632 MP/s (geomean) zune-png: 376.649 MP/s (mesatarĂ«) 302.529 MP/s (geomean) wuffs: 376.205 MP/s (mesatarĂ«) 287.181 MP/s (geomean) libpng: 208.906 MP/s (mesatarĂ«) 173.034 MP/s (geomean) spng: 299.515 MP/s (mesatarĂ«) 235.495 MP/s (geomean) stb_image: 234.353 MP/s (mesatarĂ«) 171.505 MP/s (geomean)

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster