Lëshimi i Rust 1.86. Përgatitja e specifikimeve zyrtare të gjuhës Rust

ËshtĂ« publikuar versioni i gjuhĂ«s sĂ« programimit tĂ« pĂ«rgjithshĂ«m Rust 1.86, i bazuar nĂ« projektin Mozilla, por qĂ« tani zhvillohet nĂ«n mbikĂ«qyrjen e organizatĂ«s jo-fitimprurĂ«se Rust Foundation. Gjuha fokusohet nĂ« punĂ«n e sigurt me memorjen dhe ofron mjete pĂ«r arritjen e njĂ« paralelizmi tĂ« lartĂ« nĂ« ekzekutimin e detyrave, duke miratuar qĂ«llimin pĂ«r tĂ« shmangur pĂ«rdorimin e mbledhĂ«sve tĂ« plehrave dhe runtime (runtime reduktohet nĂ« inicializimin bazĂ« dhe mbĂ«shtetjes e bibliotekĂ«s standarte).

Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbrojnë nga problemet që lindin nga puna me nivel të ulët me kujtesën, siç janë referimi në një zonë kujtese pas çlirimit të saj, dereferimi i treguesve null, tejkalimi i kufijve të tamponëve etj. Për shpërndarjen e biblioteka, për të siguruar ndërtimin dhe menaxhimin e varësive, projekti zhvillon menaxherin e paketave Cargo. Për ruajtjen e bibliotekave, mbështetet depoja crates.io.

Përdorimi i sigurt i memories sigurohet në Rust gjatë kompilimit përmes verifikimit të lidhjeve, gjurmimit të pronësisë së objekteve, përllogaritjes së kohëzgjatjes së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në memorie gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtje nga tejkalimet e numrave të plotë, kërkon inicializim të detyrueshëm të vlerave të variablave para përdorimit, menaxhon më mirë gabimet në bibliotekën standarde, aplikon konceptin e lidhjeve dhe variablave të pandryshueshëm (immutable) si parazgjedhje, dhe ofron tipizim të fortë statik për minimizimin e gabimeve logjike.

