Ăshte publikuar versioni i gjuhĂ«s sĂ« programimit tĂ« pĂ«rgjithshĂ«m Rust 1.73, e cila fillimisht ishte njĂ« projekt i Mozilla-s, por tani zhvillohet nĂ«n kujdesin e njĂ« organizate jo-fitimprurĂ«se tĂ« pavarur, Rust Foundation. Gjuha Ă«shtĂ« fokusuar nĂ« sigurinĂ« e menaxhimit tĂ« memories dhe ofron mjete pĂ«r tĂ« arritur njĂ« paralelizĂ«m tĂ« lartĂ« tĂ« ekzekutimit tĂ« detyrave, pa pĂ«rdorur njĂ« mbledhĂ«s plehrash dhe runtime (runtime u reduktua nĂ« inicializimin bazĂ« dhe mbĂ«shtetje tĂ« bibliotekĂ«s standarde).
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Ă« rinovuar dizajni i mesazheve tĂ« prodhuara nga menaxheri i gabimeve tĂ« paracaktuar (panic). Teksti qĂ« specifikohet nĂ« makron "panic!" tani shfaqet nĂ« njĂ« rresht tĂ« veçantĂ« pa kufizime me cita, duke e bĂ«rĂ« mesazhin mĂ« tĂ« lexueshĂ«m dhe duke eliminuar konfuzionin nĂ« rastin e citatave tĂ« brendshme ose ndarjes nĂ« disa rreshta. fn main() { let file = "ferris.txt"; panic!("oh no! {file:?} not found!"); } Kishim thread âmainâ panicked at âoh no! "ferris.txt" not found!â, src/main.rs:3:5 Tani thread âmainâ panicked at src/main.rs:3:5: oh no! "ferris.txt" not found!
Po ashtu, Ă«shtĂ« rinovuar dalja e mesazheve qĂ« shfaqen kur aktivizohen makrot "assert_eq" dhe "assert_ne". fn main() { assert_eq!("đŠ", "đ", "ferris is not a fish"); } Kishim thread âmainâ panicked at âassertion failed: `(left == right)` left: `"đŠ"`, right: `"đ"`: ferris is not a fishâ, src/main.rs:2:5 Tani thread âmainâ panicked at src/main.rs:2:5: assertion `left == right` failed: ferris is not a fish left: "đŠ" right: "đ"
- NĂ« pĂ«rputhje me RFC 3184 Ă«shtĂ« shtuar mundĂ«sia pĂ«r manipulimin e drejtpĂ«rdrejtĂ« tĂ« çelĂ«save tĂ« ruajtjes lokale pĂ«r thread (thread_local) si LocalKey<Cell> dhe LocalKey<RefCell> duke pĂ«rdorur metodat get(), set(), take() dhe replace(), nĂ« vend tĂ« pĂ«rdorimit tĂ« mbylljes "with(|inner| âŠ)", e cila lejon tĂ« shmanget ekzekutimi i kodit shtesĂ« tĂ« inicializimit pĂ«r vlerat e paracaktuara, tĂ« specifikuara pĂ«r thread tĂ« rinj me makron "thread_local!". thread_local! { static THINGS: Cell<Vec> = Cell::new(Vec::new()); } fn f() { // ishte THINGS.with(|i| i.set(vec![1, 2, 3])); // tani THINGS.set(vec![1, 2, 3]); // ⊠// ishte let v = THINGS.with(|i| i.take()); // tani let v: Vec = THINGS.take(); }
- Një sasi e re API është kaluar në kategorinë stabile, përfshirë stabilizimin e metodave dhe implementimeve të tipazheve:
- 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
- Karakteristika «const», që përcakton mundësinë e përdorimit në çdo kontekst në vend të konstantave, është aplikuar në funksionet:
- rc::Weak::new
- sync::Weak::new
- NonNull::as_ref
- Në compiler është siguruar regjistrimi i informacionit në lidhje me versionin në seksionin ".comment" si në GCC dhe Clang.
- ĂshtĂ« realizuar niveli i tretĂ« i mbĂ«shtetjes pĂ«r platformat aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl dhe x86_64-unknown-linux-ohos. Niveli i tretĂ« parashikon mbĂ«shtetje bazĂ«, por pa teste automatizimi, publikimin e ndĂ«rtimeve zyrtare dhe vlerĂ«simin e mundĂ«sisĂ« pĂ«r ndĂ«rtimin e kodit.
- ĂshtĂ« realizuar niveli i dytĂ« i mbĂ«shtetjes pĂ«r platformĂ«n e synuar wasm32-wasi-preview1-threads. Niveli i dytĂ« i mbĂ«shtetjes parashikon garancinĂ« e ndĂ«rtimit.
Burimi: opennet.ru
