Lëshimi i gjuhës së programimit Rust 1.73

Ë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

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