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

ËshtĂ« publikuar versioni Rust 1.53 i gjuhĂ«s sĂ« programimit sistemor, e krijuar fillimisht nga projekti Mozilla, por qĂ« sot zhvillohet nĂ«n kujdesin e organizatĂ«s sĂ« pavarur jofitimprurĂ«se Rust Foundation. Gjuha Ă«shtĂ« e pĂ«rqendruar te puna e sigurt me memorien, ofron menaxhim automatik tĂ« memories dhe mjete pĂ«r arritjen e paralelizmit tĂ« lartĂ« gjatĂ« ekzekutimit tĂ« detyrave, pa pĂ«rdorur garbage collector dhe runtime (runtime kufizohet nĂ« inicializimin bazĂ« dhe mirĂ«mbajtjen e bibliotekĂ«s standarde).

Menaxhimi automatik i memories në Rust e çliron zhvilluesin nga gabimet gjatë manipulimit të pointerëve dhe e mbron nga problemet që lindin nga puna në nivel të ulët me memorien, si qasja në një zonë memorieje pas lirimit të saj, dereferencimi i pointerëve null, dalja jashtë kufijve të buffer-it etj. Për shpërndarjen e bibliotekave, sigurimin e build-it dhe menaxhimin e varësive, projekti zhvillon menaxherin e paketave Cargo. Për publikimin e bibliotekave mbështetet repozitori crates.io.

Novitetet kryesore:

  • PĂ«r vargjet Ă«shtĂ« implementuar trait-i IntoIterator, i cili mundĂ«son iterimin e elementeve tĂ« vargut sipas vlerave: for i in [1, 2, 3] { .. }

    Gjithashtu është shtuar mundësia e kalimit të vargjeve te metodat që pranojnë iteratorë, 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 ndaj vargjeve, pra për iterim sipas vlerave kërkohej përdorimi i referencave («&[1, 2, 3]») ose «[1, 2, 3].iter()». Implementimi i IntoIterator për vargjet pengohej nga probleme të përputhshmërisë, të shkaktuara nga transformimi i shtuar më herët në kompilator, i cili e kthente metodën array.into_iter() në (&array).into_iter(). Këto probleme u zgjidhën me një rrugë alternative: kompilatori do të vazhdojë ta transformojë array.into_iter() në (&array).into_iter(), sikur implementimi i trait-it IntoIterator të mos ekzistonte, por vetëm kur metoda thirret me sintaksën «.into_iter()», pa prekur thirrjet në formatin «in [1, 2, 3]», «iter.zip([1, 2, 3])», «IntoIterator::into_iter([1, 2, 3])».

  • ËshtĂ« ofruar mundĂ«sia e pĂ«rdorimit tĂ« shprehjeve «|» (operacioni logjik OR) nĂ« çdo pjesĂ« tĂ« pattern-it, pĂ«r shembull, nĂ« vend tĂ« «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 jo-ASCII nĂ« identifikues, pĂ«rfshirĂ« çdo simbol kombĂ«tar tĂ« pĂ«rcaktuar nĂ« specifikimin Unicode UAX 31, por jo simbolet emoji. Kur pĂ«rdoren simbole tĂ« ndryshme, por me pamje tĂ« ngjashme, kompajleri do tĂ« shfaqĂ« njĂ« paralajmĂ«rim. const BLÅHAJ: &str = Â«đŸŠˆÂ»; struct äșș { 損歗: String, } let α = 1; let os = 2; warning: identifier pair considered confusable between ‘’ and ‘s’
  • NjĂ« pjesĂ« e re e API-ve Ă«shtĂ« kaluar nĂ« kategorinĂ« stable, pĂ«rfshirĂ« stabilizimin e kĂ«tyre elementeve:
    • 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 vargje
    • {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
  • ËshtĂ« zbatuar niveli i tretĂ« i mbĂ«shtetjes pĂ«r platformĂ«n wasm64-unknown-unknown. Niveli i tretĂ« nĂ«nkupton mbĂ«shtetje bazĂ«, por pa testim tĂ« automatizuar, publikim tĂ« build-eve zyrtare dhe verifikim tĂ« mundĂ«sisĂ« sĂ« kompilimit tĂ« kodit.
  • Menaxheri i paketave Cargo tani pĂ«rdor si parazgjedhje emrin «main» pĂ«r degĂ«n kryesore tĂ« depozitĂ«s Git (HEAD). PĂ«r varĂ«sitĂ« e vendosura nĂ« depo qĂ« pĂ«rdorin emrin main nĂ« vend tĂ« master, nuk kĂ«rkohet mĂ« tĂ« specifikohet te cilĂ«simet branch = «main».
  • NĂ« kompajler, kĂ«rkesat pĂ«r versionin minimal tĂ« LLVM janĂ« rritur nĂ« LLVM 10.

PĂ«r mĂ« tepĂ«r, vlen tĂ« theksohet sigurimi i financimit pĂ«r zhvillimin e integrimit nĂ« kernelin Linux tĂ« mjeteve pĂ«r krijimin e komponentĂ«ve nĂ« gjuhĂ«n Rust. Puna do tĂ« zhvillohet nĂ« kuadĂ«r tĂ« projektit Prossimo nĂ«n kujdesin e organizatĂ«s ISRG (Internet Security Research Group), e cila Ă«shtĂ« themeluese e projektit Let’s Encrypt dhe mbĂ«shtet pĂ«rhapjen e HTTPS-sĂ« dhe zhvillimin e teknologjive pĂ«r rritjen e sigurisĂ« sĂ« internetit. Fondet do tĂ« sigurohen nga kompania Google, e cila do tĂ« financojĂ« punĂ«n e Miguel Ojeda, autorit tĂ« projektit Rust-for-Linux. MĂ« parĂ«, ISRG dhe Google kanĂ« financuar tashmĂ« krijimin e njĂ« backend-i alternativ HTTP pĂ«r mjetin curl dhe zhvillimin e njĂ« moduli tĂ« ri TLS pĂ«r serverin HTTP Apache.

Sipas të dhënave nga Microsoft dhe Google, rreth 70% e cenueshmërive shkaktohen nga menaxhimi jo i sigurt i memories. Supozohet se përdorimi i gjuhës Rust për zhvillimin e komponentëve të kernelit, si p.sh. driverët e pajisjeve, do të ulë rrezikun e shfaqjes së cenueshmërive të shkaktuara nga puna jo e sigurt me memorien dhe do të eliminojë gabime të tilla si qasja në një zonë memorieje pas lirimit të saj dhe dalja jashtë kufijve të buffer-it.

Trajtimi i sigurt i memories garantohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve dhe marrëveshjes së kohëzgjatjes së objekteve (zona e dukshmërisë), si dhe përmes vlerësimit të saktësisë së qasjes në memory gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtjen nga mbushjet e numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave përpara përdorimit, trajton më mirë gabimet në bibliotekën standarde, zbaton konceptin e referencave dhe variablave të pazëvendësueshëm (immutable) si standard, dhe ofron tipizim të fortë statik për minimizimin e gabimeve logjike.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster