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

U publikua versioni i gjuhës së programimit të përgjithshme Rust 1.77, e cila është zhvilluar fillimisht nga projekti Mozilla, por tani zhvillohet nën mbikëqyrjen e organizatës jo-fitimprurëse Rust Foundation. Gjuha fokusohet në sigurinë e menaxhimit të memories dhe ofron mjete për të arritur një nivele të lartë të paralelizmit në ekzekutimin e detyrave, pa e përdorur mbledhësin e plehrave dhe runtime (runtime përfshin vetëm inicializimin e bazës dhe menaxhimin e 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:

  • Shtuar mbĂ«shtetje pĂ«r literalĂ«t pĂ«r stringat C (c»tekst»), tĂ« cilat ruhen nĂ« memorie me njĂ« simbol pĂ«rfundimtar zero dhe janĂ« tĂ« asociuar me llojin «CStr». Parashikohet qĂ« mbĂ«shtetja pĂ«r stringat C do tĂ« thjeshtojĂ« shkruan e kodit qĂ« ndĂ«rvepron me ndĂ«rprerĂ«s tĂ« shkruar nĂ« gjuhĂ« programimi qĂ« pĂ«rdorin stringa tĂ« pĂ«rfunduara me njĂ« byte zero dhe do tĂ« mundĂ«sojĂ« verifikimet pĂ«rkatĂ«se nĂ« fazĂ«n e kompilimit. const HELLO: &core::ffi::CStr = c»Hello, world!»;
  • NĂ« funksionet qĂ« ekzekutohen asinkronisht, tĂ« shpallura me shprehjen «async fn», Ă«shtĂ« lejuar pĂ«rdorimi i rekursivitetit, dmth. kĂ«to funksione tani mund tĂ« thĂ«rrasin vetveten. async fn fib(n: u32) -> u32 { match n { 0 | 1 => 1, _ => Box::pin(fib(n-1)).await + Box::pin(fib(n-2)).await } }
  • Stabilizuar makron offset_of!, e cila pĂ«rcakton offset-in nĂ« byte tĂ« fushave tĂ« strukturave, enum-eve, bashkimeve dhe tuples, nĂ« lidhje me fillimin e tipit. NĂ« praktikĂ«, makroja mund tĂ« jetĂ« e dobishme nĂ« situatat kur kĂ«rkohet punĂ« nĂ« nivelin e offset-eve tĂ« fushave pa pasur njĂ« instancĂ« tĂ« tipit. NĂ« veçanti, funksionaliteti offset_of Ă«shtĂ« i nevojshĂ«m kur zhvilloni komponente tĂ« nivelit tĂ« ulĂ«t, siç janĂ« drejtuesit. use std::mem; #[repr(C)] struct FieldStruct { first: u8, second: u16, third: u8 } assert_eq!(mem::offset_of!(FieldStruct, first), 0); assert_eq!(mem::offset_of!(FieldStruct, second), 2); assert_eq!(mem::offset_of!(FieldStruct, third), 4);
  • NĂ« menaxherin e paketave Cargo, nĂ« profilet e lĂ«shimit, siç Ă«shtĂ« parazgjedhja, Ă«shtĂ« e aktivizuar pastrimi i skedarĂ«ve nga tĂ« dhĂ«nat e ndihmĂ«s (strip = «debuginfo»), nĂ«se nĂ« profilin Cargo nuk Ă«shtĂ« aktivizuar qartĂ« mĂ«nyra e ndihmĂ«s, dmth. nĂ«se parametrat debug = 0.
  • Aktivizuar si parazgjedhje opsioni «-Zthir-unsafeck=on», i cili garanton kontrollin e unsafe pĂ«r pĂ«rfaqĂ«simin e mesĂ«m THIR («Typed High-Level Intermediate Representation»).
  • Shtuar kontrolli lint static_mut_refs pĂ«r tĂ« dhĂ«nĂ« tĂ«rheqje nĂ« pĂ«rdorimin e referencave nĂ« vlera statike tĂ« ndryshueshme.
  • Implementuar mundĂ«sinĂ« e pĂ«rdorimit tĂ« tipazhit «From<&[T; N]>» pĂ«r tipin «Cow<[T]>». fn foo(data: impl Into<Cow<‘static, [&’static str]>>) { /* 
 */ } fn main() { foo(&[«hello», «world»]); }
  • NĂ« kompilator Ă«shtĂ« siguruar rreshtimi i tipeve 16-byte i128 dhe u128 pĂ«r sistemet x86.
  • NjĂ« sasi e re API Ă«shtĂ« kaluar nĂ« kategorinĂ« stabile, pĂ«rfshirĂ« stabilizimin e metodave dhe implementimeve tĂ« tipazheve:
    • array::each_ref
    • array::each_mut
    • core::net
    • f32::round_ties_even
    • f64::round_ties_even
    • mem::offset_of!
    • slice::first_chunk
    • slice::first_chunk_mut
    • slice::split_first_chunk
    • slice::split_first_chunk_mut
    • slice::last_chunk
    • slice::last_chunk_mut
    • slice::split_last_chunk
    • slice::split_last_chunk_mut
    • slice::chunk_by
    • slice::chunk_by_mut
    • Bound::map
    • File::create_new
    • Mutex::clear_poison
    • RwLock::clear_poison
  • Implementuar njĂ« nivel tĂ« tretĂ« mbĂ«shtetjeje pĂ«r platformat aarch64-unknown-illumos, hexagon-unknown-none-elf, riscv32imafc-esp-espidf dhe riscv32im-risc0-zkvm-elf. Nivel i tretĂ« nĂ«nkupton mbĂ«shtetje bazĂ«, por pa testim automatik, publikim tĂ« paketave zyrtare dhe kontrollin mbi mundĂ«sinĂ« e ndĂ«rtimit tĂ« kodit.

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