Megjelent a Rust 1.93. Projektek: Rex, Fjall 3 és Arti 1.9.0

Megjelent a Rust 1.93 programozási nyelv kiadása, amelyet eredetileg a Mozilla projekt fejlesztett, de ma már a független, nonprofit Rust Foundation felügyelete alatt áll. A nyelv a memória biztonságos kezelésére összpontosít, és eszközöket biztosít a magas párhuzamosság eléréséhez anélkül, hogy szemétgyűjtőt és futási időt (runtime) igényelne; a futási idő a standard könyvtár alapvető inicializálására és karbantartására korlátozódik.

A Rust memória kezelésének módszerei megszüntetik a fejlesztők hibáit a mutatókkal való manipulálás során, és védelmet nyújtanak az alacsony szintű memória kezelésből adódó problémákkal szemben, mint például a már felszabadított memória területére való hivatkozás, null-pointer dereferálás, pufferméret túllépés stb. A könyvtárak terjesztésére, a build biztosítására és a függőségek kezelésére a Cargo csomagkezelő fejlesztés alatt áll. A könyvtárak elhelyezésére a crates.io tároló támogatott.

A memória biztonságos kezelése a Rustban a fordítási időben történik, a hivatkozások ellenőrzésén, az objektumok tulajdonjogának nyomon követésén, az objektumok élettartamának (láthatóságának) figyelembevételén és a memória hozzáférésének helyességének értékelésén keresztül a kód futtatásakor. A Rust emellett eszközöket biztosít az egész számok túllépésének elleni védelemhez, kötelezővé teszi a változók értékeinek inicializálását használat előtt, jobban kezeli a hibákat a standard könyvtárban, alkalmazza a változatlan (immutable) hivatkozások és változók fogalmát alapértelmezés szerint, és erős statikus típussal minimalizálja a logikai hibákat.

Főbb újítások:

  • A Rust szállításának részeként beépített Musl standard C könyvtár, amelyet statikus linkelésre használnak a "*-linux-musl" célplatformokon (aarch64-unknown-linux-musl, x86_64-unknown-linux-musl, powerpc64le-unknown-linux-musl stb.) Musl nélküli rendszereken, frissítve lett 1.2.5 verzióra. A dinamikus linkelés esetén a minimálisan támogatott Musl verzió szintén 1.2.5-re emelkedett. Korábban a Rust a Musl 1.2.3 verzióját használta, amelyben problémák voltak a DNS-lezáró implementációjával. A Musl 1.2.4 verzióban a DNS-lezáróhoz hozzáadták a TCP-n keresztüli kérés küldésének lehetőségét, ha az UDP-n keresztüli megkeresés sikertelen, ezzel megoldva a nagy DNS rekordok kérésével kapcsolatos problémát, és biztosítva a kompatibilitást olyan rekurszív DNS-szerverekkel, amelyek nem támogatták a részleges válaszok visszaadását az levágott UDP-válaszokban. A Musl 1.2.5 verzióban a DNS-lezáróban megvalósították a hosszú CNAME-sorozatokkal kapcsolatos válaszok feldolgozását, és orvosolták azt a problémát, amely miatt egyes nagy válaszok TCP-n keresztüli továbbítása során eldobásra kerültek.
  • A standard könyvtárat újraalkották annak érdekében, hogy megoldják a reentrabilitási problémákat, amelyek globális memóriaallokátorok Rust-ban történő használatakor, a std::thread_local! makró és a std::thread::current függvény alkalmazásakor merültek fel, ami végtelen rekurzióhoz vezetett. Annak érdekében, hogy elkerüljék azt a helyzetet, amikor a std::thread_local! és a std::thread::current a memóriaallokálás megkísérlésekor ugyanazt az allokát hívta volna meg, most közvetlenül a rendszer memóriaallokálási mechanizmusát alkalmazzák.
  • Az "asm!" blokkban lévő assembly kód esetén megengedett a "cfg" attribútumok használata, ami például lehetővé teszi a CPU kiterjesztett utasításkészleteinek aktiválását a kifejezések kontextusában az asm-blokkon belül (korábban a "cfg" attribútumok csak az egész asm-blokkra vonatkozhattak). asm!( // vagy global_asm! vagy naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // … #[cfg(target_feature = "sse2")] a = const 123, // csak sse2 esetén );
  • Új API-k kerültak a stabil kiadások közé, beleértve a metódusok és típusimplementációk stabilizálását:
    • <[MaybeUninit]>::assume_init_drop
    • <[MaybeUninit]>::assume_init_ref
    • <[MaybeUninit]>::assume_init_mut
    • <[MaybeUninit]>::write_copy_of_slice
    • <[MaybeUninit]>::write_clone_of_slice
    • String::into_raw_parts
    • Vec::into_raw_parts
    • ::unchecked_neg
    • ::unchecked_shl
    • ::unchecked_shr
    • ::unchecked_shl
    • ::unchecked_shr
    • ::as_array
    • ::as_array_mut
    • ::as_array
    • ::as_mut_array
    • VecDeque::pop_front_if
    • VecDeque::pop_back_if
    • Duration::from_nanos_u128
    • char::MAX_LEN_UTF8
    • char::MAX_LEN_UTF16
    • std::fmt::from_fn
    • std::fmt::FromFn
  • A célplatform „riscv64a23-unknown-linux-gnu” átkerült a második támogatási szintre, amely garantálja a fordítást, de nem biztosít garanciát a tesztcsomag átmenetére.

Továbbá megjegyezhetjük néhány Rust-tal kapcsolatos projektet:

  • A Linux kernelhez egy Rex keretrendszer fejlődik, amely lehetővé teszi Rust nyelven írt bővítmények készítését, amelyek a kernel funkcionalitásának bővítésére használhatók az eBPF helyett. A Rex ugyanazokat a biztonsági garanciákat nyújtja, mint az eBPF, de a Rust nyelv képességeit és egy könnyű futtatókörnyezetet használ a izoláláshoz és a biztonság biztosításához. Ezekhez a programokhoz nem alkalmaznak ellenőrzőt, és a programok natív kódra fordulnak a Rust fordító által.

    A Rex-programok a Rust nyelv biztonsági garanciáit nyújtó részhalmazának használatát teszik lehetővé. Jelenlegi formájukban 5 eBPF programtípust támogatnak: kprobe, perf_event, tracepoint, xdp és tc. Lehetőség van az eBPF segédfunkciók hívására, az eBPF map-struktúráival való interakcióra, a kernel erőforrásainak kezelésére, kivételek kezelésére és a kernel struktúrák feletti kötésekkel és absztrakciókkal való munkára.

  • Elérhetővé vált a Rustban írt Fjall 3, beágyazott tároló, amely kulcs-érték formátumú adatokkal dolgozik. Az adatok napló formájában, LSM-fájlforma (Log-Structured-Merge) alkalmazásával tárolódnak, mint a RocksDB, ahol a változtatások a fájl végére írt adatok hozzáadásával kerülnek rögzítésre. Az adatbázis elérésére BTreeMap-stílusú API-t kínálunk. Támogatott funkciók közé tartozik a névtér, közvetlen és fordított tartományszűrés, beépített tömörítés, sorba állítható tranzakciók, a kulcsok és a hozzájuk kapcsolódó nagyon nagy értékek elkülönített tárolása, valamint az adatbázis automatikus háttérkarbantartása. A kód nyílt Apache 2.0 licenc alatt áll.
  • A Tor projekt kiadta az Arti 1.9.0 verziót, amely a Tor eszközkészlet Rust nyelven írt megvalósítása. Amikor az Arti kódja eléri azt a szintet, hogy teljes mértékben helyettesítheti a C nyelvű változatot, a Tor fejlesztői az Arti-t a Tor alapértelmezett megvalósításává kívánják tenni, és fokozatosan leállítják a C nyelvű megvalósítás karbantartását. Az új verzió továbbfejlesztette a relay-ek és szerverek a Directory Authority működését, javította a dinamikusan hozzárendelt portokkal (proxy.socks_listen = "auto") való együttműködést, és egy kísérleti API-t is hozzáadott az onion-szolgáltatások kulcsainak kezeléséhez.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster