Rust 1.84 väljalaskmine. Rustis kirjutatud Tock ja Vekos tuumad. Mini-C dialekt

Avaldatud on üldotstarbelise programmeerimiskeele Rust 1.84 versioon, mille on välja töötanud Mozilla projekt, kuid mille arendamine toimub nüüd sõltumatu mittetulundusühingu Rust Foundation ehk Rusti Fondi juures. Keel keskendub mälukaitsele ja pakub tööriistu, et saavutada ülesannete täitmisel kõrge paralleelsus, ilma prügikorjaja ja runtime'i kasutamiseta (runtime piirdub põhialuste algseadistamise ja standardraamatukogu haldamisega).

Rustis olevad mäluhaldusmeetodid vabastavad arendajad probleemidest, mis on seotud osutitega, ning kaitsevad madala taseme mälutöötlusest tulenevate probleemide, nagu vabanenud mälu alale juurdepääs, nullosutite de-referentseerimine, mälupiiride ületamine jne. Raamatukogude levitamiseks, projekti koostamise ja sõltuvuste haldamiseks arendatakse pakihaldurit Cargo. Raamatukogude paigutamiseks toetatakse repo crates.io.

Rust tagab turvalise mälutöötluse kompilatsiooni ajal, kontrollides viiteid, jälgides objektide omandit, arvestades objektide elutsüklit (nähtavust) ja hinnates mälule juurdepääsu õigsust koodi käitamise ajal. Rust pakub ka meetmeid enamike täisarvude ületamiste vältimiseks, nõuab muutujate väärtuste algväärtustamist enne kasutamist, käsitleb vigasid paremini oma standardraamatukogus, rakendab immutamatuse (immutable) kontseptsiooni viidetes ja muutujates vaikimisi ning pakub tugevat staatilist tüüpimist loogiliste vigade minimeerimiseks.

Põhilised uuendused:

  • Cargo paketihalduris on stabiliseeritud sõltuvuste töötlemise mehhanism, mis valib sõltuvate komponentide versioonid, arvestades Rusti kompilaatori versioonide ühilduvust, mis on projekti poolt deklareeritud kui minimaalne toetatav versioon (MSRV, Minimum Supported Rust Version). Uus funktsionaalsus vabastab haldajad vajadusest käsitsi valida iga sõltuvuse vanu versioone projektides, mis säilitavad ühilduvuse vanade Rusti tööriistade versioonidega. Uus sõltuvuste määratlemise režiim aktiveeritakse vaikimisi Rust 1.85 väljaandes, kuid on juba praegu saadaval valikuna. Selle aktiveerimiseks tuleks faili '.cargo/config.toml' sektsiooni '[resolver]' lisada 'incompatible-rust-versions = "fallback"'.
  • Algasime kompilaatori tõlkimise uue tüübi töötleja (trait solver) peale, mis on mõeldud tüübi rakendamise piire, tüübi normaliseerimist ja tüüpide ühilduvuse hindamist kontrollima. Versioonis 1.84 on uus töötleja kaasatud tüübivormide rakenduste järjepidevuse kontrollimisse, st hinnates, kas antud tüübile arvesse võetud koodist teiste crate-pakettide kontekstis on olemas rohkem kui üks tüüp. See kontroll aitas lahendada probleeme vana tüübi töötleja rakenduses, mis võivad potentsiaalselt põhjustada konflikte erinevate tüübivormide rakenduste ristumiste tõttu.
  • Pakutud uus API „Strict Provenance”, mida saab kasutada näitaja teisendamiseks täisarvuks ja tagasi, arvestades näitajaga seotud metaandmeid, mis sisaldavad teavet selle päritolu ja kasutusala kohta (näitaja aadressile on lisatud „provenance” väärtus, mis sisaldab teavet seoste kohta teiste näitajatega, mis võimaldab määrata, kus ja millal näitaja võib mälu juurde pääseda). Näitaja teisendamisel täisarvuks ja tagasi tekib määramatus, kuna tulemuse näitaja päritolu jälgimine on problemaatiline. Uus API võimaldab teha madalama taseme toiminguid näitajatega, nagu näiteks täiendava teabe salvestamine näitaja madalamates bittides, ilma näitaja muutmata täisarvuks.
  • Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tüüpide rakendused:
    • Ipv6Addr::is_unique_local
    • Ipv6Addr::is_unicast_link_local
    • core::ptr::with_exposed_provenance
    • core::ptr::with_exposed_provenance_mut
    • <ptr>::addr
    • <ptr>::expose_provenance
    • <ptr>::with_addr
    • <ptr>::map_addr
    • <int>::isqrt
    • <int>::checked_isqrt
    • <uint>::isqrt
    • NonZero::isqrt
    • core::ptr::without_provenance
    • core::ptr::without_provenance_mut
    • core::ptr::dangling
    • core::ptr::dangling_mut
    • Pin::as_deref_mut
  • Märkus 'const' rakendatud funktsioonides:
    • 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
  • Toetatud on inline-assembleri sisestuste stabiilsus arhitektuuridele s390x ja Arm64EC.
  • WebAssembly sihtplatvormi jaoks on multivalue, reference-types ja tail-call funktsionaalsuse tugi stabiilne.
  • Rakendatud on teine tase wasm32v1-none platvormi toeks. Teine tase tagab ehituse garantiid.

