Väljaanne programmeerimiskeelest Rust 1.57

Ilmus süsteemse programmeerimise keele Rust 1.57 väljaanne, mis põhines Mozilla projektil, kuid nüüd on selle arendamise eest vastutav sõltumatu mittetulundusühing Rust Foundation. Keel keskendub mälu turvalisele töötlemisele, tagab automaatse mäluhalduse ja pakub vahendeid ülesannete kõrge paralleelsuse saavutamiseks, sealjuures ilma prügikoristaja ja runtime'ita (runtime piirdub põhinitialiseerimise ja standardraamatukogu hooldamisega).

Rustis tagab automaatne mälu haldus arendajale kaitse, vabastades ta erinevate näidikute käsitlemise vigadest ja kaitstes mäluga madalat tööd tehes tekkivate probleemide eest, nagu juurdepääs vabastatud mälu alale, nullviidete lahtimuukimine, puutumatuse ületamine jne. Raamatukogude jagamiseks, ehitamise tagamiseks ja sõltuvuste haldamiseks arendatakse pakihaldur Cargo. Raamatukogude majutamiseks toetatakse reposiiti crates.io.

Põhilised uuendused:

  • On stabiliseeritud makro «panic!» kasutamine kompilatsiooni kontekstides, näiteks «const fn» deklareerimisel. Samuti on lisaks «panic!» kasutamisele const-deklaratsioonides lubatud kasutada makrot «assert!» ja mõningaid teisi standardteegi API-sid. Stabiliseerimine ei hõlma veel kogu vormindamise infrastruktuuri, seega võib makrot «panic!» kasutada ainult staatiliste stringide (panic!(«…»)) või ühe interpolatsiooni väärtusega «&str» asendamise puhul (panic!(«{}», a)), mis peab piirduma asendamisega «{}» ilma vormindamise spetsifikaatorite ja muude tüüpide kasutamiseta. Tulevikus laieneb makrode kasutamine konstantses kontekstis, kuid juba stabiliseeritud funktsioone on piisavalt, et teostada assert-kontrolle kompileerimise ajal: const _: () = assert!(std::mem::size_of::() == 8); const _: () = assert!(std::mem::size_of::() == 1);
  • Cargo paketihalduris on lubatud kasutada profiile, millel on suvalised nimed, mis ei ole piiratud «dev», «release», «test» ja «bench». Näiteks, et võimaldada Linkimise Optimeerimist (LTO) ainult toote lõplike versioonide loomise ajal, saab Cargo.toml faili luua profiili «production» ja lisada sinna lipu «lto = true». Samuti on kohustuslik määrata olemasolev profiil, millest lähtuda, et pärida seadistusi vaikimisi. Allolevas näites luuakse profiil «production», mis täiendab profiili «release», lisades lipu «lto = true». Profiil aktiveeritakse käivitades cargo koos valikuga «—profile production», ning ehitusartifaktid paigutatakse katalooge «target/production». [profile.production] inherits = «release» lto = true
  • Try_reserve'i kasutamine tüüpidele Vec, String, HashMap, HashSet ja VecDeque on stabiliseeritud, mis võimaldab eelnevalt reserveerida ruumi kindla arvu sama tüüpi elementide jaoks, et vähendada mälu eraldamise toimingute sagedust ja vältida programmi ootamatut lõpetamist mälu nappuse tõttu.
  • Makrode kasutamine on lubatud süntaksiga nagu «m!{ .. }.method()» ja «m!{ .. }?».
  • File::read_to_end ja read_to_string funktsioonide täitmine on optimeeritud.
  • Unicode spetsifikatsiooni tugi on uuendatud versioonile 14.0.
  • Funktsioonide arvu, mis on märgistatud «#[must_use]», on laiendatud, et anda hoiatust, kui tagastatud väärtustIgnoreeritakse, aidates tuvastada vigu, mille põhjuseks on eeldus, et funktsioon muudab väärtusi, mitte ei tagasta uut väärtust.
  • Eksperimenteeriv backend koodi genereerimiseks kasutades libgccjit.
  • Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tüüpide rakendused:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • collections::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Command::get_program
    • Command::get_args
    • Command::get_envs
    • Command::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Märgis «const», mis määrab kasutamise võimaluse igas kontekstis, on rakendatud funktsioonis hint::unreachable_unchecked.
  • Kolmandat toetusastet rakendatakse platvormidele armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi ja armv7a-kmc-solid_asp3-eabihf. Kolmas tase tähendab baas toetust, kuid ilma automatiseeritud testimise, ametlike versioonide avaldamise ja koodi koostamise võimaluse kontrollimiseta.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster