Megjelent a Rust 1.78. Borgo nyelv, amely egyesíti a Go és a Rust erősségeit

Megjelent a Mozilla projekt által alapított, de immár a Rust Foundation független non-profit szervezet égisze alatt kifejlesztett Rust 1.78 általános célú programozási nyelv. A nyelv a memória biztonságára összpontosít, és biztosítja az eszközöket a munka magas párhuzamosságának eléréséhez, miközben elkerüli a szemétgyűjtő és a futási időt (a futásidő a szabványos könyvtár alapvető inicializálására és karbantartására csökken).

A Rust memóriakezelési módszerei megóvják a fejlesztőt a mutatók manipulálása során előforduló hibáktól, és megóvják az alacsony szintű memóriakezelésből adódó problémáktól, mint például a memóriaterület elérése annak felszabadítása után, a nulla mutatók hivatkozásának megszüntetése, a puffertúllépések stb. A programkönyvtárak terjesztéséhez, a buildek biztosításához és a függőségek kezeléséhez a projekt fejleszti a Cargo csomagkezelőt. A crates.io tároló támogatja a könyvtárak tárolását.

A memóriabiztonságot a Rust a fordítási időben biztosítja a referenciaellenőrzés, az objektumok tulajdonjogának nyomon követése, az objektumok élettartamának (hatóköreinek) nyomon követésével és a memória-hozzáférés helyességének értékelésével a kód végrehajtása során. A Rust védelmet nyújt az egész számok túlcsordulása ellen is, megköveteli a változó értékek kötelező inicializálását használat előtt, jobban kezeli a hibákat a szabványos könyvtárban, alapértelmezés szerint alkalmazza a megváltoztathatatlan hivatkozások és változók koncepcióját, erős statikus gépelést kínál a logikai hibák minimalizálása érdekében.

Főbb újítások:

  • Új „#[diagnosztika]” attribútum névteret javasoltak, amely lehetőséget biztosít a fordító által generált hibaüzenetek befolyásolására. Az új területen az első a "#[diagnostic::on_unimplemented]" attribútum, amellyel személyre szabhatóak az olyan helyzetekben megjelenő hibaüzenetek, amikor a típushoz nem implementált tulajdonságot kell használni. #[diagnostic::on_unimplemented( message = "Az `ImportantTrait<{A}>` üzenetem nincs implementálva `{Self}`-hez", label = "Saját címkém", note = "1. megjegyzés", note = "Megjegyzés 2" )] trait ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } error[E32]: Üzenetem az `ImportantTrait ` nincs implementálva a `String' számára —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ Saját címkém | | | a jelen felhívás által bevezetett kötés | = segítség: a tulajdonság `FontosTrait ` nincs implementálva a `String` = megjegyzés: 18. megjegyzés = megjegyzés: 12. megjegyzés
  • A nem biztonságos függvényekre alkalmazott érvényesítés előtti ellenőrzések most elhalaszthatók a kódgenerálásig, így ezek az ellenőrzések anélkül hajthatók végre, hogy a szabványos könyvtárat "#[cfg(debug_assertions)]" módban kellene felépíteni. Az ellenőrzések elindításához elegendő engedélyezni a hibakeresési állításokat a kód teszt- vagy hibakeresési buildjeihez.
  • A szabványos könyvtárban a mutatók és szeletek igazítását befolyásoló függvények viselkedése immár előre jelezhető futás közben, és a bemeneti adatoktól függ. A pointer::align_offset függvény, amely az eltolást számítja ki a mutató igazításához, most csak akkor adja vissza a use::MAX értéket, ha a művelet sikertelen. A slice::align_to és slice::align_to_mut függvények, amelyek a szeleteket egy igazított középső szelettel és az eredeti kezdő és záró szelettel ábrázolják, most mindig a legnagyobb középső részt adják vissza.
  • Az alábbiak kerültek stabil kategóriába:
    • impl Olvassa el &Stdin
    • Engedélyezze a nem statikus (nem statikus) élettartam használatát egyes std::error::Error-alapú megvalósításoknál.
    • Impl implementáció ?Méret érték megengedett.
    • impl From io::Error esetén
  • A Barrier::new() függvényt stabilizálták, hogy konstansok helyett a "const" attribútummal használható legyen bármilyen környezetben.
  • Az x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm és i686-gnullvm platformokhoz most legalább Windows 10 verzió szükséges.
  • A harmadik támogatási szint a wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf és lolongarch64-unknown-linux-musl platformokon valósult meg. A harmadik szint alapvető támogatást foglal magában, de automatikus tesztelés, hivatalos buildek közzététele és a kód összeállíthatóságának ellenőrzése nélkül.
  • Az Add wasm32-wasip1 célplatform támogatásának második szintje megvalósult. A támogatás második szintje összeszerelési garanciával jár.
  • A wasm32-wasi-preview1-threads platform átnevezve wasm32-wasip1-threadsre.
  • A fordító LLVM 18 használatára vált. Az LLVM 18 x86-32 és x86-64 architektúrákhoz való használatakor az u128 és i128 típusokhoz társított ABI módosult.
  • A Cargo paktumkezelőben a zárfájlok 4-es verziója (lockfile v4) stabilizálva lett.
  • A Cargo stabilizált globális gyorsítótárral rendelkezik, amely információkat tartalmaz a legújabb adathasználatról. A gyorsítótárat a $CARGO_HOME/.global-cache tárolja SQLite használatával, és automatikusan frissül, hogy tükrözze az index, a ládafájl, a kódkönyvtár, a git klón és a git checkout legújabb változásait.

Ezenkívül a Borgo programozási nyelv próbál kifejezőbb, mint a Go nyelv, de kevésbé bonyolult, mint a Rust nyelv. A Borgo egyesíti a Go és a Rust legjobb tulajdonságait, pótolva az egyes nyelvek hiányosságait. Például a Go egyszerű és egyértelmű, de nem nyújt fejlett típusú biztonsági funkciókat. A Rust nyelv eszközöket biztosít a biztonságos programozáshoz, de túlbonyolított. A projektet Marco Sampellegrini, a The Simple Haskell Handbook szerzője és a Quad CI folyamatos integrációs rendszer fejlesztője fejleszti.

Megjelent a Rust 1.78. Borgo nyelv, amely egyesíti a Go és a Rust erősségeit

A Borgo statikus gépelést, Go-szerű típusokat és Rust-szerű szintaxist használ. A pontosvessző nem kötelező a sorok végén a Borgo-kódban. A Borgo kódot egy Go reprezentációba fordítják, amely teljes mértékben kompatibilis a meglévő Go csomagokkal. A fordítókód Rust nyelven íródott, és az ISC licence alatt kerül terjesztésre. használja az fmt enum NetworkState parancsot { Loading, Failed(int), Success(T), } struct Válasz { cím: karakterlánc, időtartam: int, } fn main() { let res = Válasz { title: "Hello world", időtartam: 0, } let state = NetworkState.Success(res) let msg = match state { NetworkState.Loading => “még mindig betöltés”, NetworkState.Failed(code) => fmt.Sprintf(“Hibakód: %d”, kód), NetworkState.Success (res) => res.title, } fmt.Println(msg) }

Forrás: opennet.ru

Hozzászólás