Lëshimi i Rust 1.53. Google do të financojë shtimin e mbështetjes për Rust në kernelin e Linux

ËshtĂ« publikuar versioni i gjuhĂ«s sĂ« programimit Rust 1.53, e cila Ă«shtĂ« zhvilluar nga projekti Mozilla, por tani po zhvillohet nĂ«n mbrojtjen e organizatĂ«s jo fitimprurĂ«se Rust Foundation. Gjuha fokusohet nĂ« sigurinĂ« e pĂ«rdorimit tĂ« memories, ofron menaxhim automatik tĂ« memories dhe siguron mjete pĂ«r arritjen e paralelizmit tĂ« lartĂ« nĂ« ekzekutimin e detyrave, duke shmangur pĂ«rdorimin e mbledhĂ«sit tĂ« plehrave dhe runtime (runtime reduktohet nĂ« inicializimin themelor dhe mbĂ«shtetje pĂ«r bibliotekĂ«n standarde).

Menaxhimi automatik i memories në Rust e shpëton zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbron nga probleme që lindin nga puna në nivel të ulët me memorien, si aksesimi në një zonë të memories pas çlirimit të saj, dereferimi i treguesve nul, dalja jashtë kufijve të buffers dhe të tjerë. Për shpërndarjen e bibliotekave, sigurinë e ndërtimit dhe menaxhimin e varësive, projekti zhvillon menaxherin e pakove Cargo. Për hostimin e bibliotekave, mbështetet repozitari crates.io.

TĂ« rejat kryesore:

  • PĂ«r arrays Ă«shtĂ« implementuar tipazhi IntoIterator, i cili lejon organizimin e pĂ«rshkueshmĂ«risĂ« sĂ« elementeve tĂ« arrays sipas vlerave: for i in [1, 2, 3] { .. }

    Po ashtu, është bërë e mundur kalimi i arrays në metoda që pranojnë iterators, për shembull: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    MĂ« parĂ«, IntoIterator ishte implementuar vetĂ«m pĂ«r referenca nĂ« arrays, dmth. pĂ«r tĂ« iteruar sipas vlerave duhej pĂ«rdorur referenca («&[1, 2, 3]») ose «[1, 2, 3].iter()». Implementimet e IntoIterator pĂ«r arrays ishin penguar nga probleme me kompatibilitetin, tĂ« shkaktuara nga transformimi i mĂ«parshĂ«m nĂ« kompilator tĂ« metodĂ«s array.into_iter() nĂ« (&array).into_iter(). Problemet e cekura u zgjidhĂ«n duke ndjekur njĂ« rrugĂ« alternative — kompileri do tĂ« vazhdojĂ« tĂ« konvertojĂ« array.into_iter() nĂ« (&array).into_iter(), sikur tĂ« mos kishte implementim tĂ« tipazhit IntoIterator, por vetĂ«m kur thirret metoda tĂ« pĂ«rdorur me sintaksĂ«n «.into_iter()» dhe pa prekur thirrjet nĂ« formĂ«n «in [1, 2, 3]», «iter.zip([1, 2, 3])», «IntoIterator::into_iter([1, 2, 3])».

  • ËshtĂ« ofruar mundĂ«sia pĂ«r tĂ« specifikuar shprehje «|» (operacioni logjik OR) nĂ« çdo pjesĂ« tĂ« shabllonit, pĂ«r shembull, pĂ«rveç «Some(1) | Some(2)» tani mund tĂ« shkruhet «Some(1 | 2)»: match result { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. } _ => { .. } }
  • Lejohet pĂ«rdorimi i simboleve qĂ« nuk janĂ« ASCII nĂ« identifikues, duke pĂ«rfshirĂ« çdo simbol kombĂ«tar tĂ« caktuar nĂ« specifikimin Unicode UAX 31, pĂ«rveç simboleve emoji. Kur pĂ«rdoren simbole tĂ« ndryshme, por tĂ« ngjashme nĂ« formĂ«, kompileri do tĂ« japĂ« njĂ« paralajmĂ«rim. const BLÅHAJ: &str = Â«đŸŠˆÂ»; struct äșș { 損歗: String, } let α = 1; let os = 2; warning: identifier pair considered confusable between ‘’ and ‘s’
  • NjĂ« grup i ri i API-ve Ă«shtĂ« kaluar nĂ« statusin stabil, pĂ«rfshirĂ« stabilizimin e:
    • array::from_ref
    • array::from_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet::retain
    • BTreeMap::retain
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non_exhaustive
    • Duration::ZERO
    • Duration::MAX
    • Duration::is_zero
    • Duration::saturating_add
    • Duration::saturating_sub
    • Duration::saturating_mul
    • f32::is_subnormal
    • f64::is_subnormal
    • IntoIterator pĂ«r array
    • {integer}::BITS
    • io::Error::Unsupported
    • NonZero*::leading_zeros
    • NonZero*::trailing_zeros
    • Option::insert
    • Ordering::is_eq
    • Ordering::is_ne
    • Ordering::is_lt
    • Ordering::is_gt
    • Ordering::is_le
    • Ordering::is_ge
    • OsStr::make_ascii_lowercase
    • OsStr::make_ascii_uppercase
    • OsStr::to_ascii_lowercase
    • OsStr::to_ascii_uppercase
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Peekable::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • slice::IterMut::as_slice
    • AsRef pĂ«r slice::IterMut
    • impl SliceIndex pĂ«r (Bound, Bound)
    • Vec::extend_from_within
  • Niveli i tretĂ« i mbĂ«shtetjes pĂ«r platformĂ«n wasm64-unknown-unknown Ă«shtĂ« implementuar. Niveli i tretĂ« pĂ«rfshin mbĂ«shtetje bazike, por pa testim automatizuar, publikim tĂ« ndĂ«rtimeve zyrtare dhe verifikim tĂ« mundĂ«sisĂ« pĂ«r tĂ« ndĂ«rtuar kodin.
  • Menaxheri i paketave Cargo tani pĂ«r default Ă«shtĂ« konfiguruar tĂ« pĂ«rdorĂ« emrin «main» pĂ«r degĂ«n kryesore tĂ« repo Git (HEAD). PĂ«r varĂ«sitĂ« e vendosura nĂ« repo qĂ« pĂ«rdorin emrin main nĂ« vend tĂ« master, nuk kĂ«rkohet mĂ« tĂ« specifikohet nĂ« cilĂ«simet branch = «main».
  • NĂ« kompilator, kĂ«rkesat pĂ«r versionin minimal tĂ« LLVM janĂ« rritur nĂ« LLVM 10.

Gjithashtu, mund tĂ« theksohet financimi i punĂ«s pĂ«r zhvillimin e integrimit tĂ« kernelit Linux me mjete pĂ«r zhvillimin e komponentĂ«ve nĂ« gjuhĂ«n Rust. Puna do tĂ« kryhet brenda projektit Prossimo nĂ«n organizatĂ«n ISRG (Grupi KĂ«rkimor pĂ«r SigurinĂ« nĂ« Internet), i cili Ă«shtĂ« themelues i projektit Let’s Encrypt dhe ndihmon nĂ« promovimin e HTTPS dhe zhvillimin e teknologjive pĂ«r tĂ« rritur sigurinĂ« e internetit. Fondet do tĂ« sigurohen nga Google, e cila do tĂ« paguajĂ« punĂ«n e Miguel Ojeda, autor i projektit Rust-for-Linux. MĂ« parĂ«, ISRG dhe Google financuan krijimin e njĂ« backend alternative HTTP pĂ«r mjetin curl dhe zhvillimin e njĂ« moduli tĂ« ri TLS pĂ«r serverin http Apache.

Sipas kompanive Microsoft dhe Google, rreth 70% e dobësive shkaktohen nga trajtimi i pasigurt i memories. Supozohet se përdorimi i gjuhës Rust për zhvillimin e komponentëve të kernelit, si dhe drejtorët e pajisjeve, do të ndihmojë të zvogëlojë rrezikun e aparacioneve të dobësive shkatuar nga trajtimi i pasigurt i memories dhe do të përjashtojë gabime të tilla si qasja në një zonë memorje pas lirimit të saj dhe daljen përtej buffers.

Funksionaliteti i sigurt i punës me kujtesën sigurohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve dhe llogaritjes së kohëzgjatjes së jetës së objekteve (fusha e dukshmërisë), si dhe përmes vlerësimit të saktësisë së aksesit në memorie gjatë ekzekutimit të kodit. Rust ofron gjithashtu mjete për mbrojtjen nga tejkalimet e numrave të tërë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, zbaton konceptin e referencave dhe variablave të pandryshueshëm (immutable) si parazgjedhje, dhe ofron një tipizim statik të fortë për të minimizuar gabimet logjike.

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