Rust 1.86 väljalase. Rusti keele ametliku spetsifikatsiooni ettevalmistamine

Avaldatud üldotstarbelise programmeerimiskeele Rust 1.86 versioon, mis põhineb Mozilla projektal, kuid mida arendab praegu sõltumatu mittetulundusühing Rust Foundation. Keel keskendub mälu turvalisele töötlemisele ja pakub vahendeid kõrge paralleelsete ülesannete täitmise saavutamiseks, vältides samas järelkoristaja ja runtime'i kasutamist (runtime piirdub põhialuste ja standardraamatukogu algse seadistamise ning toe pakkumisega).

Rustis olevad mäluhaldusmeetodid vabastavad arendajad probleemidest, mis on seotud osutitega, ning kaitsevad madala taseme mälutöötlusest tulenevate probleemide, nagu vabanenud mälu alale juurdepääs, nullosutite de-referentseerimine, mälupiiride ületamine jne. Raamatukogude levitamiseks, projekti koostamise ja sõltuvuste haldamiseks arendatakse pakihaldurit Cargo. Raamatukogude paigutamiseks toetatakse repo crates.io.

Rust tagab turvalise mälutöötluse kompilatsiooni ajal, kontrollides viiteid, jälgides objektide omandit, arvestades objektide elutsüklit (nähtavust) ja hinnates mälule juurdepääsu õigsust koodi käitamise ajal. Rust pakub ka meetmeid enamike täisarvude ületamiste vältimiseks, nõuab muutujate väärtuste algväärtustamist enne kasutamist, käsitleb vigasid paremini oma standardraamatukogus, rakendab immutamatuse (immutable) kontseptsiooni viidetes ja muutujates vaikimisi ning pakub tugevat staatilist tüüpimist loogiliste vigade minimeerimiseks.

Põhilised uuendused:

  • Lisatud tugi tüüpide (upcast) edastamiseks baasülemarikkuni (supertrait), st nüüd on võimalik otse teisendada tüübivahendi objekti viidet supertüübi objekti viidaks ilma, et oleks vaja luua spetsiaalset meetodit tüübis, mis tagastab viite supertüübile. Sarnase operatsiooni saab teostada ka teiste nutikate näitajate tüüpidega, näiteks "Arc<dyn Trait> -> Arc<dyn Supertrait>" ja "*const dyn Trait -> *const dyn Supertrait". trait Trait: Supertrait {} trait Supertrait {} fn upcast(x: &dyn Trait) -> &dyn Supertrait { x }
  • HashMap'i ja viilude (slice) jaoks on lisatud meetod get_disjoint_mut(), mis võimaldab samaaegselt saada mitu muudetavat viidet elementidele. Varem ei lubanud borrow checker samaaegset viidete kasutamist, mis on saadud meetodi get_mut() kaudu. let v = &mut [1, 2, 3]; kui let Ok([a, b]) = v.get_disjoint_mut([0, 2]) { *a = 413; *b = 612; } assert_eq!(v, &[413, 2, 612]); kui 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]);
  • Safe-funktsioonide märgistamine on lubatud atribuudiga "#[target_feature]", mis näitab, et funktsioon kasutab antud CPU võimekusi. Safe-funktsiooni, mis on märgistatud atribuudiga "#[target_feature]", võib teine safe-funktsioon ohutult kutsuda vaid juhul, kui see on samuti märgistatud "#[target_feature]" (muul juhul tuleb selliseid funktsioone kutsuda unsafe-blokis). Samuti ei saa neid edastada funktsioonidesse, mis võtavad vastu üldiseid (generic) parameetreid, mis on piiratud tüübiga Fn*. Varem sai atribuuti "#[target_feature]" kasutada ainult funktsioonide puhul, mis olid märgistatud kui "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() }; } }
  • Rusti kompilaatorisse on sisse lülitatud tõrke kontrollide asendamine (debug-assert), et näidata, et näidik ei ole NULL, kui loetakse ja kirjutatakse mitte-nullsetesse suurustesse ning ka siis, kui näidik vahetatakse viidatud väärtuseks (reborrow). Näiteks, kui tõrke kontrollid on sisse lülitatud, toob allolev kood nüüd esile 'panic' seisundi: let _x = *std::ptr::null::(); let _x = &*std::ptr::null::();
  • Vaikimisi on aktiveeritud lint-kontroll 'missing_abi', mis tekitab hoiatuse, kui sõna 'extern' järel ei ole ABI-d. Varem, kui ABI-d ei olnud pärast 'extern', eeldati, et kasutatakse 'C' ABI-d. Nüüd on soovitatav selgelt näidata ABI-d 'C', näiteks 'extern "C" {}' ja 'extern "C" fn'
  • Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tüüpide rakendused:
    • {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
  • Märkus 'const' rakendatud funktsioonides:
    • 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
  • Kolmas toetaske tase on rakendatud platvormidele {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 ja thumbv7a-nuttx-{eabi,eabihf}. Kolmas tase tähendab põhitugi, kuid ilma automatiseeritud testimiseta, ametlike versioonide avaldamiseta ja koodi ehitamise kontrollimiseta.
  • Teatamine i586-pc-windows-msvc sihtplatvormi teise taseme toe lõpetamisest on lisatud järgmises väljaandes (1.87). Soovitav on kasutada platvormi i686-pc-windows-msvc, mis toetab SSE2 käske. Platvorm i586-pc-windows-msvc on kaotanud mõtte, kuna Windows 10 jaoks on vajalik SSE2 toe olemasolu, ning varasemaid Windowsi versioone Rustis ei toetata.

Lisaks võib märkida, et ettevõte Ferrocene on andnud kogukonnale Rusti keele spetsifikatsiooni (FLS — Ferrocene Language Specification), mis on loodud oma Rusti kompilaatori arendamise käigus kriitiliselt oluliste süsteemide jaoks ja mida sünkroniseeritakse perioodiliselt peamise Rusti kompilaatori hetkeolukorraga. FLS spetsifikatsioon sisaldab struktureeritud ja põhjalikku juhendit Rusti süntaksi, semantika ja käitumise kohta, mis sobib verifitseerimiseks, ühilduvuse hindamiseks ja standardiseerimiseks.

Edastatud materjale kasutatakse Rusti keele referents-spetsifikatsiooni loomiseks, mida saab kasutada alternatiivsete kompilaatorite arendamisel ja kompilaatori kontrollimisel kriitilise tähtsusega turvalisuse valdkondades.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster