Rust 1.88 kiadása. Munal operációs rendszer és rsched eszköz Rustban

Megjelent a Mozilla által indított, de ma már a Rust Foundation független nonprofit szervezet által fejlesztett Rust 1.88, általános célú programozási nyelv új verziója. A nyelv a memória biztonságos kezelésére összpontosít, és eszközöket biztosít a feladatok magas párhuzamos végrehajtásának eléréséhez, mindezt anélkül, hogy szemétgyűjtőt vagy futási időt használna (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 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:

  • Lehetőség nyílt több «let» kifejezés használatára az «if» és «while» feltételes blokkokban a «&&» (logikai ÉS) operátorral való összekapcsolásukkal. A «let» kifejezések kombinálhatóak bool típusú feltételekkel. A let-kifejezésekben deklarált változók a következő feltételekben és a «if» és «while» blokkokban is felhasználhatók. if let Channel::Stable(v) = release_info() && let Semver { major, minor, .. } = v && major == 1 && minor == 88 {
  • Támogatás került bevezetésre «meztelen» függvények írására, amelyeket az «#[unsafe(naked)]» attribútum jelöl, és amelyekben egyetlen «naked_asm!» hívás található. Az így létrehozott függvényekből hiányzik a fordító által generált epilógus és prologus, ami lehetővé teszi a fejlesztő számára, hogy teljesen ellenőrizze a funkciónak megfelelő segédassembler kódot (a «meztelen» függvény csak a fejlesztő által megadott assembler utasításokat tartalmazza, és nem tartalmazza a fordító által hozzáadott argumentumkezelőket és visszatérítési értékeket). A «meztelen» függvények kényelmesebb alternatívaként tekinthetők a «global_asm!» blokkban definiált függvényekhez. #[unsafe(naked)] pub unsafe extern «sysv64» fn wrapping_add(a: u64, b: u64) -> u64 { core::arch::naked_asm!( «add rax, rdi, rsi», «ret» ); }
  • A predikátum nyelv, amely a «cfg» és «cfg_attr» feltételes fordítási attribútumokban alkalmazható (ezek lehetővé teszik a kód bizonyos részeinek bekapcsolását vagy kikapcsolását adott feltételek alapján), mostantól támogatja az «true» és «false» bool literálokat, amelyek az mindig bekapcsolt vagy mindig kikapcsolt konfigurációkkal azonosak. Ezeket a literálokat a «cfg!» makróban és a Cargo manifesztumokban és konfigurációkban található «[target]» táblázatokban is használhatjuk. A cfg(true) és cfg(false) kifejezések a cfg(all()) és cfg(any()) helyett alkalmazhatóak a szándékok egyértelműbb kifejezésére.
  • A Cargo csomagkezelő automatikus szemétgyűjtő futtatását tartalmazza, amely a felhasználó otthoni könyvtárában található gyorsítótár tisztításáért felel. Korábban a gyorsítótárban tárolt, letöltött függőségeket tartalmazó csomagok nem lettek törölve, ami folyamatosan növelte a lemezhasználatot. Az aktivált szemétgyűjtő automatikusan eltávolítja a külsőleg letöltött crate-fájlokat, amelyeket több mint 3 hónapja nem használtak, és a helyben telepített crate-fájlokat, amelyeket több mint egy hónapja nem értek el. A gyorsítótár tisztítása nem indul el, ha a crage opciókat használ, mint a „—offline” vagy a „—frozen”.
  • Ú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:
    • Cell::update
    • impl Default for *const T
    • impl Default for *mut T
    • mod ffi::c_str
    • HashMap::extract_if
    • HashSet::extract_if
    • hint::select_unpredictable
    • proc_macro::Span::line
    • proc_macro::Span::column
    • proc_macro::Span::start
    • proc_macro::Span::end
    • proc_macro::Span::file
    • proc_macro::Span::local_file
    • ::as_chunks
    • ::as_rchunks
    • ::as_chunks_unchecked
    • ::as_chunks_mut
    • ::as_rchunks_mut
    • ::as_chunks_unchecked_mut
  • A «const» jelző alkalmazása a funkciókban:
    • NonNull::replace
    • ::replace
    • std::ptr::swap_nonoverlapping
    • Cell::replace
    • Cell::get
    • Cell::get_mut
    • Cell::from_mut
    • Cell::as_slice_of_cells
  • Eltávolították az i686-pc-windows-gnu célplatform első szintjének támogatását.

További megemlítendő események kapcsolódnak a Rust-hoz:

  • A Munal OS projekt egy kísérleti operációs rendszert fejleszt, amely Rust nyelven készült és a unikernel koncepcióra épül. A Munal OS nem alkalmaz kényszerített multitasking-ot, memóriatérképezést és virtuális címtartományt (a memória elrendezése az UEFI alapján történik). A kernel és az alkalmazások egy címtartományban futnak, a sandbox-izolációs WASM biztonsági modell felhasználásával (tartalmaz egy wasmi motort az alkalmazások WebAssembly bájtformátumban történő futtatásához).

    Az operációs rendszer grafikus felhasználói felülettel rendelkezik, és támogatja a billentyűzet és az egér általi vezérlést. Grafikus alkalmazások fejlesztéséhez saját toolkit használható, amely widget könyvtárat tartalmaz. Hálózati interakcióhoz TCP-stack és hálózati eszközvezérlő biztosított. A Munal OS-hez elérhető alkalmazások között szerepel: web böngésző alap HTML és HTTPS támogatással, szövegszerkesztő és terminál Python kód végrehajtásához. A kód MIT licenc alatt nyílt.

    Rust 1.88 kiadása. Munal operációs rendszer és rsched eszköz Rustban
  • Megjelent az Asterinas 0.15.2 kernel, amely Rust nyelven íródott, és ABI-t biztosít, amely kompatibilis a Linux kernelrel. A kernel támogatja az x86-64 és RISC-V architektúrákat, és a Linux 368 rendszerhívásának 206-át valósítja meg. A kernel fejlesztésében 45 fejlesztő vesz részt, elsősorban különböző kínai egyetemekről. A kernel a "framekernel" architektúra szerint készült, amelyben a kernel komponensei egy közös címzés alatt helyezkednek el, míg a biztonság a biztonságos kód és a potenciálisan problémás kód logikai elkülönítésével érhető el. Minden rendszerhívás, fájlrendszer és illesztőprogram az OS Services szintjén valósul meg, és nem tartalmazhat unsafe blokkot. A kód MPL 2.0 licenc alatt terjed.
  • A Linux kernelhez készült az rsched segédeszköz, amely lehetővé teszi a feladatütemező statisztikájának elemzését. A gyakorlatban a segédeszköz lehetővé teszi az erőforrások folyamatokhoz való hozzárendelésével kapcsolatos ütemezési döntések értékelését, valamint a tervezésnél fellépő késések nyomon követését. Az adatok gyűjtésére a kernelben a BPF alrendszert használják, míg a felhasználótérben futó eszközkészlet Rust nyelven íródott. A segédeszköz szerzője Chris Mason, a Btrfs fájlrendszer létrehozója és fő építésze.
  • A Collabora bejelentette a Coccinelle eszközkészlet Rust nyelvű változatának fejlesztését. A Coccinelle eredetileg a Linux kernelben C nyelvű kódok automatizált keresésére és átalakítására készült. Az átalakításokat olyan szabályként határozzák meg, amelyek absztrakt javításokra hasonlítanak, és nem kötődnek konkrét pozícióhoz a kódban.
  • A GNOME fejlesztői bemutatták a glycin nevű könyvtárat, amely Rust nyelven készült, és biztosítja a képek dekódolását sandbox izoláció alkalmazásával. A dekódolt tartalom kiadása gdk::Textures-en keresztül történik, valamint a metadátumok kinyerésére is van lehetőség. A glycin használatához GTK4-re készült kötőanyagok, valamint a glycin GdkPixbuf könyvtárban történő aktiválásához szükséges háttér található, amelyet a GNOME képek betöltésére használ. A glycin már aktív a GNOME alapértelmezett képnézőjében, a Loupe-ban. A GdkPixbuf háttér pedig lehetővé teszi a glycin használatát a GNOME Shellben, a bélyegkép-generátorokban és a GNOME alkalmazásokban anélkül, hogy bármilyen módosítást kellene végrehajtani ezeken a programokon.

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