Rust 1.38 programozási nyelv kiadás

közzétett rendszer programozási nyelv kiadása Rozsda 1.38, 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:

  • Hozzáadott egy csővezetékes fordítási módot (csővezetékes), amelyben a függő ládacsomag felépítése azonnal megkezdődik, amint a függőségi metaadatok elérhetővé válnak, anélkül, hogy megvárnák a fordítás befejezését. Csomag összeállításakor a függőségeket nem kell teljesen összeállítani, csak meg kell határozni a metaadatokat, amelyek tartalmazzák a típusok, függőségek és exportált elemek listáját. A metaadatok a fordítási folyamat korai szakaszában elérhetőek, így a linkelt csomagok már sokkal korábban összeállíthatók. Egyetlen csomagok készítésekor a javasolt mód nem befolyásolja a teljesítményt, de ha az összeállítás elágazó függőségű csomagokat fed le, a teljes összeállítási idő 10-20%-kal csökkenthető;
  • Biztosítja a funkciók helytelen használatának észlelését std::mem::inicializálva и std::mem::nullázva. Például az std::mem::uninitialized kényelmes a tömbök gyors létrehozásához, de félrevezeti a fordítót, mert úgy tűnik, hogy inicializál, de a valóságban az érték inicializálatlan marad. A mem::uninitialized függvény már elavultként van megjelölve, és javasolt helyette egy köztes típus használata TalánUnit. Ami a mem::zeroed-et illeti, ez a függvény problémákat okozhat azoknál a típusoknál, amelyek nem fogadnak el nulla értékeket.

    A nem definiált viselkedés azonosítása érdekében az új kiadás egy szálellenőrzést ad a fordítóhoz, amely a mem::uninitialized vagy a mem::zeroed problémákat észlel. Például most hibaüzenet jelenik meg, amikor megpróbálja használni a mem::uninitialized vagy mem::zeroed parancsot &T és Box‹T› típusokkal, amelyek olyan mutatóobjektumokat képviselnek, amelyek nem fogadhatnak el null értékeket;

  • Az „#[elavult]” attribútumot kibővítettük, hogy lehetővé tegye a rekeszcsomagok elavultként való megjelölését és a későbbi törlés ütemezését. A Rust 1.38-tól kezdve ez az attribútum makrókhoz is használható;
  • Hozzáadtuk a „#[global_allocator]” attribútum használatának lehetőségét az almodulokban;
  • Funkció hozzáadva std::any::type_name, amely lehetővé teszi a típus nevének kiderítését, ami hasznos lehet hibakeresési célokra. Például a program végrehajtása során megtudhatja, hogy milyen típusú függvényt hívtak:

    fn gen_value‹T: Alapértelmezett>() -› T {
    println!("A(z) {} példányának inicializálása", std::any::type_name::‹T›());
    Alapértelmezett::default()
    }

    fn main() {
    legyen _: i32 = gen_value(); # "i32" lesz kinyomtatva
    legyen _: String = gen_value(); # kiírja az "alloc::string::String" kifejezést
    }

  • A szabványos könyvtár kiterjesztett funkciói:
    • slice::{concat, connect, join} mostantól a &[T] értéket is felveheti a &T;
    • A "*const T" és a "*mut T" most megvalósítja a jelölőt::Unpin;
    • Az "Arc‹[T]›" és az "Rc‹[T]›" most megvalósítja a FromIterator‹T›-et;
    • iter::{StepBy, Peekable, Take} most implementálja a DoubleEndedIteratort.
    • Az ascii::EscapeDefault a klónozást és a megjelenítést valósítja meg.
  • Az API-k új része átkerült a stabil kategóriába, beleértve a stabilizált módszereket is
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Időtartam::as_secs_f{32|64},
    • Időtartam::div_duration_f{32|64},
    • Időtartam::div_f{32|64},
    • Időtartam::from_secs_f{32|64},
    • Időtartam::mul_f{32|64},
    • osztási műveletek a maradékkal
      div_euclid és rem_euclid minden integer primitívhez;

  • Támogatás hozzáadva a „--features” opció többszöri megadásához, hogy különböző funkciókat engedélyezzen a rakománycsomag-kezelőben;
  • A fordító egy harmadikat biztosít szint Támogatás a célplatformokhoz aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc targets,-mlinuxv7 -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl és riscv32i-unknown-none-elf. A harmadik szint alapvető támogatást foglal magában, de automatikus tesztelés és a hivatalos buildek közzététele nélkül.

Forrás: opennet.ru

Hozzászólás