Rust 1.93 har slÀppts. Projekten Rex, Fjall 3 och Arti 1.9.0

SlÀppet av programmeringssprÄket Rust 1.93 har publicerats, som ursprungligen skapades av Mozilla men numera utvecklas under beskydd av den oberoende icke-vinstdrivande organisationen Rust Foundation. SprÄket fokuserar pÄ sÀker minneshantering och erbjuder medel för att uppnÄ hög parallellism vid körning av uppgifter, utan att anvÀnda en skrÀpsamlare och runtime (runtime begrÀnsas till grundlÀggande initialisering och underhÄll av standardbiblioteket).

Minneshanteringsmetoderna i Rust skyddar utvecklare frÄn att göra fel vid manipulering av pekare och skyddar mot problem som uppstÄr vid lÄg nivÄ minnesarbete, sÄsom att komma Ät minnesomrÄden efter att de har frigjorts, dereferera nullpekare, buffer overflow, etc. För distribution av bibliotek, byggande och hantering av projektberoenden utvecklas paketförvaltaren Cargo. För lagring av bibliotek stöds ett repository pÄ crates.io.

SÀker minneshantering sÀkerstÀlls i Rust under kompilering genom att kontrollera referenser, spÄra Àgandeskap över objekt, ta hÀnsyn till livslÀngden av objekt (synlighet) och utvÀrdera korrekt minnesÄtkomst under körning av koden. Rust erbjuder ocksÄ verktyg för att skydda mot heltalsöverflöden, krÀver obligatorisk initialisering av variabelvÀrden innan de anvÀnds, hanterar fel bÀttre i standardbiblioteket, tillÀmpar konceptet av oförÀnderliga (immutable) referenser och variabler som standard och erbjuder stark statisk typning för att minimera logiska fel.

Huvudsakliga nyheter:

  • Den inbyggda standard C-biblioteket Musl, som anvĂ€nds vid statisk lĂ€nkning för mĂ„lplattformarna "*-linux-musl" (aarch64-unknown-linux-musl, x86_64-unknown-linux-musl, powerpc64le-unknown-linux-musl osv.) pĂ„ system utan Musl, har uppgraderats till version 1.2.5. Den minimalt stödja versionen av Musl för dynamisk lĂ€nkning har ocksĂ„ höjts till utgĂ„van 1.2.5. Tidigare anvĂ€ndes version 1.2.3 av Musl i Rust, dĂ€r det fanns problem med DNS-resolver implementeringen. I version 1.2.4 av Musl lades möjligheten till att skicka förfrĂ„gningar över TCP till DNS-resolvern in vid misslyckande av UDP-anrop, vilket löste problemet med förfrĂ„gningar av stora DNS-poster och förbĂ€ttrade kompatibiliteten med rekursiva DNS-servrar som inte stödjer delresultat i trunkerade UDP-svar. I version 1.2.5 av Musl har hanteringen av svar med lĂ„nga CNAME-sekvenser implementerats i DNS-resolver och problemet dĂ€r vissa stora svar avvisades, överförda via TCP, har lösts.
  • Standardbiblioteket har omarbetats för att lösa problem med reentransibilitet nĂ€r det anvĂ€nds i globala minnesallokerare skrivna i Rust, makrot std::thread_local! och funktionen std::thread::current, vilket ledde till oĂ€ndlig rekursion. För att undvika situationen dĂ€r std::thread_local! och std::thread::current vid försök till minnesallokering anvĂ€nde samma allokerare som de anvĂ€nde, tillĂ€mpas nu direkt det systemiska minnesallokeringsmekanismen.
  • Inom «asm!» blockar med assemblerkod Ă€r det tillĂ„tet att anvĂ€nda attributet «cfg», vilket exempelvis möjliggör hantering av aktivering av avancerade CPU-instruktionsuppsĂ€ttningar inom ramen för specifika uttryck i ett asm-block (tidigare kunde attributen «cfg» endast anges för hela asm-blocket). asm!( // eller global_asm! eller naked_asm! «nop», #[cfg(target_feature = «sse2»)] «nop», // 
 #[cfg(target_feature = «sse2»)] a = const 123, // anvĂ€nds endast pĂ„ sse2 );
  • En ny uppsĂ€ttning API har blivit stabiliserad, inklusive stabilisering av metoder och implementeringar av traits:
    • <[MaybeUninit]>::assume_init_drop
    • <[MaybeUninit]>::assume_init_ref
    • <[MaybeUninit]>::assume_init_mut
    • <[MaybeUninit]>::write_copy_of_slice
    • <[MaybeUninit]>::write_clone_of_slice
    • String::into_raw_parts
    • Vec::into_raw_parts
    • ::unchecked_neg
    • ::unchecked_shl
    • ::unchecked_shr
    • ::unchecked_shl
    • ::unchecked_shr
    • ::as_array
    • ::as_array_mut
    • ::as_array
    • ::as_mut_array
    • VecDeque::pop_front_if
    • VecDeque::pop_back_if
    • Duration::from_nanos_u128
    • char::MAX_LEN_UTF8
    • char::MAX_LEN_UTF16
    • std::fmt::from_fn
    • std::fmt::FromFn
  • MĂ„lplattformen «riscv64a23-unknown-linux-gnu» har nĂ„tt andra stödnivĂ„n, vilket innebĂ€r att bygggarantier finns, men inga garantier för att klara testsviten.

Det kan Àven nÀmnas flera relaterade projekt med Rust:

  • För Linux-kĂ€rnan utvecklas ramverket Rex, som möjliggör skapandet av tillĂ€gg för Linux-kĂ€rnan pĂ„ Rust-sprĂ„ket, vilket kan anvĂ€ndas för att utöka kĂ€rnans funktionalitet istĂ€llet för eBPF. Rex erbjuder samma sĂ€kerhetsgarantier som eBPF, men anvĂ€nder Rust-sprĂ„kets och ett lĂ€ttviktigt runtime:s kapabiliteter för isolering och sĂ€kerhet. För sĂ„dana program tillĂ€mpas ingen verifierare, och programmen kompileras till nativ kod av Rust-kompilatorn.

    I Rex-program tillÄts anvÀndning av en delmÀngd av Rust-sprÄket som erbjuder sÀkerhetsgarantier. För nÀrvarande stöds 5 typer av eBPF-program: kprobe, perf_event, tracepoint, xdp och tc. Det finns möjlighet att anropa hjÀlpfunktioner för eBPF, interagera med map-strukturer i eBPF, hantera kÀrnresurser, hantera undantag och anvÀnda bindningar och abstraktioner över kÀrnstrukturer.

  • En ny version av Fjall 3, ett inbĂ€ddat lagringssystem skrivet i Rust som arbetar med data i nyckel-vĂ€rde-format, Ă€r tillgĂ€nglig. Datainlagring sker i form av en logg med en anvĂ€ndning av LSM-trĂ€d (Log-Structured-Merge), liknande RocksDB, dĂ€r Ă€ndringar skrivs genom att tillĂ€gga data i slutet av filen. Ett API i stil med BTreeMap erbjuds för att interagera med databasen. Funktioner som namnrymder, direkt och omvĂ€nd sökning inom intervall, inbyggd komprimering, serialiserbara transaktioner, separat lagring av nycklar och dĂ€rtill kopplade mycket stora vĂ€rden, samt automatisk bakgrundsunderhĂ„ll av databasen stöds.
  • Tor-projektet har lanserat version 1.9.0 av Arti, en implementation av Tor-verktyget skrivet i Rust. NĂ€r Arti-koden nĂ„r en nivĂ„ som helt kan ersĂ€tta C-versionen av Tor, planerar Tor-utvecklarna att ge Arti status som den primĂ€ra implementationen av Tor och gradvis sluta stödja C-versionen. I den nya versionen har funktionaliteten för relĂ€er och servrar directories (Directory Authority) förbĂ€ttrats, med bĂ€ttre stöd för dynamiskt tilldelade portar (proxy.socks_listen = "auto") och en experimentell API för att hantera nycklar för onion-tjĂ€nster har lagts till.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster