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

U publikua versioni 1.34 i gjuhës së programimit sistemor Rust, e zhvilluar nga projekti Mozilla. Gjuha fokusohet në punën e sigurt me kujtesën, ofron menaxhim automatik të kujtesës dhe siguron mjete për arritjen e paralelizmit të lartë në ekzekutimin e detyrave, duke u anashkaluar pa përdorimin e mbledhësit të plehrave dhe runtime-it.

Menaxhimi automatik i kujtesës në Rust e çliron zhvilluesin nga manipulimi i treguesve dhe e mbron atë nga problemet që dalin nga puna me kujtesën në nivel të ulët, si adresimi i hapësirës së kujtesës pas çlirimit të saj, dereferencimi i treguesve null, dalja jashtë kufijve të buffers, etj. Për shpërndarjen e bibliotekave, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti përfshin menaxherin e paketave Cargo, që lejon marrjen e bibliotekave të nevojshme për programin me një klik. Për vendosjen e bibliotekave, mbështetet repository crates.io.

TĂ« rejat kryesore:

  • NĂ« menaxherin e paketave Cargo janĂ« shtuar mjete pĂ«r tĂ« punuar me registrat alternative tĂ« paketave, tĂ« cilat mund tĂ« bashkĂ«jetojnĂ« me regjistrin publik crates.io. PĂ«r shembull, zhvilluesit e aplikacioneve private tani mund tĂ« pĂ«rdorin regjistrin e tyre privat, i cili mund tĂ« pĂ«rdoret gjatĂ« listimit tĂ« varĂ«sive nĂ« Cargo.toml, dhe tĂ« aplikojnĂ« pĂ«r produktet e tyre njĂ« model versionimi tĂ« ngjashĂ«m me crates.io, si dhe tĂ« referojnĂ« nĂ« varĂ«sitĂ« si nĂ« crates.io ashtu edhe nĂ« regjistrin e tyre.

    Për të shtuar një regjistër të jashtëm në ~/.cargo/config
    në seksionin «[registries]» është parashikuar një opsion i ri «my-registry», dhe për të përmendur regjistrin e jashtëm në varësi në Cargo.toml, në seksionin «[dependencies]» është shtuar opsioni «other-crate». Për t'u lidhur me regjistrin shtesë, mjafton të vendosni tokenin e autentikimit në skedarin ~/.cargo/credentials dhe të ekzekutoni komandën
    «cargo login —registry=my-registry», dhe pĂ«r publikimin e pakot —
    «cargo publish —registry=my-registry»;

  • ËshtĂ« shtetur mbĂ«shtetje e plotĂ« pĂ«r pĂ«rdorimin e operatorit «?» nĂ« testet doctests, duke lejuar pĂ«rdorimin e kodit tĂ« shembujve nga dokumentacioni si teste. MĂ« parĂ« operatori
    «?» mund të përdorej për trajtimin e gabimeve gjatë ekzekutimit të testeve vetëm nëse kishte funksionin «fn main()» ose në funksionet «#[test]»;
  • NĂ« atributet e veçanta qĂ« pĂ«rcaktohen me makros procedurale (custom attribute) Ă«shtĂ« siguruar mundĂ«sia e pĂ«rdorimit tĂ« grupeve tĂ« rastĂ«sishme tĂ« tokenĂ«ve («#[attr($tokens)]», «#[attr[$tokens]] dhe #[attr{$tokens}]»). MĂ« herĂ«t elementĂ«t mund tĂ« pĂ«rcaktoheshin vetĂ«m nĂ« formĂ« tĂ« pemĂ«s/rekursive duke pĂ«rdorur literale string, pĂ«r shembull «#[foo(bar, baz(quux, foo = «bar»))]», ndĂ«rsa tani Ă«shtĂ« e mundur tĂ« pĂ«rdoren enumerime (‘#[range(0..10)]’) dhe konstruktime si «#[bound(T: MyTrait)]»;
  • TĂ« stabilizuar tipazhet (trait) TryFrom dhe TryInto, tĂ« cilat lejojnĂ« tĂ« kryhen konvertime tĂ« tipave me trajtim tĂ« gabimeve. PĂ«r shembull, metodat si from_be_bytes, me tipet e numrave si hyrje pĂ«rdorin array, por shpesh tĂ« dhĂ«nat vijnĂ« me tipin Slice, dhe konvertimi midis array-ve dhe slice-ve Ă«shtĂ« problematik tĂ« bĂ«het manualisht. Me ndihmĂ«n e tipazheve tĂ« rinj, operacioni i pĂ«rmendur mund tĂ« kryhet nĂ« fluks pĂ«rmes thirrjes .try_into(), pĂ«r shembull, "let num = u32::from_be_bytes(slice.try_into()?)". PĂ«r konvertimet qĂ« gjithmonĂ« pĂ«rfundojnĂ« me sukses (pĂ«r shembull, nga tipi u8 nĂ« u32) Ă«shtĂ« shtuar tipi i gabimeve Infallible, qĂ« lejon pĂ«rdorimin e qetĂ«
    TryFrom për të gjitha implementimet ekzistuese të "From";
  • ËshtĂ« shpallur si e tĂ«rhequr funksioni CommandExt::before_exec, i cili lejonte ekzekutimin e njĂ« trajtesĂ« para se tĂ« fillohej exec, i cili ekzekutohej nĂ« kontekstin e procesit fĂ«mije, tĂ« ndarĂ« pas thirrjes fork(). NĂ« kushte tĂ« tilla, disa burime tĂ« procesit prind, siç janĂ« deshifruesit e skedarĂ«ve dhe zonat e reflektuar tĂ« memories, mund tĂ« ishin kopjuar, gjĂ« qĂ« mund tĂ« çonte nĂ« sjellje tĂ« paqartĂ« dhe tĂ« gabuar tĂ« bibliotekave.
    Në vend të before_exec, rekomandohet përdorimi i funksionit të pasigurt CommandExt::pre_exec.
  • TĂ« stabilizuara janĂ« tipet atomike tĂ« numrave tĂ« plotĂ« me shenja dhe pa shenja me madhĂ«si nga 8 deri nĂ« 64 bit (pĂ«r shembull, AtomicU8), si dhe tipet me shenja NonZeroI[8|16|32|54|128].
  • NjĂ« grup i ri API-sĂ« Ă«shtĂ« pĂ«rfshirĂ« nĂ« kategorinĂ« e stabilizuar, duke pĂ«rfshirĂ« metodat Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub] dhe SystemTime::checked_[add|sub]. Funksionet iter::from_fn dhe iter::successors janĂ« gjithashtu stabilizuar;
  • PĂ«r tĂ« gjitha tipet e numrave tĂ« plotĂ« janĂ« implementuar metodet checked_pow, saturating_pow, wrapping_pow dhe overflowing_pow;
  • ËshtĂ« shtuar mundĂ«sia pĂ«r tĂ« pĂ«rfshirĂ« optimizimet gjatĂ« fazĂ«s sĂ« lidhjes pĂ«rmes specifikimit tĂ« opsionit tĂ« ndĂ«rtimit '-C linker-plugin-lto' (rustc komandon kodin Rust nĂ« bitcode LLVM, qĂ« lejon aplikimin e optimizimeve LTO).

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