Rust 1.57 Programming Language Version

Yo te pibliye liberasyon langaj pwogramasyon sistèm Rust 1.57, ki te fonde pa pwojè Mozilla, men kounye a devlope anba ejid òganizasyon endepandan ki pa gen pwofi Rust Foundation. Lang la konsantre sou sekirite memwa, bay jesyon memwa otomatik, epi li bay mwayen pou reyalize paralèl travay segondè san yo pa itilize yon pèseptè fatra oswa ègzekutabl (se exécution redwi a inisyalizasyon debaz ak antretyen nan bibliyotèk la estanda).

Jesyon otomatik memwa Rust a elimine erè lè w ap manipile endikasyon ak pwoteje kont pwoblèm ki rive nan manipilasyon memwa ki ba, tankou aksè nan yon rejyon memwa apre li fin libere, dereferans pointeur nil, depase tanpon, elatriye. Pou distribye bibliyotèk, asire asanble ak jere depandans, pwojè a ap devlope manadjè pake kago. Repozitwa crates.io sipòte pou hosting bibliyotèk.

Prensipal inovasyon:

  • Yo te estabilize itilizasyon macro "panik!" nan kontèks ki te kreye pandan konpilasyon, tankou deklarasyon "const fn". Anplis de sa, anplis lè l sèvi avèk "panik!" deklarasyon konst pèmèt itilizasyon makro "assert!". ak kèk lòt API bibliyotèk estanda. Estabilizasyon poko kouvri tout enfrastrikti fòma a, kidonk nan fòm aktyèl li "panik!" Macro a ka sèlman itilize ak kòd estatik (panik!(“...")) oswa ak yon sèl valè entèpole "&str" lè ranplase (panik!("{}", a)), ki ta dwe limite a ranplase "{ }" san fòma spesifikatè ak lòt kalite. Nan lavni, yo pral elaji aplikasyon makro nan kontèks konstan, men kapasite estabilize yo deja ase pou fè chèk afimasyon nan etap konpilasyon an: const _: () = assert!(std::mem::size_of::() == 64); const _: () = assert!(std::mem::size_of::() == 8);
  • Manadjè pake kago a pèmèt itilize pwofil ak non abitrè, pa limite a "dev", "lage", "tès" ak "ban". Pou egzanp, pou pèmèt optimize nan etap la lye (LTO) sèlman lè asanble pwodwi final yo pwodwi, ou ka kreye yon pwofil "pwodiksyon" nan Cargo.toml epi ajoute "lto = vre" drapo a sou li. Sepandan, lè w ap defini pwofil pwòp ou a, ou dwe presize yon pwofil ki egziste deja pou eritye paramèt default yo. Egzanp ki anba la a kreye yon pwofil "pwodiksyon" ki konplete pwofil "lage" lè li enkli drapo "lto = vre". Pwofil tèt li aktive lè w rele kago ak opsyon "--profile production", epi yo pral mete zafè asanble yo nan anyè "sib/pwodiksyon". [profile.production] inherits = "lage" lto = vre
  • Itilizasyon try_reserve pou kalite Vec, String, HashMap, HashSet ak VecDeque te estabilize, sa ki pèmèt ou rezève espas davans pou yon sèten kantite eleman nan yon kalite bay yo nan lòd yo diminye frekans nan operasyon alokasyon memwa epi evite. aksidan pandan operasyon akòz mank de memwa.
  • Li gen dwa presize makro ak atèl boukle nan ekspresyon tankou "m!{ .. }.method()" ak "m!{ .. }?".
  • Yo te optimize ekzekisyon fonksyon File::read_to_end ak read_to_string.
  • Sipò pou spesifikasyon Unicode yo te mete ajou nan vèsyon 14.0.
  • Elaji kantite fonksyon ki make "#[must_use]" pou bay yon avètisman si valè retounen an inyore, sa ki ede idantifye erè ki te koze pa sipoze yon fonksyon ap chanje valè olye ke retounen yon nouvo valè.
  • Te ajoute backend eksperimantal pou jenerasyon kòd lè l sèvi avèk libgccjit.
  • Yon nouvo pòsyon nan API a te transfere nan kategori ki estab, ki gen ladan metòd yo ak aplikasyon karakteristik yo:
    • [T; N]::as_mut_slice
    • [T; N]::as_tranch
    • 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_disponib
    • Kòmand::get_program
    • Kòmand::get_args
    • Kòmand::get_envs
    • Kòmand::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Atribi "const" la, ki detèmine si li ka itilize nan nenpòt kontèks olye pou yo konstan, yo itilize nan fonksyon hint::unreachable_unchecked.
  • Twazyèm nivo sipò yo te aplike pou armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi ak armv7a-kmc- solid_asp3-eabihf platfòm. Twazyèm nivo a enplike sipò debaz, men san yo pa tès otomatik, pibliye bati ofisyèl, oswa tcheke si kòd la ka bati.

Sous: opennet.ru

Add nouvo kòmantè