Miguel Ojeda, författare till projektet Rust-for-Linux, har föreslagit för Linux-kÀrnutvecklare att slÀppa v8 av komponenterna för enhetsdrivrutinsutveckling med Rust-sprÄket. Detta Àr en reviderad version av patcharna med hÀnsyn tagen till den första versionen, som publicerades utan versionsnummer. Stödet för Rust betraktas som experimentellt, men Àr redan inkluderat i linux-next-grenen och strÀvar efter integration i höstutgÄvan 5.20/6.0. Det Àr tillrÀckligt utvecklat för att börja arbeta med att skapa abstraktionslager ovanpÄ kÀrnunderhÄllssubsystem, samt för att skriva drivrutiner och moduler. Utvecklingen finansieras av Google och organisationen ISRG (Internet Security Research Group), som Àr grundare av projektet Let's Encrypt och frÀmjar HTTPS och utvecklingen av teknologier för att öka internetsÀkerheten.
I den nya versionen:
- Verktyget och varianten av biblioteken alloc, befriat frÄn potentiella "panic"-tillstÄnd vid fel, har uppdaterats till Rust 1.62. JÀmfört med den tidigare anvÀnda versionen stabiliserades stödet för funktionaliteten const_fn_trait_bound, som anvÀnds i patcharna till kÀrnan.
- Kodbindningarna har delats upp i ett separat crate-paket "bindings", vilket förenklar omkompilering vid Àndringar endast i huvudpaketet "kernel".
- Implementeringen av makrot "concat_idents!" har skrivits om som en procedurmakro som inte Àr kopplad till concat_idents-funktionaliteten och som tillÄter anvÀndning av referenser till lokala variabler.
- Makrot "static_assert!" har skrivits om, vilket gör att "core::assert!()" kan anvÀndas i vilket sammanhang som helst istÀllet för konstanter.
- Makrot "build_error!" har anpassats för anvÀndning nÀr moduler sÀtts till lÀget "RUST_BUILD_ASSERT_{WARN,ALLOW}".
- En separat fil med instÀllningar "kernel/configs/rust.config" har lagts till.
- Filer som hanteras i makroplaceringar "*.i" har döpts om till "*.rsi".
- Stödet för att bygga Rust-komponenter med optimeringsnivÄer som skiljer sig frÄn dem som anvÀnds för C-kod har upphört.
- Modulen fs har lagts till, vilket tillhandahÄller bindningar för arbete med filsystem. Ett exempel pÄ ett enkelt filsystem skrivet i Rust har föreslagits.
- Modulen workqueue har lagts till för arbete med systemköer (den tillhandahÄller bindningar över kernel-strukturerna work_struct och workqueue_struct).
- Utvecklingen av modulen kasync har fortsatt med implementeringen av metoder för asynkron programmering (async). Exemplet pÄ en fungerande TCP-server pÄ kÀrnnivÄ, skriven i Rust, har lagts till.
- Möjligheten att hantera avbrott pÄ sprÄk Rust har lagts till med hjÀlp av typklasser [Threaded]Handler och typerna [Threaded]Registration.
- Den procedurmakro «#[vtable]» har lagts till för att förenkla arbetet med funktionspekar-tabeller, som strukturen file_operations.
- Implementeringen av dubbelsidiga lÀnkade listor «unsafe_list::List» har lagts till.
- Inledande stöd för RCU (Read-copy-update) och typen Guard har lagts till för att kontrollera bindningen av lÀsblockeringen till den aktuella trÄden.
- Funktionen Task::spawn() för att skapa och automatiskt starta kÀrntrÄdar har lagts till. Metoden Task::wake_up() har ocksÄ lagts till.
- Modulen delay har lagts till, vilket gör det möjligt att anvÀnda förseningar (en överlÀggning ovanför msleep()).
De föreslagna förÀndringarna möjliggör anvÀndning av Rust som ett andra sprÄk för utveckling av drivrutiner och kÀrnmoduler. Stödet för Rust presenteras som ett alternativ, inte aktiverat som standard och leder inte till att Rust blir ett krav i kÀrnans byggberoenden. AnvÀndningen av Rust för att utveckla drivrutiner kommer att göra det möjligt att enkelt skapa sÀkra och mer kvalitativa drivrutiner, fria frÄn problem som att referera till minnesomrÄden efter deras frigörande, dereferera nollpekare och överskrida buffertgrÀnser.
SÀker minneshantering sÀkerstÀlls i Rust vid kompilering genom kontroll av referenser, spÄrning av Àgande av objekt och beaktande av objektens livstid (synlighet), samt genom utvÀrdering av korrekt tillgÄng till minnet under kodens körning. Rust tillhandahÄller ocksÄ verktyg för skydd mot heltalsöverflöden, krÀver obligatorisk initialisering av variabelvÀrden innan anvÀndning, hanterar fel bÀttre i standardbiblioteket, tillÀmpar konceptet av oförÀnderliga (immutable) referenser och variabler som standard och erbjuder stark statisk typning för att minimera logiska fel.
KĂ€lla: opennet.ru