Samuti võib märkida mitmeid Rustiga seotud projekte:

  • Avaldatud on Tock 2.2 operatsioonisüsteemi versioon, mis on kirjutatud Rusti keeles ja eesmärgiks on seda kasutada mikrokontrollerites. Süsteem võimaldab samaaegset mitme usaldusväärse rakenduse käivitamist kaasaskantavates seadmetes, millel on piiratud RAM-i suurus, näiteks andurid, TPM (Trusted Platform Module), autentimisseadmed ja kantavad seadmed. Toetatakse ARM Cortex-M ja RISC-V arhitektuuril põhinevaid mikrokontrollereid. Tock'i peamine omadus on rakenduste, kernel'i ja draiverite tasemete isoleerimine, samuti iga rakenduse ja draiveri eraldi isoleerimine. Isoleerimist teostatakse nii Rusti keele võimaluste kui ka mälu kaitse taseme jagamise kaudu.
  • VEKOS (Verified Experimental Kernel OS) projekt arendab operatsioonisüsteemi tuuma Rusti keeles, tagades teostatavate komponentide verifitseerimise. Iga kord, kui toiminguid faili süsteemis, protsessi loomisel ja mälu jaotamisel, luuakse krüptograafiline tõend, mis võimaldab toimingut täitmise ajal verifitseerida (rakendamine sarnaneb plokiahela kasutamisega verifitseerimise jaoks operatsioonisüsteemis). VKFS failisüsteemis kasutatakse tagasiulatuva moonutamise kaitseks ja terviklikkuse tagamiseks „Merkle puu“ struktuuri, kus iga oks verifitseerib kõik ülemised oksad ja sõlmed, tänu puu struktuuri häšhimisele. Mälu jaotamine toimub COW (Copy-On-Write) režiimis.
  • Microsofti ja Inria teadlaste grupp arendab C keele alakomplekti — Mini-C, mis on mõeldud C keeles kirjutatud programmide automaatseks tõlkimiseks Rust keeles esitamiseks. Erinevalt c2rust kompilaatorist võimaldab uus projekt genereerida Rust koodi ilma unsafe kasutamata, kuid keskendub peamiselt C projektide teisendamisele, millel on formaalne usaldusväärsuse tõend. Oletatakse, et C projekti Mini-C esitusse tõlkimine, millel ei lubata pointeritega seotud aritmeetilisi tehteid, on lihtsam, kui unsafe plokkide ümberkirjutamine otse C-st Rusti.

    Kompilaatori rakendamine põhineb KaRaMeL tööriistade komplektil. Mini-C on välja töötatud ja testitud Rustile kirjutamise projekti raames, kus on tõendatud krüptograafilise HACL* teegi usaldusväärsus. Sarnast tõendit on kasutatud Mini-C-st ohutu koodi genereerimise võimaluse demonstreerimiseks Rusti keeles.

  • Daniel Stenberg, curl'i arendaja, kuulutas välja Curl'i alternatiivse HTTP-tagaosa arendamise ja toe lõpetamise, mis on kirjutatud Rustis ja kasutab Hyper'i teeki. Põhjuseks on arendajate ja kasutajate huvi puudumine.
  • Käivitati Fish'i 4.0 versiooni beetavälja, mis on ümber kirjutatud Rust keeles. Pärast kaheaastast arendust on Fish'i koodibaas täielikult muudetud C++-st Rust'i. Üleminek Rust'ile lahendas mitme lõime probleemid, pakkus kaasaegset tööriistade kogumit, mis tuvastab vigu kompileerimise etapis, suurendas mälu kasutamise turvalisust ning tegi projekti atraktiivsemaks uutele arendajatele.
  • Tor projekti avaldas Arti 1.3.2, alternatiivse Tor-kliendi rakenduse Rusti keeles. Arti pakub kaasatud teeki, mida saavad kasutada erinevad rakendused. Arti loomisel on arvestatud varasema Tor'i arenduse kogemustega, et vältida tuntud arhitektuuri probleeme, muuta projekt modulaarses ja tõhusamaks. 1.x haru on märgitud sobilikuks tavalistele kasutajatele ning tagab sama taseme konfidentsiaalsust, kasutusmugavust ja stabiilsust nagu peamine rakendus C keeles. Uues versioonis jätkub RPC arendamine, valmistatakse ette toe rakendamine relee jaoks ja lisatakse kaitse DoS-rünnakute eest Onion-teenustele.
  • Avaldatud on Bevy 0.15 mängumootori versioon, mis on kirjutatud Rust keeles. Mootoris kasutatakse andmekeskusele keskendunud mudelit (Data Driven) mänguloogika määratlemiseks, mis on üles ehitatud Bevy ECS (Entity Component System) komplekti valmis komponentide põhjal, mida saab paralleelselt töödelda. Toetatakse 2D ja 3D renderdamist, luustiku animatsiooni, renderdamise graafiku määratlemist, stseenide loomise süsteemi, kasutajaliidese ehitamise raamistikku ning stseenide ja ressursside muutmist ilma taaskäivitamiseta.
  • Avaldatud on käsurea tekstiredaktor Helix 25.01, mis on kirjutatud Rust keeles ja laiendab ideid, mis on välja kujunenud vim ja neovim. Toetatakse LSP-serveritega integreerimist ning Tree-sitterit, mitme ploki samaaegset esiletõstmist, mitme kursoriga redigeerimist, kujundusteemasid ja tõrkekohandamise protokolli DAP (Debug Adapter Protocol).
  • Rust keeles kirjutatud brauserimootorisse Servo on lisatud tumeda režiimi toetamine. ServoShelli suurust on vähendatud 20%. Web-spetsiifikatsioonide toetus on viidud selleni, et nüüd on võimalik siseneda ja lugeda sõnumeid Discordis (sõnumite saatmine ei ole veel võimalik).
  • Mozilla esitles Uniffi for React Native tööriista, et luua Rusti keeles React Native'i mooduleid.
  • Tehti PNG-formaadiga piltide kodeerijate jõudlustest. Rusti dekodeerijad (png, zune-png, wuffs) osutusid kiiremateks kui C keele dekodeerijad (libpng, spng, stb_image). Näiteks pakk png (image-rs) ületas libpng 1,8 korda x86-süsteemil ja 1,5 korda ARM-süsteemil. image-rs: 375.401 MP/s (keskmine) 318.632 MP/s (geomees) zune-png: 376.649 MP/s (keskmine) 302.529 MP/s (geomees) wuffs: 376.205 MP/s (keskmine) 287.181 MP/s (geomees) libpng: 208.906 MP/s (keskmine) 173.034 MP/s (geomees) spng: 299.515 MP/s (keskmine) 235.495 MP/s (geomees) stb_image: 234.353 MP/s (keskmine) 171.505 MP/s (geomees)

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster