Utgivning av Rust 1.86. Förberedelse av den officiella specifikationen för sprÄket Rust

Det har publicerats en ny version av det allmÀnna programmeringssprÄket Rust 1.86, som ursprungligen utvecklades av Mozilla men nu vidareutvecklas under den oberoende, ideella organisationen Rust Foundation. SprÄket fokuserar pÄ sÀker minneshantering och erbjuder verktyg för att uppnÄ hög parallellism i uppgiftsutförande, utan att behöva anvÀnda en skrÀpare och runtime (runtime begrÀnsas till grundlÀggande initialisering och stöd för 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:

  • Stöd för uppcasting av trait-typer till grundlĂ€ggande supertrait har lagts till, vilket innebĂ€r att det nu Ă€r möjligt att omvandla en referens till ett trait-objekt direkt till en referens till ett supertrait-objekt utan att behöva skapa en specifik metod i traitet som returnerar en referens till supertraitet. En liknande operation kan ocksĂ„ utföras med andra typer av smarta pekare, till exempel "Arc<dyn Trait> -> Arc<dyn Supertrait>" och "*const dyn Trait -> *const dyn Supertrait". trait Trait: Supertrait {} trait Supertrait {} fn upcast(x: &dyn Trait) -> &dyn Supertrait { x }
  • En ny metod, get_disjoint_mut(), har lagts till i HashMap och skivor (slice) för att simultant fĂ„ flera Ă€ndringsbara referenser till element. Tidigare tillĂ€t inte lĂ„ne-checkern samtidiga anvĂ€ndningar av referenser som erhölls via metoden get_mut(). let v = &mut [1, 2, 3]; if let Ok([a, b]) = v.get_disjoint_mut([0, 2]) { *a = 413; *b = 612; } assert_eq!(v, &[413, 2, 612]); if let Ok([a, b]) = v.get_disjoint_mut([0..1, 1..3]) { a[0] = 8; b[0] = 88; b[1] = 888; } assert_eq!(v, &[8, 88, 888]);
  • Det har blivit tillĂ„tet att mĂ€rkta safe-funktioner med attributet "#[target_feature]", som anger att funktionen anvĂ€nder angivna CPU-funktioner. En safe-funktion, som Ă€r mĂ€rkt med attributet "#[target_feature]", kan endast sĂ€kert anropas av en annan safe-funktion om den ocksĂ„ Ă€r mĂ€rkt med "#[target_feature]" (annars mĂ„ste sĂ„dana funktioner anropas i en unsafe-block). De kan inte överföras till funktioner som accepterar generiska parametrar som begrĂ€nsas av trait Fn*. Tidigare kunde attributet "#[target_feature]" endast tillĂ€mpas pĂ„ funktioner mĂ€rkta som "unsafe". #[target_feature(enable = "avx2")] fn requires_avx2() { // 
 } #[target_feature(enable = "avx2")] fn safe_callsite() { requires_avx2(); } fn unsafe_callsite() { if is_x86_feature_detected!("avx2") { unsafe { requires_avx2() }; } }
  • I Rust-kompilatorn Ă€r debug-assertions aktiverade, vilket innebĂ€r att pekaren inte fĂ„r vara null vid lĂ€sning och skrivning av icke-noll storlekar, samt vid Ă„terlĂ„n (reborrow) av pekaren till en referens. Till exempel, nĂ€r debug-assertions Ă€r aktiverade kommer nedanstĂ„ende kod nu att leda till ett "panic": let _x = *std::ptr::null::(); let _x = &*std::ptr::null::();
  • Som standard Ă€r lint-checken "missing_abi" aktiverad, vilket resulterar i en varning om ABI inte anges efter nyckelordet extern. Tidigare antogs det att ABI "C" anvĂ€ndes om none ABI angavs efter extern. Det rekommenderas nu att tydligt ange ABI "C", till exempel ‘extern "C" {}’ och ‘extern "C" fn’
  • En ny uppsĂ€ttning API har blivit stabiliserad, inklusive stabilisering av metoder och implementeringar av traits:
    • {float}::next_down
    • {float}::next_up
    • ::get_disjoint_mut
    • ::get_disjoint_unchecked_mut
    • slice::GetDisjointMutError
    • HashMap::get_disjoint_mut
    • HashMap::get_disjoint_unchecked_mut
    • NonZero::count_ones
    • Vec::pop_if
    • sync::Once::wait
    • sync::Once::wait_force
    • sync::OnceLock::wait
  • Indikatorn "const" har tillĂ€mpats i funktioner:
    • hint::black_box
    • io::Cursor::get_mut
    • io::Cursor::set_position
    • str::is_char_boundary
    • str::split_at
    • str::split_at_checked
    • str::split_at_mut
    • str::split_at_mut_checked
  • Det har lagts till ett tredje nivĂ„ av stöd för plattformar {aarch64-unknown,x86_64-pc}-nto-qnx710_iosock, {aarch64-unknown,x86_64-pc}-nto-qnx800, {x86_64,i686}-win7-windows-gnu, amdgcn-amd-amdhsa, x86_64-pc-cygwin, {mips,mipsel}-mti-none-elf, m68k-unknown-none-elf, armv7a-nuttx-{eabi,eabihf}, aarch64-unknown-nuttx och thumbv7a-nuttx-{eabi,eabihf}. Den tredje nivĂ„n innebĂ€r grundlĂ€ggande stöd, men utan automatiserade tester, publicering av officiella byggen och verifiering av byggbarhet av koden.
  • En varning har lagts till om att det andra nivĂ„n av stöd för mĂ„lplattformen i586-pc-windows-msvc kommer att upphöra i nĂ€sta version (1.87). Det rekommenderas att anvĂ€nda plattformen i686-pc-windows-msvc, som erbjuder stöd för SSE2-instruktioner. Plattformen i586-pc-windows-msvc har förlorat sin relevans, eftersom stöd för SSE2 krĂ€vs för Windows 10, och Ă€ldre versioner av Windows stöds inte lĂ€ngre i Rust.

Det bör Ă€ven nĂ€mnas att företaget Ferrocene har överlĂ€mnat sprĂ„kets specifikation för Rust (FLS — Ferrocene Language Specification) till samhĂ€llet, vilken skapades under utvecklingen av sitt Rust-kompilator för kritiska system och som periodiskt uppdateras med aktuell status av den primĂ€ra Rust-kompilatorn. FLS-specifikationen innehĂ„ller en strukturerad och detaljerad vĂ€gledning om syntax, semantik och beteende för Rust, vilket Ă€r lĂ€mpligt för verifiering, bedömning av kompatibilitet och standardisering.

De överlÀmnade material kommer att anvÀndas för att skapa en referensspecifikation för programmeringssprÄket Rust, vilket kan anvÀndas vid utveckling av alternativa kompilatorer och för att verifiera kompilatorn inom omrÄden som Àr kritiska ur sÀkerhetssynpunkt.

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