Rust 1.36 programozási nyelv kiadás

közzétett rendszer programozási nyelv kiadása Rozsda 1.36, amelyet a Mozilla projekt alapított. A nyelv a memória biztonságára összpontosít, automatikus memóriakezelést biztosít, és lehetőséget biztosít a magas szintű párhuzamosság elérésére szemétgyűjtő vagy futási idő nélkül.

A Rust automatikus memóriakezelése megszabadítja a fejlesztőt a mutatómanipulációtól, és megvédi az alacsony szintű memóriakezelésből eredő problémákat, mint például az utólagos memóriaelérések, a nulla mutatóhivatkozások, a puffertúllépések és hasonlók. Csomagkezelő fejlesztés alatt áll a könyvtárak terjesztésére, az összeállítás biztosítására és a függőségek projekt általi kezelésére. Szállítmány, amely lehetővé teszi, hogy egy kattintással megszerezze a programhoz szükséges könyvtárakat. Egy tárhely támogatott a könyvtárak fogadására ládák.io.

A főbb innovációk:

  • A tulajdonság stabilizálódott Jövő, amely egy olyan értéket képvisel, amelynek kiértékelése még nem fejeződött be az async / .await blokkok használata közben. A Future segítségével definiált aszinkron értékek lehetővé teszik a hasznos munka folytatását a szálban, miközben egyidejűleg várnak egy bizonyos értékű számítások befejezésére;
  • A könyvtár stabilizálódott alloc, amely intelligens mutatókat és gyűjteményeket biztosít a memória-lefoglalt értékek kezeléséhez. A memóriafoglalás az std-ben most a típust használja Egy dolog, amelyeket újraexportálnak az alloc. Az alloc külön használatának van értelme azokban az alkalmazásokban, amelyek nem kapcsolódnak std-hez („#![no_std]”), valamint a hasonló, std nélküli programokban való használatra tervezett könyvtárakban;
  • Az értékek helyes inicializálására vonatkozó ellenőrzések megkerüléséhez javasolta köztes típus TalánUnit, amely biztonságosabb alternatívaként használható a mem::initialized funkció helyett. A mem::uninitialized függvény kényelmes tömbök gyors létrehozásához, de félrevezeti a fordítót, mert úgy tűnik, hogy inicializálódott, de a valóságban az érték inicializálatlan marad. A MaybeUninit lehetővé teszi, hogy kifejezetten jelezze a fordítónak, hogy az érték inicializálatlan, hogy figyelembe vegye az ezzel kapcsolatos esetleges meghatározatlan viselkedést, valamint a programok ellenőrzésének megszervezését a „maybe_t:” és lépésről lépésre történő inicializálással, jelezve annak befejezését. az „.assume_init()” hívás használatával. A MaybeUninit megjelenésével a mem::initialized funkció elavult, és használata nem javasolt;
  • Az NLL (Non-Lexical Lifetimes) technikát, amely kibővítette a kölcsönzött változók élettartamának rögzítésére szolgáló rendszert, stabilizálták a Rust 2015 nyelven (kezdetben az NLL-t csak a Rust 2018 támogatta). Ahelyett, hogy lexikális szinten kötött volna le élettartamokat, az NLL ezt a végrehajtási folyamatgráf mutatókészletének szintjén teszi. Ez a megközelítés lehetővé teszi a változók kölcsönzésének ellenőrzésének minőségének javítását (kölcsönellenőrző), és lehetővé teszi bizonyos típusú helyes kódok végrehajtását, amelyek használata korábban hibához vezetett. Az új viselkedés a hibakeresést is sokkal könnyebbé teszi;
  • Az asszociatív tömbök új megvalósítása tartalmazza HashMap, a szerkezet alkalmazása alapján Svájci asztal (automatikusan betöltődik hashbarna::HashMap, hacsak nincs kifejezetten másképp jelezve, például std::HashMap, amely a SipHash 1-3-on alapul). A szoftveres felület változatlan marad, és a fejlesztő számára észrevehető különbségek a megnövekedett teljesítményben és a csökkentett memóriafelhasználásban rejlenek;
  • A csomagkezelő rakományában tette hozzá a „--offline” opció, amely lehetővé teszi a hálózathoz való hozzáférés nélküli működést, amelyben csak a helyi rendszerben gyorsítótárazott csomagok kerülnek felhasználásra a függőségek telepítésekor. Ha a függőség nincs a helyi gyorsítótárban, hibaüzenet jelenik meg. A függőségek előzetes betöltéséhez a helyi gyorsítótárba, mielőtt offline állapotba lépne, használhatja a „cargo fetch” parancsot;
  • Megvalósította a makró „dbg!” több érv megjelölése;
  • A metódusokhoz a „const” attribútumot használjuk, amely meghatározza a konstansok helyett bármely kontextusban való használat lehetőségét
    Elrendezés::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::lógó és
    NonNull::cast;

  • Az API-k új része átkerült a stabil kategóriába, beleértve a stabilizált módszereket is
    feladat::Ébresztő, feladat::Szavazás,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Olvasás::read_vectored, Írás::write_vectored,
    Iterátor::másolt,
    BorrowMut (karakterláncokhoz) és str::as_mut_ptr.

Forrás: opennet.ru

Hozzászólás