Версияи шашуми часпакҳо барои ядрои Linux бо дастгирии забони Rust

Мигел Охеда, муаллифи лоиҳаи Rust-for-Linux, баровардани ҷузъҳои v6-ро барои таҳияи драйверҳои дастгоҳ бо забони Rust барои баррасӣ аз ҷониби таҳиягарони ядрои Linux пешниҳод кард. Ин нашри ҳафтуми часпакҳо бо дарназардошти версияи аввал аст, ки бе рақами версия нашр шудааст. Дастгирии Rust таҷрибавӣ ҳисобида мешавад, аммо аллакай ба филиали linux-навбат дохил карда шудааст ва барои оғоз кардани кор оид ба эҷоди қабатҳои абстраксия дар зерсистемаҳои ядро, инчунин навиштани драйверҳо ва модулҳо ба қадри кофӣ таҳия шудааст. Таҳия аз ҷониби Google ва ISRG (Гурӯҳи Таҳқиқоти Амнияти Интернет) маблағгузорӣ мешавад, ки муассиси лоиҳаи Let's Encrypt мебошад ва HTTPS ва рушди технологияҳоро барои беҳтар кардани амнияти интернет мусоидат мекунад.

Дар версияи нав:

  • Маҷмӯаи абзор ва варианти китобхонаи ҷудошуда, ки аз тавлиди эҳтимолии ҳолати "ваҳшат" ҳангоми рух додани хатогиҳо озод шудааст, ба нашри Rust 1.60 навсозӣ шудааст, ки дастгирии режими "maybe_uninit_extra" -ро, ки дар часпакҳои ядро ​​истифода мешавад, устувор мегардонад.
  • Имконияти иҷро кардани санҷишҳо аз ҳуҷҷатҳо (санҷишҳое, ки ҳамчун намуна дар ҳуҷҷатҳо истифода мешаванд) тавассути табдилдиҳии вақти компиляцияи санҷишҳои ба API ядро ​​​​ба озмоишҳои KUnit, ки ҳангоми боркунии ядро ​​иҷро мешаванд, илова карда шудааст.
  • Талабот қабул карда шудаанд, ки санҷишҳо набояд ба огоҳии linter Clippy оварда расонанд, ба монанди рамзи ядрои Rust.
  • Татбиқи ибтидоии модули "нет" бо функсияҳои шабакавӣ пешниҳод карда мешавад. Рамзи Rust ба сохторҳои шабакаи ядро ​​​​ба монанди Namespace (дар асоси сохтори сохтори ядрои структурен), SkBuff (struct sk_buff), TcpListener, TcpStream (сокети сохтор), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in6) ва IP-ҳои онҳо дастрасӣ дорад. .
  • Дастгирии ибтидоии усулҳои барномасозии асинхронӣ (асинхронӣ) мавҷуд аст, ки дар шакли модули kasync амалӣ карда мешавад. Масалан, шумо метавонед рамзи асинхронӣ барои коркарди розеткаҳои TCP нависед: async fn echo_server(stream: TcpStream) -> Натиҷа { let mut buf = [0u8; 1024]; ҳалқа { бигзор n = stream.read(&mut buf).интизори?; агар n == 0 { баргардонидани Хуб (()); } stream.write_all(&buf[..n]).интизори?; } }
  • Модули филтр net:: иловашуда барои коркарди филтрҳои бастаи шабакавӣ. Иловашуда намунаи rust_netfilter.rs бо татбиқи филтр дар забони Rust.
  • Татбиқи иловагии оддии smutex mutex::Mutex, ки pinning талаб намекунад.
  • Иловашудаи NoWaitLock, ки ҳеҷ гоҳ қуфлро интизор намешавад ва агар риштаи дигарро ишғол кунад, боиси хатогие мегардад, ки ҳангоми кӯшиши гирифтани қулф ба ҷои боздоштани зангзанӣ гузориш дода шавад.
  • Иловаи RawSpinLock, ки аз ҷониби raw_spinlock_t дар ядро ​​муайян карда шудааст, барои татбиқ ба бахшҳое, ки бекор буда наметавонанд.
  • Навъи ARef барои истинод ба объекте илова карда шудааст, ки механизми ҳисобкунии истинод ба он татбиқ мешавад (ҳамеша аз нав ҳисоб карда мешавад).
  • Дар пушти rustc_codegen_gcc, ки ба шумо имкон медиҳад, ки китобхонаи libgccjit-ро аз лоиҳаи GCC ҳамчун генератори код дар rustc барои таъмин намудани rustc бо дастгирии меъморӣ ва оптимизатсияи дастрас дар GCC истифода баред, қобилияти пурбор кардани компилятори rustc-ро амалӣ кардааст. Пешбурди Compiler маънои қобилияти истифодаи генератори коди GCC дар асоси GCC дар rustc барои сохтани худи compiler rustc мебошад. Илова бар ин, нашри охирини GCC 12.1 ислоҳи libgccjit-ро дар бар мегирад, ки барои дуруст кор кардани rustc_codegen_gcc заруранд. Барои таъмини қобилияти насб кардани rustc_codegen_gcc бо истифода аз утилитаи rustup омодагӣ идома дорад.
  • Пешравӣ дар таҳияи gccrs frontend GCC бо татбиқи компилятори забони Rust дар асоси GCC қайд карда мешавад. Дар айни замон ду таҳиягари пурравақт дар gccrs кор мекунанд.

Ёдовар мешавем, ки тағйироти пешниҳодшуда имкон медиҳад, ки Rust ҳамчун забони дуюм барои таҳияи драйверҳо ва модулҳои ядроӣ истифода шавад. Дастгирии Rust ҳамчун варианте пешниҳод карда мешавад, ки бо нобаёнӣ фаъол нест ва боиси он намегардад, ки Rust ҳамчун вобастагии зарурии сохтмон барои ядро ​​дохил карда шавад. Истифодаи Rust барои таҳияи драйвер ба шумо имкон медиҳад, ки драйверҳои бехатартар ва беҳтарро бо саъю кӯшиши кам эҷод кунед, ки аз мушкилоте ба монанди дастрасии хотира пас аз озодшавӣ, истинодҳои нул нишоннамо ва изофаи буфер озод карда шаванд.

Муомилоти аз хотираи бехатар дар Rust дар вақти тартибдиҳӣ тавассути санҷиши истинод, нигоҳ доштани моликияти объект ва мӯҳлати умри объект (миқёс), инчунин тавассути арзёбии дурустии дастрасии хотира ҳангоми иҷрои код таъмин карда мешавад. Rust инчунин муҳофизатро аз фаромадани ададҳо таъмин мекунад, пеш аз истифода оғозкунии ҳатмии арзишҳои тағирёбандаро талаб мекунад, хатогиҳоро дар китобхонаи стандартӣ беҳтар идора мекунад, консепсияи истинодҳо ва тағирёбандаҳоро ба таври нобаёнӣ татбиқ мекунад, чопкунии қавии статикиро барои кам кардани хатогиҳои мантиқӣ пешниҳод мекунад.

Манбаъ: opennet.ru

Илова Эзоҳ