Udgivelse af Rust 1.84. Tock- og Vekos-kerner, skrevet i Rust. Mini-C-dialekt

Udgivelsen af programmeringssproget Rust 1.84, oprindeligt udviklet af Mozilla, men nu videreudviklet under tilsyn af den uafhængige, non-profit organisation Rust Foundation, er offentliggjort. Sproget fokuserer på sikker hukommelsesstyring og giver værktøjer til at opnå høj parallelitet i opgaveudførelsen, samtidig med at det undgår brugen af en garbage collector og runtime (runtime reduceres til grundlæggende initialisering og vedligeholdelse af standardbiblioteket).

Metoder til hukommelsesarbejde i Rust befrier udviklere fra fejl ved manipulation af pekere og beskytter mod problemer, der opstår ved lavniveau håndtering af hukommelse, såsom adgang til hukommelsesområder efter frigivelse, dereferering af nulpekere, buffer-overløb osv. For distribution af biblioteker, byggeprocesser og afhængighedsstyring udvikles pakkehåndteringssystemet Cargo. For opbevaring af biblioteker understøttes repository'et crates.io.

Sikker håndtering af hukommelse sikres i Rust under kompilering ved referencekontrol, sporing af ejerskab af objekter, hensyntagen til livstid af objekter (synlighed) og vurdering af korrekt adgang til hukommelse under kodeudførelse. Rust tilbyder også midler til beskyttelse mod heltals-overløb, kræver obligatorisk initialisering af variabelværdier før brug, håndterer fejl bedre i standardbiblioteket, anvender konceptet med uforanderlige (immutable) referencer og variabler som standard og tilbyder stærk statisk typisering for at minimere logiske fejl.

Hovednyhederne:

  • I pakkehåndtereren Cargo er mekanismen til håndtering af afhængigheder stabiliseret, og vælger versioner af afhængige komponenter med hensyn til kompatibilitet med versionerne af Rust-kompilatoren, der er angivet som minimalt understøttede af projektet (MSRV, Minimum Supported Rust Version). Den nye funktion gør det unødvendigt for vedligeholdere at vælge gamle versioner af hver afhængighed manuelt i projekter, der opretholder kompatibilitet med ældre versioner af Rust-værktøjerne. Den nye afhængighedsbestemmelsesmode vil som standard være aktiv i Rust 1.85-udgivelsen, men er nu tilgængelig som en mulighed, som kan aktiveres i sektionen '[resolver]' i filen '.cargo/config.toml' ved at angive 'incompatible-rust-versions = "fallback"'.
  • Oversættelsen af compileren til en ny trait behandler (trait solver) er påbegyndt, designet til at kontrollere anvendelighedsgrænser for trait, normalisere typer og vurdere typekompatibilitet. I version 1.84 er den nye behandler blevet anvendt til at kontrollere konsistensen i implementeringen af traits, dvs. vurdere eksisterende implementeringer af højst én trait for den betragtede type i forhold til koden fra andre crate-pakker. Den nævnte kontrol gjorde det muligt at undgå problemer i den gamle implementering af trait-behandleren, som potentielt kunne føre til konflikter på grund af overlapning af forskellige trait-implementeringer.
  • En ny API "Strict Provenance" er blevet foreslået, som kan bruges til at konvertere en pointer til et helt tal og tilbage med hensyntagen til de metadata, der er knyttet til pointeren, med information om dens oprindelse og anvendelsesområde (udover adressen til pointeren er værdien "provenance" knyttet med information om forbindelser til andre pointere, hvilket gør det muligt at bestemme, hvor og hvornår pointeren kan få adgang til hukommelsen). Ved konvertering af pointeren til et helt tal og tilbage opstår der ubestemte adfærd på grund af vanskelighederne ved at spore oprindelsen af den resulterende pointer. Den nye API muliggør lavniveauoperationer med pointere, såsom at gemme yderligere information i de lavere bits af pointeren uden at konvertere pointeren til et helt tal.
  • En ny batch af API'er er blevet klassificeret som stabile, herunder stabilisering af metoder og implementeringer af traits:
    • 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
  • Flagget «const» anvendt i funktionerne:
    • 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
  • Støtte til inline assembly-injektion er stabiliseret for arkitekturerne s390x og Arm64EC.
  • For målsplatformen WebAssembly er der stabiliseret støtte til funktionerne multivalue, reference-types og tail-call.
  • Anden niveau af support for platformen wasm32v1-none er implementeret. Andet niveau af support indebærer garantien for kompilering.

Derudover kan flere projekter relateret til Rust nævnes:

  • Der er blevet udgivet en version af operativsystemet Tock 2.2, skrevet i Rust og designet til brug i mikrocontrollere. Systemet muliggør samtidig kørsel af flere upålidelige applikationer på indlejrede enheder med begrænset RAM-størrelse, såsom sensorer, TPM (Trusted Platform Module), autentificeringsnøgler og wearable-enheder. Der støttes platforme med mikrocontrollere baseret på ARM Cortex-M- og RISC-V-arkitekturer. En nøglefunktion ved Tock er isoleringen af applikationslag, kerne og driverlag samt isoleringen af hver applikation og driver individuelt. Isoleringen udnyttter både Rust-sprogfunktionaliteter og opdeling på beskyttelsesniveau.
  • VEKOS-projektet (Verified Experimental Kernel OS) udvikler en kerne til operativsystemet skrevet i Rust, der sikrer verifikation af de udførte komponenter. Ved hver operation med filsystemet, oprettelse af processer og tildeling af hukommelse genereres der en kryptografisk bekræftelse, der muliggør verifikation af operationen under udførelsen (implementeringen sammenlignes med brugen af blockchain til verifikation af handlinger i operativsystemet). I filsystemet VKFS er der taget højde for integritet og beskyttelse mod tilbagevirkende ændringer ved hjælp af en
  • En gruppe forskere fra Microsoft og Inria udvikler en underafdeling af C-sproget — Mini-C, der er designet til automatisk at oversætte C-programmer til en repræsentation i Rust. I modsætning til c2rust-kompilatoren muliggør det nye projekt at generere Rust-kode uden brug af unsafe, men er primært målrettet mod at konvertere C-projekter, der har et formelt sikkerhedsbevis. Det antages, at det vil være lettere først at oversætte et C-projekt til en repræsentation i Mini-C, hvor aritmetiske operationer med pointere ikke er tilladt, end at omskrive unsafe-blokke efter direkte kompilering fra C til Rust.

    Implementeringen af compilatoren er baseret på værktøjet KaRaMeL. Mini-C er udviklet og testet inden for projektet om at omskrive den kryptografiske bibliotek HACL* til Rust, for hvilket der er leveret en formel pålidelighedsgaranti. Denne garanti blev anvendt til at demonstrere muligheden for at generere sikker kode på Rust fra Mini-C.

  • Daniel Stenberg, skaberen af værktøjet curl, har annonceret stoppet for udviklingen og støtten til Curl-projektets alternative HTTP-backend, skrevet i Rust med brug af Hyper-biblioteket. Årsagen er angivet som mangel på interesse fra udviklerne og brugerne.
  • Beta-udgaven af shell'en Fish 4.0, omskrevet i Rust, er blevet annonceret. Det bemærkes, at efter to års udvikling er kodebasen for Fish blevet fuldstændig oversat fra C++ til Rust. Overgangen til Rust har løst problemer med multitråding, givet moderne værktøjer til fejlfinding på kompileringstidspunktet, forbedret sikkerheden ved hukommelseshåndtering og gjort projektet mere attraktivt for nye udviklere.
  • Tor-projektet har offentliggjort version 1.3.2 af Arti, en alternativ implementering af Tor-klienten i Rust. Arti tilbyder et indlejret bibliotek, som forskellige applikationer kan bruge. Ved udviklingen af Arti er tidligere erfaringer fra udviklingen af Tor taget i betragtning for at undgå kendte arkitektoniske problemer, gøre projektet mere modulært og effektivt. Version 1.x er markeret som brugbar for almindelige brugere og giver samme niveau af fortrolighed, brugervenlighed og stabilitet som den primære implementering i C. I den nye version fortsættes udviklingen af RPC, forberedelsen af understøttelse til relæer er blevet gennemført, og beskyttelse mod DoS-angreb på Onion-tjenester er blevet tilføjet.
  • Version 0.15 af spilmotoren Bevy, skrevet i Rust, er blevet offentliggjort. Motoren anvender en datadrevet model til at definere spilogikken, bygget på et sæt færdige komponenter fra Bevy ECS (Entity Component System), som kan udføres parallelt. 2D og 3D rendering, skeletanimation, oprettelse af renderingsgrænsefladen, system til sceneopbygning og ændring af scener og ressourcer uden behov for genstart understøttes.
  • Den konsolbaserede teksteditor Helix 25.01, skrevet i Rust, er nu offentliggjort og bygger videre på de ideer, der er lagt i vim og neovim. Integration med LSP-servere og Tree-sitter understøttes, samtidig med at man kan markere flere blokke og bruge flere markører under redigering, samt temaer til styling og DAP (Debug Adapter Protocol) til debug-protokol.
  • Den browserbaserede motor Servo, skrevet i Rust, har fået tilføjet understøttelse af mørk tilstand. Størrelsen på browseren ServoShell er reduceret med 20%. Understøttelse af web-specifikationer er forbedret til at muliggøre indlæsning og læsning af beskeder i Discord (det er endnu ikke muligt at sende beskeder).
  • Mozilla har præsenteret værktøjet Uniffi for React Native til at oprette moduler til React Native på sproget Rust.
  • Der er gennemført ydeevnetest af billedkodere i PNG-format. Dekodere skrevet i Rust (png, zune-png, wuffs) viste sig at være hurtigere end dem skrevet i C (libpng, spng, stb_image). For eksempel overgik crate-pakken png (image-rs) libpng med en faktor på 1,8 på x86-systemer og 1,5 på ARM-systemer. image-rs: 375.401 MP/s (gennemsnit) 318.632 MP/s (geomean) zune-png: 376.649 MP/s (gennemsnit) 302.529 MP/s (geomean) wuffs: 376.205 MP/s (gennemsnit) 287.181 MP/s (geomean) libpng: 208.906 MP/s (gennemsnit) 173.034 MP/s (geomean) spng: 299.515 MP/s (gennemsnit) 235.495 MP/s (geomean) stb_image: 234.353 MP/s (gennemsnit) 171.505 MP/s (geomean)

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster