Rust 1.36 Programming Language Version

pibliye lage langaj pwogramasyon sistèm lan Rouye 1.36, ki te fonde pa pwojè Mozilla. Lang la konsantre sou sekirite memwa, bay jesyon memwa otomatik, epi li bay yon mwayen pou reyalize paralèl travay segondè san yo pa itilize yon pèseptè fatra oswa ègzekutabl.

Jesyon otomatik memwa Rust la libere pwomotè a soti nan manipilasyon konsèy ak pwoteje kont pwoblèm ki rive nan manipilasyon memwa ki ba-nivo, tankou aksè memwa apre-gratis, dereferans pointer nil, depase tanpon, ak lòt bagay. Yon manadjè pake ap devlope pou distribye bibliyotèk, asire asanble ak jere depandans pa pwojè a. Chaj, ki pèmèt ou jwenn bibliyotèk ki nesesè pou pwogram nan nan yon sèl klike sou. Yon depo sipòte pou òganize bibliyotèk kès.io.

Prensipal la inovasyon:

  • Karakteristik estabilize Lavni, ki reprezante yon valè evalyasyon ki gendwa poko fini pandan w ap itilize blòk async / .wait. Valè asynchrone defini lè l sèvi avèk Future fè li posib pou kontinye egzekite travay itil nan fil la, pandan y ap tann pou fini nan kalkil ki gen yon sèten valè;
  • Bibliyotèk estabilize allok, ki bay konsèy entelijan ak koleksyon pou jere valè memwa atribye ba yo. Alokasyon memwa nan std kounye a itilize kalite a Vec, ki fè yo re-ekspòte soti nan alloc. Itilizasyon separe nan alloc gen sans nan aplikasyon ki pa mare nan std ("#![no_std]"), osi byen ke nan bibliyotèk ki fèt pou itilize nan pwogram ki sanble san std;
  • Pou kontoune chèk pou inisyalizasyon kòrèk valè yo pwopoze kalite entèmedyè Petèt Unit, ki ka itilize olye pou yo mem::uninitialized fonksyon kòm yon altènatif ki pi an sekirite. Fonksyon mem::uninitialized la pratik pou kreye etalaj byen vit, men li twonpe konpilatè a paske li parèt inisyalize, men an reyalite valè a rete inisyalize. MaybeUninit pèmèt ou endike klèman nan konpilatè a ke valè a pa inisyalize, pran an kont konpòtman ki posib endefini ki asosye ak sa a, epi tou li òganize chèk nan pwogram nan "maybe_t:" ak inisyalizasyon etap pa etap, ki make fini li yo. lè l sèvi avèk ".assume_init()" apèl la. Avèk avenman MaybeUninit, fonksyon mem::uninitialized la te depreke epi yo pa rekòmande pou itilize;
  • Teknik NLL (Non-Lexical Lifetimes), ki te elaji sistèm pou anrejistre tout lavi varyab prete yo, te estabilize pou lang Rust 2015 la (okòmansman, Rust 2018 te sipòte NLL sèlman). Olye pou yo komèt lavi yo nan nivo leksik, NLL fè sa nan nivo seri endikasyon yo nan graf koule egzekisyon an. Apwòch sa a pèmèt ou ogmante bon jan kalite a nan tcheke prete a nan varyab (prete checker) ak pèmèt ekzekisyon an nan kèk kalite kòd kòrèk, itilizasyon ki te deja mennen nan yon erè. Nouvo konpòtman an tou fè debogaj pi fasil;
  • Nouvo aplikasyon ranje asosyasyon enkli HashMap, ki baze sou aplikasyon an nan estrikti a Swis tab (chaje otomatikman hashbrown::HashMap, sof si klèman endike otreman, tankou std::HashMap, ki baze sou SipHash 1-3). Koòdone nan lojisyèl rete menm jan an, ak diferans ki genyen aparan nan pwomotè a bouyi desann nan ogmante pèfòmans ak redwi konsomasyon memwa;
  • Nan kago manadjè pake a te ajoute "--offline" opsyon a, ki pèmèt operasyon san aksè nan rezo a, nan ki sèlman pakè kachèt nan sistèm lokal la yo itilize lè enstale depandans. Si depandans lan pa nan kachèt lokal la, yo pral voye yon erè. Pou preload depandans nan kachèt lokal la anvan ou ale offline, ou ka itilize lòd "chache kago" la;
  • Aplike abilite pou rele makro a "dbg!" endike plizyè agiman;
  • Atribi "const" la, ki detèmine posibilite pou itilize nan nenpòt kontèks olye pou yo konstan, yo itilize pou metòd.
    Layout::from_size_align_unchecked,
    mem::bezwen_drop,
    NonNull::pandan ak
    NonNull::cast;

  • Yon nouvo pati nan API yo te transfere nan kategori ki estab, ki gen ladan metòd ki te estabilize
    travay::Waker, travay::Sondaj,
    VecDeque::rotate_left, VecDeque::rotate_dwat,
    Read::read_vectored, Write::write_vectored,
    Iteratè::kopi,
    BorrowMut (pou fisèl) ak str::as_mut_ptr.

Sous: opennet.ru

Add nouvo kòmantè