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

Ështe publikuar lĂ«vizja e gjuhĂ«s sĂ« programimit Rust 1.51, e cila fillimisht bazohej nĂ« projektin Mozilla, por tani zhvillohet nĂ«n mbrojtjen e njĂ« organizate tĂ« pavaruara, Rust Foundation. Gjuha fokusohet nĂ« punĂ«n e sigurt me memorien, ofron menaxhim automat tĂ« memorjes dhe siguron mjete pĂ«r arritjen e njĂ« paralelizmi tĂ« lartĂ« nĂ« ekzekutimin e detyrave, duke e shmangur pĂ«rdorimin e mbledhĂ«sve tĂ« mbeturinave dhe runtime (runtime reduktohet nĂ« iniciativĂ«n bazĂ« dhe mbĂ«shtetje tĂ« bibliotekĂ«s 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:

  • Funksionaliteti qĂ« lidhet me aplikimin e gjenerikĂ«ve tĂ« konstantĂ«s ("const generics") ka marrĂ« statusin e njĂ« produkti minimalisht funksional (MVP), duke i dhĂ«nĂ« dritĂ«n e gjelbĂ«r pĂ«r aplikim tĂ« gjerĂ«. GjenerikĂ«t e konstantĂ«s lejojnĂ« tĂ« pĂ«rgjithĂ«sohen tipet pĂ«r vlera konstante, dmth tĂ« pĂ«rdoren argumente tĂ« pĂ«rgjithĂ«suara, tĂ« kufizuara nĂ« njĂ« gamĂ« vlerash konstante, pĂ«r tĂ« shmangur pĂ«rdorimin e tipeve dhe skemave tĂ« jetĂ«s.

    Deri në këtë lëshim, për arrays me tipin "[T; N]" (tipi T dhe madhësia N) është ofruar mundësia për të u përgjithësuar nga tipi dhe madhësia, duke përdorur vlera me çdo tip int, boolean dhe character (tipat strukt dhe enum për momentin nuk janë të mbështetur). Gjenerikët e konstantës thjeshtojnë ndjeshëm zhvillimin e bibliotekave, për shembull, për përdorimin e një array që nuk është i lidhur me një tip dhe madhësi të caktuar, mund të specifikohet: struct Array<T, const LENGTH: usize> { // ^^^^^^^^^^^^^^^^^^^ përkufizimi i gjenerikut të konstantës list: [T; LENGTH] // ^^^^^^ përdorimi i tij }

    Kur përdoret konkretisht me këtë përkufizim "Array<u8, 32>" kompilaatori do të gjenerojë një version monomorfik të Array: struct Array<u8, 32> { list: [u8; 32] }

  • ËshtĂ« stabilizuar API std::array::IntoIter, i bazuar nĂ« gjenerikĂ«t e konstantĂ«s, me tĂ« cilin mund tĂ« krijohen iteratoret pĂ«r çdo array pĂ«r vlera: fn main() { let array = [1, 2, 3, 4, 5]; // MĂ« parĂ«, pĂ«r tĂ« arritur njĂ« vlerĂ«, duhej tĂ« thĂ«rriste metodĂ«n .iter() for item in array.iter().copied() { println!("{}", item); } // Tani mund tĂ« specifikohet for item in std::array::IntoIter::new(array) { println!("{}", item); } }
  • NĂ« menaxherin e paketave cargo Ă«shtĂ« implementuar mbĂ«shtetja pĂ«r fushĂ«n e re resolver nĂ« Cargo.toml, me tĂ« cilin mund tĂ« aktivizohet versioni i dytĂ« i pĂ«rcaktuesit tĂ« mundĂ«sive tĂ« disponueshme (feature resolver). Versioni i ri i pĂ«rcaktuesit shmang lidhjen e mundĂ«sive tĂ« varĂ«sive, tĂ« listuara nĂ« seksionin "[features]", atje ku kjo Ă«shtĂ« e papĂ«rshtatshme, pĂ«r shembull, kur lidhen njĂ« varĂ«si qĂ« kĂ«rkon ndonjĂ« mundĂ«si standarde nĂ« skripti ndĂ«rtimi dhe makro, por pĂ«rdor njĂ« mundĂ«si tĂ« pazakontĂ« nĂ« skedarĂ«t ekzekutiv.

    Derisa mundësitë e paketës, të përmendura disa herë në kolona të varësive, janë bashkuar. Për shembull, nëse projekti lidh varësinë foo, në të cilën janë përcaktuar mundësitë A dhe B, dhe ky paketë përdoret në paketat e tjera bar dhe baz, kur bar varet nga foo me mundësinë A, ndërsa baz nga foo me mundësinë B, atëherë në fund cargo do t'i bashkojë këto mundësi dhe do ta kompilojë foo duke përfshirë mundësitë A dhe B. Ky metod mund të çojë në një mundësi të përfshirë për shkak të ndonjë varësie që mund të jetë e papajtueshme me sistemin përfundimtar për të cilin po bëhet ndërtimi.

  • NĂ« cargo Ă«shtĂ« implementuar opsioni split-debuginfo, i vendosur nĂ« seksionin "[profile]" dhe flamuri pĂ«rkatĂ«s "-Csplit-debuginfo=unpacked" nĂ« rustc, qĂ« ofron njĂ« implementim tĂ« metodĂ«s sĂ« re pĂ«r ruajtjen e informacionit tĂ« ndihmĂ«s, e cila lejon shmangien e nevojĂ«s pĂ«r thirrjen e utilitarit dsymutil dhe pĂ«rshpejton ndjeshĂ«m procesin e ndĂ«rtimit me informacion ndihmĂ«s nĂ« macOS.
  • Sot janĂ« stabilizuar makrot "ptr::addr_of!" dhe "ptr::addr_of_mut!", qĂ« lejojnĂ« krijimin e treguesve tĂ« papĂ«rpunuar pĂ«r fusha tĂ« pa rrokur. use std::ptr; #[repr(packed)] struct Packed { f1: u8, f2: u16, } let packed = Packed { f1: 1, f2: 2 }; // &packed.f2 do tĂ« krijojĂ« njĂ« tregues tĂ« pa rrokur, duke çuar nĂ« sjellje tĂ« paqartĂ« let raw_f2 = ptr::addr_of!(packed.f2); assert_eq!(unsafe { raw_f2.read_unaligned() }, 2);
  • NjĂ« grup i ri API-sh Ă«shtĂ« transferuar nĂ« klasĂ«n e stabilizuar, duke pĂ«rfshirĂ« stabilizimin e metodave:
    • Arc::decrement_strong_count
    • Arc::increment_strong_count
    • Once::call_once_force
    • Peekable::next_if_eq
    • Peekable::next_if
    • Seek::stream_position
    • array::IntoIter
    • panic::panic_any
    • ptr::addr_of!
    • ptr::addr_of_mut!
    • slice::fill_with
    • slice::split_inclusive_mut
    • slice::split_inclusive
    • slice::strip_prefix
    • slice::strip_suffix
    • str::split_inclusive
    • sync::OnceState
    • task::Wake
  • ËshtĂ« realizuar niveli i tretĂ« i mbĂ«shtetjes pĂ«r platformat i386-unknown-linux-gnu, i486-unknown-linux-gnu, aarch64_be-unknown-linux-gnu, aarch64-unknown-linux-gnu_ilp32 dhe aarch64_be-unknown-linux-gnu_ilp32. Niveli i tretĂ« nĂ«nkupton mbĂ«shtetje bazike, por pa testim automatizuar, publikimin e ndĂ«rtimeve zyrtare dhe verifikimin e mundĂ«sisĂ« pĂ«r ndĂ«rtimin e 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