Rust 1.36 Programazio Lengoaia kaleratzea

argitaratua sistemaren programazio lengoaia kaleratzea Herdoila 1.36, Mozilla proiektuak sortua. Lengoaiak memoriaren segurtasunean oinarritzen da, memoria automatikoki kudeatzen du eta zereginen paralelismo handia lortzeko bitartekoa eskaintzen du zabor-biltzaile edo exekuzio-denbora erabili gabe.

Rust-en memoria-kudeaketa automatikoak garatzailea erakusleen manipulaziotik askatzen du eta maila baxuko memoriaren manipulaziotik sortzen diren arazoetatik babesten du, hala nola, memoria librearen ondorengo sarbideetatik, erakusle nuluen deserreferentziak, buffer gainezkatzeetatik eta antzekoetatik. Liburutegiak banatzeko, muntaia ziurtatzeko eta proiektuaren mendekotasunak kudeatzeko pakete-kudeatzaile bat garatzen ari da. Zama, programarako beharrezkoak diren liburutegiak klik bakarrean eskuratu ahal izateko. Biltegi bat onartzen da liburutegiak ostatatzeko kaxak.io.

Nagusia berrikuntzak:

  • Ezaugarria egonkortu Etorkizuna, zeinaren ebaluazioa oraindik amaitu ez den balio bat adierazten du async / .wait blokeak erabiltzen diren bitartean. Etorkizuna erabiliz definitutako balio asinkronoek harian lan erabilgarria exekutatzen jarraitzea ahalbidetzen dute, aldi berean, balio jakin bateko kalkuluak amaitu arte zain;
  • Liburutegia egonkortuta alok, memoriak esleitutako balioak kudeatzeko erakusle eta bilduma adimendunak eskaintzen dituena. Std-n memoria-esleipenak orain mota erabiltzen du Gauza bat, aloketatik berriro esportatzen direnak. Alloc-en erabilera bereizteak zentzua du std-ri lotuta ez dauden aplikazioetan ("#![no_std]"), baita std gabeko antzeko programetan erabiltzeko diseinatutako liburutegietan ere;
  • Balioak zuzen hasteko egiaztapenak saihesteko proposatu tarteko mota Agian Unitatea, mem::uninitialized funtzioaren ordez erabil daitekeena alternatiba seguruago gisa. Mem::uninitialized funtzioa erosoa da matrizeak azkar sortzeko, baina konpilatzailea engainatzen du hasieratuta dagoela dirudielako, baina errealitatean balioak hasieratu gabe jarraitzen du. MaybeUninit-ek aukera ematen dio konpilatzaileari berariaz adierazteko balioa hasieratu gabe dagoela, honekin lotutako jokaera zehaztugabe posiblea kontuan hartzeko, eta, gainera, programetan egiaztapenak antolatzeko "maybe_t:" eta urratsez urrats hasieratzeko, bere osaketa markatuz. β€œ.assume_init()” deia erabiliz. MaybeUninit-en etorrerarekin, mem::uninitialized funtzioa zaharkituta geratu da eta ez da erabiltzea gomendatzen;
  • NLL (Non-Lexical Lifetimes) teknika, mailegatutako aldagaien iraupena erregistratzeko sistema zabaldu zuena, egonkortu da Rust 2015 hizkuntzarako (hasieran, NLL Rust 2018-k bakarrik onartzen zuen). Bizitza-denborak lexiko mailan konprometitu beharrean, NLLk exekuzio-fluxuaren grafikoko erakusle multzoaren mailan egiten du. Ikuspegi honek aldagaien maileguaren egiaztapenaren kalitatea areagotzea ahalbidetzen du (mailegu egiaztatzailea) eta kode zuzen mota batzuk exekutatzeko aukera ematen du, zeinaren erabilerak errore bat ekarri zuen aurretik. Portaera berriak arazketa ere askoz errazten du;
  • Array elkartuen inplementazio berria barne HashMap, egituraren aplikazioan oinarrituta Suitzako taula (automatikoki kargatuta hashbrown::HashMap, esplizituki kontrakoa adierazi ezean, hala nola std::HashMap, SipHash 1-3-n oinarritzen dena). Software-interfazea berdina izaten jarraitzen du, eta garatzaileak nabaritzen dituen desberdintasunak errendimendu handiagoan eta memoria-kontsumoaren murrizketan murrizten dira;
  • Pakete-kudeatzailea zaman gehitu β€œ--offline” aukera, sarera sartu gabe funtzionamendua ahalbidetzen duena, zeinetan sistema lokalean cachean dauden paketeak bakarrik erabiltzen diren mendekotasunak instalatzerakoan. Mendekotasuna cache lokalean ez badago, errore bat botako da. Menpekotasunak aurrez kargatzeko tokiko cachean lineaz kanpo joan aurretik, "karga eskuratu" komandoa erabil dezakezu;
  • Makroari "dbg!" deitzeko gaitasuna ezarri da. hainbat argudio adieraziz;
  • Metodoetarako erabiltzen da "const" atributua, konstanteen ordez edozein testuingurutan erabiltzeko aukera zehazten duena.
    Diseinua::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::zintzilik eta
    NonNull::cast;

  • APIen zati berri bat kategoria egonkorrera transferitu da, egonkortu diren metodoak barne
    task::Waker, task::Poll,
    VecDeque::biratu_ezkerrera, VecDeque::biratu_eskuinera,
    Read::read_vectored, Write::write_vectored,
    Iteratzailea::kopiatua,
    BorrowMut (kateetarako) eta str::as_mut_ptr.

Iturria: opennet.ru

Gehitu iruzkin berria