Lëshimi i Rust 1.86. Përgatitja e specifikacionit zyrtar të gjuhës Rust

U publikua versioni i gjuhës së programimit të përgjithshëm Rust 1.86, e bazuar në projektin Mozilla, por tani në zhvillim nën mbikëqyrjen e organizatës së pavarur jofitimprurëse Rust Foundation. Gjuha përqendrohet në sigurinë e punës me kujtesën dhe ofron mjete për arritjen e një paralelizmi të lartë të ekzekutimit të detyrave, pa përdorur mbledhës mbeturinash dhe runtime (runtime reduktohet në inicializimin e bazës dhe mirëmbajtjen e 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:

  • Shtuar mbĂ«shtetje pĂ«r ngritjen (upcast) tĂ« trait-eve nĂ« supertrait-in bazĂ«, dmth, Ă«shtĂ« bĂ«rĂ« e mundur tĂ« konvertohet direkt njĂ« referencĂ« ndaj njĂ« objekti trait nĂ« njĂ« referencĂ« ndaj njĂ« objekti supertrait pa nevojĂ«n pĂ«r tĂ« krijuar njĂ« metodĂ« speciale nĂ« trait, qĂ« ktheu njĂ« referencĂ« nĂ« supertrait. NjĂ« operacion tĂ« ngjashĂ«m mund tĂ« kryhet edhe me lloje tĂ« tjera tĂ« treguesve inteligjentĂ«, pĂ«r shembull, "Arc<dyn Trait> -> Arc<dyn Supertrait>" dhe "*const dyn Trait -> *const dyn Supertrait". trait Trait: Supertrait {} trait Supertrait {} fn upcast(x: &dyn Trait) -> &dyn Supertrait { x }
  • NĂ« HashMap dhe slice Ă«shtĂ« shtuar metoda get_disjoint_mut() pĂ«r tĂ« marrĂ« njĂ«kohĂ«sisht disa referenca tĂ« ndryshueshme ndaj elementeve. MĂ« parĂ«, kontrolluesi i huazimit nuk lejonte pĂ«rdorimin e njĂ«kohshĂ«m tĂ« referencave tĂ« marra pĂ«rmes metodĂ«s 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]);
  • Èshte lejuar tĂ« shĂ«nohen funksionet safe me atribute "#[target_feature]", qĂ« tregon se funksioni pĂ«rdor tiparet e caktuara tĂ« CPU-sĂ«. NjĂ« funksion safe, i shĂ«nuar me atributin "#[target_feature]", mund tĂ« thirret nĂ« siguri nga njĂ« tjetĂ«r funksion safe vetĂ«m nĂ«se edhe ai Ă«shtĂ« i shĂ«nuar "#[target_feature]" (ndryshe, funksione tĂ« tilla duhet tĂ« thirren nĂ« bllokun unsafe). NdĂ«rkohĂ«, ato nuk mund tĂ« dĂ«rgohen nĂ« funksione qĂ« pranojnĂ« parametra tĂ« pĂ«rgjithshĂ«m (generic), tĂ« kufizuar nga trait-e tĂ« Fn*. MĂ« parĂ«, atributi "#[target_feature]" mund tĂ« aplikohej vetĂ«m pĂ«r funksione tĂ« shĂ«nuara si "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() }; } }
  • NĂ« kompiluesin Rust Ă«shtĂ« pĂ«rfshirĂ« zĂ«vendĂ«simi i kontrollit tĂ« debuguar (debug-assert), qĂ« tregohet se treguesi nuk pĂ«rmban vlerĂ«n NULL gjatĂ« leximit dhe shkruajtjes sĂ« madhĂ«sive qĂ« nuk janĂ« zero, si dhe gjatĂ« huazimit tĂ« ri (reborrow) tĂ« treguesit nĂ« njĂ« referencĂ«. PĂ«r shembull, me aktivizimin e kontrollit tĂ« debuguar, kodi mĂ« poshtĂ« tani do tĂ« çojĂ« nĂ« njĂ« gjendje "panic": let _x = *std::ptr::null::(); let _x = &*std::ptr::null::();
  • Kontrolli lint "missing_abi" Ă«shtĂ« aktivizuar si parazgjedhje, duke çuar nĂ« shfaqjen e njĂ« paralajmĂ«rimi nĂ«se ABI nuk Ă«shtĂ« caktuar pas fjalĂ«s kyçe extern. MĂ« parĂ«, po tĂ« mos caktosh ABI pas extern, nĂ«nkuptohej se pĂ«rdorej ABI "C". Tani rekomandohet tĂ« caktosh qartazi ABI "C", pĂ«r shembull, ‘extern "C" {}’ dhe ‘extern "C" fn’
  • NjĂ« grup i ri API u kalua nĂ« kategorinĂ« e stabilizuar, pĂ«rfshirĂ« stabilizimin e metodave dhe implementimeve tĂ« trait-Ă«ve:
    • {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
  • Priznaku «const» aplicohet nĂ« funksione:
    • 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
  • Niveli i tretĂ« i mbĂ«shtetjes Ă«shtĂ« realizuar pĂ«r platformat {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 dhe thumbv7a-nuttx-{eabi,eabihf}. Niveli i tretĂ« nĂ«nkupton mbĂ«shtetje bazĂ«, por pa testim automatizuar, publikim tĂ« ndĂ«rtimeve zyrtare dhe verifikimin e mundĂ«sisĂ« pĂ«r ndĂ«rtimin e kodit.
  • ËshtĂ« shtuar njĂ« paralajmĂ«rim pĂ«r ndalimin e mbĂ«shtetjes sĂ« nivelit tĂ« dytĂ« pĂ«r platformĂ«n e synuar i586-pc-windows-msvc nĂ« lĂ«shimin e ardhshĂ«m (1.87). Rekomandohet pĂ«rdorimi i platformĂ«s i686-pc-windows-msvc, e cila ndryshon pĂ«r mbĂ«shtetje tĂ« instrukcioneve SSE2. Platforma i586-pc-windows-msvc ka humbur kuptimin, pasi pĂ«r Windows 10 Ă«shtĂ« e nevojshme mbĂ«shtetja pĂ«r SSE2, dhe versionet mĂ« tĂ« hershme tĂ« Windows nĂ« Rust nuk mbĂ«shteten.

Po ashtu, mund tĂ« theksohet se kompania Ferrocene ka dorĂ«zuar komunitetit specifikimin pĂ«r gjuhĂ«n Rust (FLS — Ferrocene Language Specification), e cila Ă«shtĂ« krijuar gjatĂ« zhvillimit tĂ« kompiluesit tĂ« saj Rust pĂ«r sisteme kritike dhe pĂ«rditĂ«sohet periodikisht me gjendjen aktuale tĂ« kompiluesit kryesor Rust. Specifikimi FLS pĂ«rfshin njĂ« udhĂ«zues tĂ« strukturuar dhe tĂ« detajuar pĂ«r sintaksĂ«n, semantikĂ«n dhe sjelljen e Rust, tĂ« dobishĂ«m pĂ«r verifikimin, vlerĂ«simin e pĂ«rputhshmĂ«risĂ« dhe standardizimin.

Materialet e dërguara do të përdoren për të krijuar një specifikim referencë për gjuhën Rust, i cili mund të përdoret për zhvillimin e kompilatorëve alternativë dhe për verifikimin e kompilatorit në fushat që janë kritikisht të rëndësishme për sigurinë.

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