Rust 1.40 programozási nyelv kiadás

közzétett rendszer programozási nyelv kiadása Rozsda 1.40a Mozilla projekt alapította. A nyelv a biztonságos memóriakezelésre összpontosít, automatikus memóriakezelést biztosít, és biztosítja a magas párhuzamos munkavégzés elérését, miközben elkerüli a szemétgyűjtő és futásidejű.

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áadtuk a szerkezetek (struct) és felsorolások (enum és Variant blokk) megjelölésének képességét a " attribútummal#[nem_kimerítő]", melyik lehetővé teszi a jövőben adjon hozzá új mezőket és opciókat a deklarált struktúrákhoz és felsorolásokhoz. Például a nyilvánosan deklarált mezőket tartalmazó struktúrákkal rendelkező modulok fejlesztői a "#[non_exhaustive]" használatával jelölhetik meg azokat a struktúrákat, amelyekhez a jövőben új mezőket adnak hozzá. Eddig ebben a helyzetben a fejlesztő kénytelen volt választani a mezők privát deklarálása és a mezők megváltoztathatatlan listájához való kötődés között. Az új attribútum megszünteti ezt a korlátozást, és lehetővé teszi új mezők hozzáadását a jövőben anélkül, hogy fennállna a korábban lefordított külső kód feltörése. A ládacsomagokban a „match” szakasz opcióinak egyeztetésekor a „_ => {...}” maszk explicit definíciója szükséges, amely lefedi a lehetséges jövőbeli mezőket, különben hiba jelenik meg új mezők hozzáadásakor.
  • Hozzáadva az eljárási makró mac!() típuskontextusban való meghívásának képessége. Például most beírhatja a következőt: „type Foo = expand_to_type!(bar);”, ha a „expand_to_type” eljárási makró.
  • Az "extern { ... }" blokkban tette hozzá eljárási és attribútummakrók használatának képessége, beleértve a „bang!()” makrókat, például:

    makro_szabályok! make_item { ($név:azonosító) => { fn $név(); } }

    extern {
    make_item!(alpha);
    make_item!(béta);
    }

    extern "C" {
    #[saját_azonosító_makró] fn foo();
    }

  • Makrókban végrehajtva „macro_rules!” elemek létrehozásának képessége. "macro_rules!" generálása függvényszerű makrókban („mac!()”) és attribútumok formájában („#[mac]”) lévő makrókban is lehetséges.
  • A $m:meta leképezési elemben tette hozzá tetszőleges token felsorolási értékek ("[TOKEN_STREAM]", "{TOKEN_STREAM}" és "(TOKEN_STREAM)") támogatása, például:

    makro_szabályok! accept_meta { ($m:meta) => {} }
    elfogad_meta!( my::path );
    elfogad_meta!( my::path = "világít" );
    elfogad_meta!( my::path ( abc ) );
    accept_meta!( my::path [ abc ] );
    accept_meta!( my::path { abc } );

  • Rust 2015 módban a hibakimenet engedélyezve van a változók kölcsönzésének (kölcsönzés-ellenőrző) NLL (Non-Lexical Lifetimes) technikával történő ellenőrzése során azonosított problémák esetén. Korábban a figyelmeztetéseket hibák váltották fel Rust 2018 módban.
    Miután a változást kiterjesztették a Rust 2015 módra, a fejlesztők végre sikerült megszabadulni a régi kölcsönellenőrzőből.

    Emlékezzünk vissza, hogy a kölcsönzött változók élettartamát figyelembe vevő új mechanizmuson alapuló ellenőrző rendszer lehetővé tette néhány olyan probléma azonosítását, amelyeket a régi ellenőrző kód nem vett észre. Mivel az ilyen ellenőrzések hibakimenete befolyásolhatja a korábban működő kóddal való kompatibilitást, kezdetben figyelmeztetéseket adtak ki hibák helyett.

  • A „const” attribútumot, amely meghatározza, hogy konstansok helyett tetszőleges környezetben használható-e, az is_power_of_two függvény (előjel nélküli egész számok esetén) használatos.
  • Az API új része átkerült a stabil kategóriába, beleértve a todo!() makrót és a slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value metódusokat.
    Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_32, f64}::from_be_bytes, {f32,f64}::from_le_bytes és {f32,f64}::from_ne_bytes.

  • A csomagkezelő rakományában
    végrehajtva gyorsítótárazott fordítói figyelmeztetések a lemezen. A "cargo metadata" opció hozzáadva a "cargo metadata" parancshoz--szűrő-platform", hogy csak a megadott célplatformhoz kötött csomagok jelenjenek meg a függőségi feloldás oszlopában. A http.ssl-version konfigurációs opció hozzáadva az érvényes TLS-verziók meghatározásához.
    Lehetőséget adtunk a szakasz közzétételéredev-függőségek" a "verzió" kulcs megadása nélkül.

  • A rustc fordító harmadik szintű támogatást biztosít a thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 és mips64el-unknown-linux-muslabi64 célplatformokhoz. 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