Den Ättonde versionen av patchar för Linux-kÀrnan med stöd för Rust-sprÄket

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

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster