Megjelent a Rust 1.97. A Rust nyelven írt Zinnia kernel és a kulcsalapú címzésű P2P rendszer, az Iroh

Megjelent a Rust 1.97 programozási nyelv kiadása, amelyet a Mozilla projekt alapított, de ma már egy független, nonprofit szervezet, a Rust Foundation támogatásával fejlődik. A nyelv a biztonságos memóriahasználatra összpontosít, és eszközöket biztosít a feladatok magas párhuzamosságának eléréséhez, miközben elkerüli a szemétgyűjtőt és a futási időt (a futási idő alapvető inicializálásra és a standard könyvtár karbantartására korlátozódik).

A Rust memória kezelésének módszerei arra irányulnak, hogy kiküszöböljék a pointerekkel végzett manipuláció során fellépő hibákat, és megvédjék a memória alacsony szintű használatából adódó problémáktól, mint például a már felszabadított memória területekhez való hozzáférés, a null pointerek dereferálása, a buffer túlfolyás és hasonlók. A könyvtárak terjesztésére, a fordítás biztosítására és a projektek függőségeinek kezelésére a Cargo csomagkezelő fejlődik.

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:

  • Alapértelmezés szerint bekapcsolták az új névdekorálási (mangling) sémát a létrehozott objektum- és végrehajtható fájlokban található függvények, globális változók és adatszerkezetek neveihez (-Csymbol-mangling-version=v0). A neveket a különböző programok összekapcsolása közbeni konfliktusok elkerülése érdekében dekorálják, specifikus kontextus, például a modul útvonala és a crate-csomag neve által.

    A korábban használt névdekorálási séma, amely az Itanium ABI-n alapult, olyan hátrányokkal rendelkezett, mint a generikus paraméterek olvashatatlan hash értékekre való cserélése, valamint az Itanium ABI-t nem használó fordítórészek megléte, amely speciális Rust névdekódolókat igényelt. A Rust 1.97-ben alapértelmezés szerint egy olyan névdekorálási sémát alkalmaznak, amelyet kifejezetten a Rust számára fejlesztettek ki és mentes a felsorolt hátrányoktól. A régi sémát a következő kiadások egyikében tervezik eltávolítani.

  • A cargo csomagkezelőbe beépítették a figyelmeztetések fordító általi generálásaira adott reakciók kezelését a build során. Hozzáadták a CARGO_BUILD_WARNINGS környezeti változót, amely három értéket vehet fel: warn (alapértelmezett) - figyelmeztetések kiírása a képernyőre; allow - figyelmeztetések kiírásának elrejtése; deny - a figyelmeztetések hibaként való kezelése, amely megállítja a buildet.

    Korábbi verziókban a build befejezéséhez a fordító RUSTFLAGS opciójaként "-Dwarnings" megadása volt szükséges, de a RUSTFLAGS módosítása esetén a cargo csomagkezelő az építést újnak tekintette, nem vette figyelembe a cache adatait, és az egész projektet nulláról újra kellett fordítani. A beállítást a cargo oldalára való áthelyezése kiküszöbölte a cache törlését és a teljes újrafordítás szükségességét a figyelmeztetések feldolgozási módjának megváltoztatásakor, valamint egyszerűsítette a figyelmeztetések hibaként való kezelésének beépítését a folyamatos integrációs rendszerekbe.

  • Alapértelmezés szerint a linker által kibocsátott üzenetek megjelenítése be van kapcsolva. Az üzenetek figyelmeztetések formájában jelennek meg, egy speciális lint-szabály révén, amely a "linker_messages" néven ismert, és nem tartozik a standard "figyelmeztetések" csoportjába. A rustc kiszűri azokat az üzeneteket, amelyek tipikus hamis pozitívok, vagy normális viselkedés, és csak azokat a figyelmeztetéseket hagyja meg, amelyek problémákra utalhatnak, például az elavult opciók és nem kívánt beállítások figyelmeztetéseit. Korábban a linker által kibocsátott információ csak hibás befejezéskor volt látható, egyébként az összes üzenet el volt rejtve. Az régi viselkedés visszaállításához a Cargo.toml fájlban a következőket kell hozzáadni: [lints.rust] linker_messages = "allow"
  • Ú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:
    • Alapértelmezett a RepeatN-hez
    • Másolat az ffi::FromBytesUntilNulErrorhez
    • Küldés a std::fs::File számára UEFI alatt
    • ::isolate_highest_one
    • ::isolate_lowest_one
    • ::highest_one
    • ::lowest_one
    • ::bit_width
    • NonZero::isolate_highest_one
    • NonZero::isolate_lowest_one
    • NonZero::highest_one
    • NonZero::lowest_one
    • NonZero::bit_width
  • A "const" jelző alkalmazva van a char::is_control metódusban.

Érdemes megemlíteni a Rust-tal kapcsolatos, nemrégiben bejelentett projekteket és eseményeket:

  • A zinnia projekt egy moduláris Unix-szerű rendszert fejleszt, amelyet Rust nyelven írtak, és GPLv2 licenc alatt terjesztenek. A kernel támogatja a POSIX interfészeket és néhány BSD és Linux-ból származó kiterjesztést, mint például az epoll és timerfd. A megjelenítéshez és a bemenet kezeléséhez DRM (Direct Rendering Manager) és evdev illesztőprogramok állnak rendelkezésre. A megvalósított funkciók elegendőek az X-szerver és a kompozit Weston alapú Xfce asztali környezet működtetéséhez. a szerver Támogatott a bootolás QEMU emulátorban, valamint valós hardveren, mint például a ThinkPad E14 G7 laptop.
  • Megjelent az iroh 1.0 kommunikációs könyvtár, amely lehetővé teszi a hálózati kapcsolatok létrehozását különböző hosztokon lévő alkalmazások között, kriptográfiai kulcsokon keresztül csatlakozva, ahelyett hogy IP-címek (meg kell adni a kulcsot, amelyhez csatlakozni kell, és az iroh megtalálja a hozzá tartozó hosztot, és titkosított kapcsolatot létesít a QUIC protokoll használatával). Ha lehetséges, közvetlen P2P-kapcsolatok jönnek létre, de ha ez nem lehetséges, rollback a relay-eken keresztül történik, amelyeket a kulcsok szerinti hosztok felfedezésére is használnak. Lehetőség van saját relay beállítására, vagy csatlakozni a közösség által támogatott nyilvános relayekhez.

    A kibővített lehetőségek között szerepel a Multipath QUIC támogatása a csomagok egyszerre több útvonalon történő továbbítására, NAT mögötti működés lehetősége, statikus konfigurációs mód lokális eszközök internet hozzáférés nélküli csatlakoztatásához, a WASM köztes kód összeállításának lehetősége a böngészőben való végrehajtás érdekében, valamint saját szállítók létrehozásának támogatása, például Bluetooth, WiFi Aware vagy LoRa csatlakozásához. A kód Rust nyelven készült, és az Apache-2.0 és MIT licenc alatt terjesztik. Python, Node.js, Kotlin és Swift nyelvekhez is elérhetők a kötések.

  • A Bun szerveroldali JavaScript-platform készítője közzétett egy cikket a Bun Zig nyelvről Rust nyelvre való átírásáról, amelyhez a Claude Fable AI-modellt használták. Megjegyezték, hogy a Bun 1.3.14 lesz az utolsó Zig-re épülő kiadás, és a következő Bun 1.4.0 verzió már Rust-ra készült. A tesztek alapján a Rust verzió jelentősen kevesebb memóriát használ, és 2-5%-kal gyorsabb, mint a Zig verzió. A Rust verzió végrehajtható fájlja 20%-kal kisebb lett.

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