Avalikustatud ĂŒldotstarbelise programmeerimiskeele Rust 1.73 vĂ€ljaanne, mille on loonud Mozilla, kuid mida arendab praegu sĂ”ltumatu mittetuluorganisation Rust Foundation. Keele keskmes on ohutu mĂ€lu haldus ning see pakub vahendeid ĂŒlesannete kĂ”rge paralleelsuse saavutamiseks, samal ajal vĂ€ltides prĂŒgikorjaja ja vĂ€ljavaate (runtime'i) kasutamist, mis piirdub ainult pĂ”hialustamise ja standardraamatukogu hooldamisega.
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:
- Uuendatud on vaikimisi programmivigu kĂ€sitleva kĂ€skluse (panic) vĂ€ljastatavate teadete kujundust. Makros "panic!" antud tekst kuvatakse nĂŒĂŒd eraldi real ilma jutumĂ€rkideta, mis parandab sĂ”numi loetavust ja kĂ”rvaldab vĂ”imaliku segaduse, kui seal on siseruumi jutumĂ€rke vĂ”i ridade jagunemist. fn main() { let file = "ferris.txt"; panic!("oh ei! {file:?} ei leitud!"); } Varem thread âmainâ panicked at âoh ei! "ferris.txt" ei leitud!â, src/main.rs:3:5 NĂŒĂŒd thread âmainâ panicked at src/main.rs:3:5: oh ei! "ferris.txt" ei leitud!
Sama moodi on uuendatud ka makrode "assert_eq" ja "assert_ne" vigade vĂ€ljastamise. fn main() { assert_eq!("đŠ", "đ", "ferris ei ole kala"); } Varem thread âmainâ panicked at âassertion failed: `(left == right)` left: `"đŠ"`, right: `"đ"`: ferris ei ole kalaâ, src/main.rs:2:5 NĂŒĂŒd thread âmainâ panicked at src/main.rs:2:5: assertion `left == right` failed: ferris ei ole kala left: "đŠ" right: "đ"
- RFC 3184 kohaselt on lisatud vĂ”imalus otse manipuleerida niidile (thread_local) kohandatud vĂ”tmetega LocalKey<Cell> ja LocalKey<RefCell> meetodite get(), set(), take() ja replace() abil, selle asemel, et kasutada sulgud "with(|inner| âŠ)", mis vĂ”imaldab vĂ€ltida tĂ€iendava initsialiseerimise koodi tĂ€itmist vaikimisi vÀÀrtuste jaoks, mis on mÀÀratud uustele niidele makros "thread_local!" abil. thread_local! { static THINGS: Cell<Vec> = Cell::new(Vec::new()); } fn f() { // varem THINGS.with(|i| i.set(vec![1, 2, 3])); // nĂŒĂŒd THINGS.set(vec![1, 2, 3]); // ⊠// varem let v = THINGS.with(|i| i.take()); // nĂŒĂŒd let v: Vec = THINGS.take(); }
- Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tĂŒĂŒpide rakendused:
- Unsigned {integer}::div_ceil
- Unsigned {integer}::next_multiple_of
- Unsigned {integer}::checked_next_multiple_of
- std::ffi::FromBytesUntilNulError
- std::os::unix::fs::chown
- std::os::unix::fs::fchown
- std::os::unix::fs::lfchown
- LocalKey::<Cell>::get
- LocalKey::<Cell>::set
- LocalKey::<Cell>::take
- LocalKey::<Cell>::replace
- LocalKey::<RefCell>::with_borrow
- LocalKey::<RefCell>::with_borrow_mut
- LocalKey::<RefCell>::set
- LocalKey::<RefCell>::take
- LocalKey::<RefCell>::replace
- Konstantse mÀrgendiga `const`, mis mÀÀrab vÔimaluse kasutada konstandina igas kontekstis, on rakendatud funktsioonides:
- rc::Weak::new
- sync::Weak::new
- NonNull::as_ref
- Kompilaatoris on tagatud versiooniteabe salvestamine jaotises ".comment", sarnaselt GCC ja Clang'iga.
- On rakendatud kolmas toetuse tase platvormidele aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl ja x86_64-unknown-linux-ohos. Kolmas tase vÔimaldab pÔhitoetust, kuid ilma automatiseeritud testimise, ametlike kogumite vÀljastamise ja koodikogumise kontrollimiseta.
- On rakendatud teine toetuse tase sihtplatvormile wasm32-wasi-preview1-threads. Teine tase tagab kogumise.
Allikas: opennet.ru
