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

Publikuar lëshimi i gjuhës së programimit sistemor Rust 1.38, i zhvilluar nga projekti Mozilla. Gjuha fokusohet në punën e sigurt me memorien, ofron menaxhim automatik të memories dhe siguron mjete për të arritur një paralelism të lartë në ekzekutimin e detyrave, pa përdorur mbledhës plehrash apo runtime.

Menaxhimi automatik i memories në Rust përmban zhvilluesit nga manipulimi i treguesve dhe mbron ata nga problemet që lindin për shkak të punës me nivel të ulët me memorien, siç janë qasjet në hapësirën e memories pas lirimit të saj, dereferencimi i treguesve nul, dalja jashtë kufijve të tamponit etj. Për shpërndarjen e biblioteka, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti po zhvillohet menaxher për paketat Cargo, që lejon shfrytëzimin e bibliotekave të nevojshme për programin me një klik. Për vendosjen e bibliotekave, mbështetet repository crates.io.

Ndryshimet kryesore risitë:

  • Ă«shtĂ« shtuar njĂ« mod tĂ« kompilimit me kujdes (pipelined), ku ndĂ«rtimi i paketĂ«s sĂ« varĂ«sisĂ« crate fillon menjĂ«herĂ« pasi tĂ« bĂ«hen tĂ« disponueshme metadatata e varĂ«sive, pa pritur pĂ«rfundimin e kompilimit tĂ« saj. GjatĂ« kompilimit tĂ« paketĂ«s, nuk Ă«shtĂ« e nevojshme qĂ« varĂ«sitĂ« tĂ« kenĂ« pĂ«rfunduar plotĂ«sisht, mjafton vetĂ«m pĂ«rcaktimi i metadatave qĂ« pĂ«rfshijnĂ« listat e tipeve, varĂ«sive dhe elementeve tĂ« eksportuara. Metadata bĂ«hen tĂ« disponueshme nĂ« fazĂ«n fillestare tĂ« kompilimit, kĂ«shtu qĂ« paketa tĂ« lidhura tani mund tĂ« fillojnĂ« tĂ« kompilohen shumĂ« mĂ« herĂ«t. GjatĂ« ndĂ«rtimit tĂ« paketave tĂ« vetme, ky mod i propozuar nuk ndikon nĂ« performancĂ«, por nĂ«se ndĂ«rtimi pĂ«rfshin paketa me varĂ«si tĂ« zhvilluara, koha totale e ndĂ«rtimit mund tĂ« reduktohet me 10-20%;
  • ËshtĂ« siguruar identifikimi i pĂ«rdorimit tĂ« papĂ«rshtatshĂ«m tĂ« funksioneve std::mem::uninitialized dhe std::mem::zeroed. PĂ«r shembull, std::mem::uninitialized Ă«shtĂ« i dobishĂ«m pĂ«r krijimin e shpejtĂ« tĂ« array-ve, por i jep njĂ« keqkuptim kompajlerit, duke krijuar iluzionin e njĂ« inicializimi, ndĂ«rsa nĂ« tĂ« vĂ«rtetĂ« vlera mbetet e pa inicizuar. Funksioni mem::uninitialized tashmĂ« Ă«shtĂ« e shĂ«nuar si e vjetĂ«ruar dhe rekomandohet pĂ«rdorimi i njĂ« tipi ndĂ«rmjetĂ«s. MaybeUninit. Sa i pĂ«rket mem::zeroed, kjo funksion mund tĂ« çojĂ« nĂ« probleme me tipet qĂ« nuk mund tĂ« pranojnĂ« vlera zero.

    PĂ«r tĂ« identifikuar sjelljen e paqartĂ« tĂ« thirrur nĂ« versionin e ri, kompajleri ka shtuar njĂ« kontroll lint qĂ« identifikon disa probleme me mem::uninitialized ose mem::zeroed. PĂ«r shembull, tani shfaqet njĂ« gabim kur pĂ«rpiqeni tĂ« pĂ«rdorni mem::uninitialized ose mem::zeroed me tipe &T dhe Boxâ€čTâ€ș, qĂ« pĂ«rfaqĂ«sojnĂ« objekte-pointer qĂ« nuk mund tĂ« pranojnĂ« vlera zero;

  • Kapacitetet e aplikimit tĂ« atributit "#[deprecated]" janĂ« zgjeruar, duke lejuar qĂ« paketat crate tĂ« shĂ«nohen si tĂ« vjetruara dhe tĂ« planifikuara pĂ«r t'u fshirĂ« nĂ« tĂ« ardhmen. Duke filluar nga versioni Rust 1.38, ky atribut mund tĂ« pĂ«rdoret gjithashtu pĂ«r makros;
  • Shtuar mundĂ«sinĂ« e pĂ«rdorimit tĂ« atributit "#[global_allocator]" nĂ« submodulet;
  • Shtesa e funksionit std::any::type_name, qĂ« lejon tĂ« mĂ«sosh emrin e tipit, qĂ« mund tĂ« jetĂ« e dobishme pĂ«r qĂ«llime tĂ« depurimit. PĂ«r shembull, gjatĂ« ekzekutimit tĂ« programit mund tĂ« kuptosh pĂ«r cilin tip Ă«shtĂ« thirrur funksioni:

    fn gen_valueâ€čT: Defaultâ€ș() -â€ș T {
    println!(«Duke inicializuar njĂ« instancĂ« tĂ« {}», std::any::type_name::â€čTâ€ș());
    Default::default()
    }

    fn main() {
    let _: i32 = gen_value(); # do të shfaqet «i32»
    let _: String = gen_value(); # do të shfaqet «alloc::string::String»
    }

  • Funksionet e bibliotekĂ«s standarde janĂ« zgjeruar:
    • slice::{concat, connect, join} tani mund tĂ« pranojĂ« vlerĂ«n &[T] pĂ«rveç &T;
    • «*const T» dhe «*mut T» tani realizojnĂ« marker::Unpin;
    • «Arcâ€č[T]â€ș» dhe «Rcâ€č[T]â€ș» tani realizojnĂ« FromIteratorâ€čTâ€ș;
    • iter::{StepBy, Peekable, Take} tani realizojnĂ« DoubleEndedIterator.
    • ascii::EscapeDefault realizon Clone dhe Display.
  • NĂ« rangun e stabilĂ«ve Ă«shtĂ« kaluar njĂ« grusht i ri API, pĂ«rfshirĂ« metodat e stabilizuara
    • â€č*const Tâ€ș::cast, â€č*mut Tâ€ș::cast,
    • Duration::as_secs_f{32|64},
    • Duration::div_duration_f{32|64},
    • Duration::div_f{32|64},
    • Duration::from_secs_f{32|64},
    • Duration::mul_f{32|64},
    • operacionet e ndarjes me mbetje
      div_euclid dhe rem_euclid për të gjitha primitive të numrave të plotë;
  • NĂ« menaxherin e paketave cargo Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r specifikimin e opsionit «—features» disa herĂ« pĂ«r aktivizimin e mundĂ«sive tĂ« ndryshme;
  • NĂ« kompajler Ă«shtĂ« siguruar niveli i tretĂ« nivel mbĂ«shtetje pĂ«r platformat e synuara aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc, armv7-unknown-linux-gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl dhe riscv32i-unknown-none-elf. Niveli i tretĂ« pĂ«rfshin mbĂ«shtetje bazĂ«, por pa testim automatizuar dhe publikim tĂ« ndĂ«rtimeve zyrtare.

Burimi: opennet.ru

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster