Rust 1.36 Programming Language Release

gipatik pagpagawas sa pinulongan sa sistema sa programming Taya 1.36, gitukod sa proyekto sa Mozilla. Ang lengguwahe nagpunting sa kaluwasan sa panumduman, naghatag ug awtomatik nga pagdumala sa panumduman, ug naghatag usa ka paagi aron makab-ot ang taas nga paralelismo sa buluhaton nga wala mogamit usa ka tigkolekta sa basura o oras sa pagdagan.

Ang awtomatik nga pagdumala sa memorya ni Rust nagpalingkawas sa developer gikan sa pagmaniobra sa pointer ug nanalipod batok sa mga problema nga naggikan sa ubos nga lebel sa pagmaniobra sa memorya, sama sa human-free nga memory access, null pointer dereferences, buffer overruns, ug uban pa. Usa ka manedyer sa pakete ang gipalambo aron sa pag-apod-apod sa mga librarya, pagsiguro sa asembliya ug pagdumala sa mga dependency sa proyekto. Cargo, nga nagtugot kanimo nga makuha ang mga librarya nga gikinahanglan alang sa programa sa usa ka pag-klik. Gisuportahan ang usa ka repository sa pag-host sa mga librarya crates.io.

nag-unang mga inobasyon:

  • Na-stabilize ang kinaiya Kaugmaon, nga nagrepresentar sa usa ka bili kansang ebalwasyon mahimong dili pa makompleto samtang naggamit sa async / .await blocks. Ang mga asynchronous nga kantidad nga gihubit gamit ang Umaabot nagpaposible sa pagpadayon sa pagpatuman sa mapuslanon nga trabaho sa hilo, samtang dungan nga naghulat alang sa pagkompleto sa mga kalkulasyon sa usa ka piho nga kantidad;
  • Gi-stabilize ang librarya alloc, nga naghatag ug maalamong mga punto ug mga koleksyon alang sa pagdumala sa mga kantidad nga gigahin sa memorya. Ang alokasyon sa memorya sa std karon naggamit sa tipo Si Vec, nga gi-eksport pag-usab gikan sa alloc. Ang bulag nga paggamit sa alloc makatarunganon sa mga aplikasyon nga wala gihigot sa std ("#![no_std]"), ingon man sa mga librarya nga gidisenyo aron magamit sa parehas nga mga programa nga wala std;
  • Aron laktawan ang mga tseke alang sa husto nga pagsugod sa mga kantidad gisugyot intermediate nga tipo TingaliUnit, nga mahimong gamiton imbes sa mem::uninitialized function isip mas luwas nga alternatibo. Ang mem::uninitialized function sayon ​​alang sa dali nga paghimo sa mga arrays, apan kini nagpahisalaag sa compiler tungod kay kini nagpakita nga nagsugod, apan sa pagkatinuod ang bili nagpabilin nga wala'y nahibal-an. Gitugotan ka sa MaybeUninit nga tin-aw nga ipahibalo sa tigkompiler nga ang kantidad wala ma-initialize, aron tagdon ang posible nga wala mahibal-an nga pamatasan nga may kalabotan niini, ug usab pag-organisar ang mga tseke sa mga programa pinaagi sa "maybe_t:" ug ang sunod-sunod nga pagsugod, pagtimaan sa pagkompleto niini. gamit ang ".assume_init()" nga tawag. Sa pag-abot sa MaybeUninit, ang mem::uninitialized function wala na gamita ug wala girekomenda nga gamiton;
  • Ang NLL (Non-Lexical Lifetimes) nga teknik, nga nagpalapad sa sistema sa pagrekord sa tibuok kinabuhi sa hinulaman nga mga variable, gipalig-on alang sa Rust 2015 nga pinulongan (sa sinugdan, ang NLL gisuportahan lamang sa Rust 2018). Imbis nga magbuhat ug mga kinabuhi sa lebel sa leksikal, ang NLL naghimo niini sa lebel sa set sa mga pointer sa graph sa dagan sa pagpatuman. Kini nga pamaagi nagtugot kanimo sa pagdugang sa kalidad sa pagsusi sa paghulam sa mga variable (borrow checker) ug pagtugot sa pagpatuman sa pipila ka mga matang sa husto nga code, ang paggamit niini kaniadto misangpot sa usa ka sayup. Ang bag-ong kinaiya usab naghimo sa pag-debug nga mas sayon;
  • Bag-ong pagpatuman sa mga associative arrays gilakip HashMap, base sa paggamit sa istruktura Swiss Table (awtomatikong gikarga hashbrown::HashMap, gawas kon klaro nga gisulti, sama sa std::HashMap, nga gibase sa SipHash 1-3). Ang interface sa software nagpabilin nga pareho, ug ang mga kalainan nga namatikdan sa developer nagbukal sa pagtaas sa pasundayag ug pagkunhod sa konsumo sa memorya;
  • Sa package manager nga kargamento gidugang ang "--offline" nga kapilian, nga makapahimo sa operasyon nga dili maka-access sa network, diin ang mga pakete lamang nga naka-cache sa lokal nga sistema ang gigamit sa pag-instalar sa mga dependency. Kung ang pagsalig wala sa lokal nga cache, usa ka sayup ang ilabay. Aron i-preload ang mga dependency ngadto sa lokal nga cache sa dili pa mag-offline, mahimo nimong gamiton ang "cargo fetch" nga sugo;
  • Gipatuman ang abilidad sa pagtawag sa macro nga "dbg!" nagpakita sa daghang mga argumento;
  • Ang "const" nga hiyas, nga nagtino sa posibilidad sa paggamit sa bisan unsang konteksto imbis nga mga constant, gigamit alang sa mga pamaagi
    Layout::from_size_align_unchecked,
    mem::kinahanglan_drop,
    NonNull::nagbitay ug
    NonNull::cast;

  • Usa ka bag-ong bahin sa mga API ang gibalhin sa stable nga kategorya, lakip ang mga pamaagi nga na-stabilize
    buluhaton::Waker, buluhaton::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Basaha::read_vectored, Isulat::write_vectored,
    Iterator::gikopya,
    BorrowMut (alang sa mga kuwerdas) ug str::as_mut_ptr.

Source: opennet.ru

Idugang sa usa ka comment