TĂ« rejat kryesore:

  • ËshtĂ« shtuar mbĂ«shtetje pĂ«r konvertimin (upcast) e karakteristikave nĂ« superkarakteristikĂ«n bazĂ« (supertrait), pra tani ekziston mundĂ«sia pĂ«r konvertimin e drejtpĂ«rdrejtĂ« tĂ« referencĂ«s sĂ« njĂ« objekti tĂ« karakteristikĂ«s nĂ« njĂ« referencĂ« tĂ« njĂ« objekti superkarakteristikĂ« pa pasur nevojĂ« tĂ« krijohet njĂ« metodĂ« speciale nĂ« karakteristikĂ« qĂ« kthen njĂ« referencĂ« nĂ« superkarakteristikĂ«. NjĂ« operacion tĂ« ngjashĂ«m mund tĂ« kryhet edhe me lloje tĂ« tjera tĂ« treguesve tĂ« mençur, pĂ«r shembull, "Arc -> Arc" dhe "*const dyn Trait -> *const dyn Supertrait". trait Trait: Supertrait {} trait Supertrait {} fn upcast(x: &dyn Trait) -> &dyn Supertrait { x }
  • NĂ« HashMap dhe slices, u shtua metoda get_disjoint_mut() pĂ«r tĂ« marrĂ« njĂ«kohĂ«sisht disa lidhje tĂ« ndryshueshme nĂ« elemente. MĂ« parĂ«, kontrolluesi i huazimit nuk lejonte pĂ«rdorimin e njĂ«kohshĂ«m tĂ« lidhjeve tĂ« marra nĂ«pĂ«rmjet metodĂ«s get_mut(). let v = &mut [1, 2, 3]; nĂ«se lejohet Ok([a, b]) = v.get_disjoint_mut([0, 2]) { *a = 413; *b = 612; } assert_eq!(v, &[413, 2, 612]); nĂ«se lejohet 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]);
  • Lejohet tĂ« markosh funksione tĂ« sigurta me atributin "#[target_feature]", qĂ« tregon se funksioni pĂ«rdor aftĂ«si tĂ« caktuara tĂ« CPU. NjĂ« funksion tĂ« sigurt, i markeduar me atributin "#[target_feature]", mund tĂ« thirret sigurt vetĂ«m nĂ«se edhe ai Ă«shtĂ« i markeduar "#[target_feature]" (ndryshe, funksione tĂ« tilla duhen thirrur nĂ« njĂ« bllok tĂ« pasigurt). NĂ« tĂ« njĂ«jtĂ«n kohĂ«, ato nuk mund tĂ« pĂ«rcillen nĂ« funksione qĂ« pranojnĂ« parametra tĂ« pĂ«rgjithshĂ«m, tĂ« kufizuar nga tipazhet Fn*. MĂ« parĂ«, atributi "#[target_feature]" mund tĂ« aplikohet vetĂ«m pĂ«r funksione tĂ« markedura si "unsafe". #[target_feature(enable = "avx2")] fn requires_avx2() { // 
 } #[target_feature(enable = "avx2")] fn safe_callsite() { requires_avx2(); } fn unsafe_callsite() { nĂ«se Ă«shtĂ« e detektuar funksioni x86!("avx2") { unsafe { requires_avx2() }; } }
  • NĂ« kompilerin Rust Ă«shtĂ« pĂ«rfshirĂ« zĂ«vendĂ«simi i kontrollit tĂ« shkaktimit tĂ« gabimeve (debug-assert), qĂ« tregon se treguesi nuk pĂ«rmban vlerĂ«n NULL kur lexon dhe shkruan madhĂ«si jo-zero, si dhe kur ripĂ«rjetohet (reborrow) treguesi nĂ« njĂ« referencĂ«. PĂ«r shembull, duke pĂ«rfshirĂ« kontrollet e shkaktimit tĂ« gabimeve, kodi mĂ« poshtĂ« tani do tĂ« çojĂ« nĂ« njĂ« gjendje «panic»: let _x = *std::ptr::null::(); let _x = &*std::ptr::null::();
  • Fillimisht, Ă«shtĂ« aktivizuar kontrolli i lint «missing_abi», i cili çon nĂ« dhĂ«nien e njĂ« paralajmĂ«rimi nĂ«se ABI nuk Ă«shtĂ« cituar pas fjalĂ«s kyçe extern. MĂ« parĂ«, nĂ«se ABI nuk personalizohej pas extern, supozohej se pĂ«rdorej ABI «C». Tani rekomandohet qĂ« tĂ« shihet qartĂ« ABI «C», pĂ«r shembull, ‘extern «C» {}’ dhe ‘extern «C» fn’
  • NjĂ« sasi e re API Ă«shtĂ« kaluar nĂ« kategorinĂ« stabile, pĂ«rfshirĂ« stabilizimin e metodave dhe implementimeve tĂ« tipazheve:
    • {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
  • T symboli «const» Ă«shtĂ« aplikuar nĂ« funksionet:
    • 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
  • ËshtĂ« realizuar niveli i tretĂ« i mbĂ«shtetjes 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 testimin automatizuar, publikimin e 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 qĂ«llimore i586-pc-windows-msvc nĂ« lĂ«shimin e ardhshĂ«m (1.87). Rekomandohet pĂ«rdorimi i platformĂ«s i686-pc-windows-msvc, e cila pĂ«rfshin mbĂ«shtetje pĂ«r instruktionet SSE2. Platforma i586-pc-windows-msvc ka humbur kuptim, pasi pĂ«r Windows 10 kĂ«rkohet mbĂ«shtetje pĂ«r SSE2, dhe lĂ«shimet mĂ« tĂ« hershme tĂ« Windows nĂ« Rust nuk mbĂ«shteten.

Kompania Ferrocene ka shpĂ«rndarĂ« specifikimin pĂ«r gjuhĂ«n Rust (FLS — Ferrocene Language Specification), e cila u krijua gjatĂ« zhvillimit tĂ« kompilatorit tĂ« saj Rust pĂ«r sisteme kritikĂ« dhe pĂ«rditĂ«sohet rregullisht me gjendjen aktuale tĂ« kompilatorit kryesor Rust. Specifikimi FLS pĂ«rfshin njĂ« udhĂ«zues tĂ« strukturuar dhe tĂ« detajuar pĂ«r sintaksĂ«n, semantikĂ«n dhe sjelljen e Rust, i pĂ«rshtatshĂ«m pĂ«r verifikim, vlerĂ«sim tĂ« kompatibilitetit dhe standardizim.

Materialet e dorëzuara do të përdoren për të krijuar një specifikim referencë për gjuhën Rust, që do të mund të përdoret në zhvillimin e kompilatorëve alternativë dhe për kontrollin e kompilatorit në fusha që janë kritikë për sigurinë.

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster