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

Miguel Ojeda, författaren till Rust-for-Linux-projektet, föreslog lanseringen av v8-komponenter för utveckling av enhetsdrivrutiner i Rust-språket för övervägande av Linux-kärnutvecklare. Detta är den reviderade versionen av patcharna, med hänsyn till den första versionen, publicerad utan versionsnummer. Roststöd anses vara experimentellt, men ingår redan i linux-next-grenen, påstår sig vara integrerat i höstens 5.20/6.0-utgåva, och är mogen nog att börja arbeta med att skapa abstraktionslager över kärndelsystem, samt skriva drivrutiner och moduler. Utvecklingen finansieras av Google och ISRG (Internet Security Research Group), som är grundaren av Let's Encrypt-projektet och främjar HTTPS och utvecklingen av tekniker för att förbättra Internetsäkerheten.

I den nya versionen:

  • Verktygslådan och en variant av alloc-biblioteket, fria från eventuell generering av ett "panik"-tillstånd när fel uppstår, har uppdaterats för utgåvan av Rust 1.62. Jämfört med den tidigare använda versionen har Rust-verktygslådan stabiliserat stöd för const_fn_trait_bound-funktionaliteten som används i kärnkorrigeringar.
  • Bindningskoden separeras i ett separat lådapaket "bindningar", vilket förenklar ombyggnaden om ändringar endast görs i huvudpaketet "kärna".
  • Implementering av makrot "concat_idents!" skrivs om i form av ett procedurmakro som inte är knutet till concat_idents-funktionaliteten och tillåter användning av referenser till lokala variabler.
  • Makrot "static_assert!" har skrivits om, vilket tillåter användning av "core::assert!()" i alla sammanhang istället för konstanter.
  • Makro "build_error!" anpassad för att fungera när "RUST_BUILD_ASSERT_{WARN,ALLOW}"-läget är inställt för moduler.
  • Lade till en separat fil med inställningarna "kernel/configs/rust.config".
  • "*.i"-filerna som behandlas i makroersättningar har bytt namn till "*.rsi".
  • Stöd för att bygga Rustkomponenter med optimeringsnivåer som skiljer sig från de som används för C-kod har upphört.
  • Lade till fs-modul, som ger bindningar för att arbeta med filsystem. Ett exempel på ett enkelt filsystem skrivet i Rust finns.
  • Lade till arbetskömodul för att arbeta med systemköer (ger bindningar över kärnstrukturerna work_struct och workqueue_struct).
  • Utvecklingen av kasync-modulen fortsatte med implementeringen av asynkrona programmeringsmetoder (async). Lade till ett exempel på en TCP-server på kärnnivå skriven i Rust.
  • Lade till möjligheten att hantera avbrott i Rust-språket med hjälp av typerna [Threaded]Handler och [Threaded]Registration`.
  • Lade till procedurmakrot "#[vtable]" för att göra det lättare att arbeta med tabeller med funktionspekare, som filoperationsstrukturen.
  • Lade till implementering av dubbelriktade länkade listor "unsafe_list::List".
  • Lade till initialt stöd för RCU (Read-copy-update) och Guard-typ för att kontrollera om ett läslås är bundet till den aktuella tråden.
  • Lade till Task::spawn() funktion för att skapa och automatiskt starta kärntrådar. Lade också till metoden Task::wake_up() .
  • Lade till en fördröjningsmodul som låter dig använda fördröjningar (en omslag över msleep()).

De föreslagna ändringarna gör det möjligt att använda Rust som ett andra språk för att utveckla drivrutiner och kärnmoduler. Ruststöd presenteras som ett alternativ som inte är aktiverat som standard och resulterar inte i att Rust ingår som ett obligatoriskt byggberoende för kärnan. Genom att använda Rust för drivrutinsutveckling kan du skapa säkrare och bättre drivrutiner med minimal ansträngning, utan problem som minnesåtkomst efter frigöring, nollpekarereferenser och buffertöverskridanden.

Minnessäkerhet tillhandahålls i Rust vid kompileringstillfället genom referenskontroll, hålla reda på objektägande och objektlivslängd (scope), samt genom utvärdering av korrektheten av minnesåtkomst under kodexekvering. Rust ger också skydd mot heltalsspill, kräver obligatorisk initiering av variabelvärden innan användning, hanterar fel bättre i standardbiblioteket, tillämpar konceptet med oföränderliga referenser och variabler som standard, erbjuder stark statisk typning för att minimera logiska fel.

Källa: opennet.ru

Lägg en kommentar