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

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

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

  • Маҷмӯаи асбобҳо ва варианти китобхонаи ҷудошуда, ки аз тавлиди эҳтимолии ҳолати "ваҳшат" ҳангоми рух додани хатогиҳо озод аст, барои нашри Rust 1.62 навсозӣ шудааст. Дар муқоиса бо версияи қаблан истифодашуда, асбоби Rust дастгирии функсияи const_fn_trait_bound-ро, ки дар часпакҳои ядро ​​истифода мешавад, устувор кардааст.
  • Рамзи ҳатмӣ ба бастаи алоҳидаи қуттии "пайвандҳо" ҷудо карда шудааст, ки барқарорсозии онро осон мекунад, агар тағирот танҳо ба бастаи асосии "ядро" ворид карда шавад.
  • Амалисозии макроси "concat_idents!" дар шакли макросҳои мурофиавӣ аз нав навишта шудааст, ки ба функсияи concat_idents алоқаманд нест ва имкон медиҳад, ки истинод ба тағирёбандаҳои маҳаллӣ истифода шавад.
  • Макроси "static_assert!" аз нав навишта шуда, имкон медиҳад, ки "core::assert!()" дар ҳама гуна контекст ба ҷои доимӣ истифода шавад.
  • Макрос "build_error!" ба кор мутобиқ карда шудааст, вақте ки режими "RUST_BUILD_ASSERT_{WARN, Иҷозат диҳед}" барои модулҳо муқаррар карда шудааст.
  • Файли алоҳида бо танзимоти "kernel/configs/rust.config" илова карда шуд.
  • Файлҳои "*.i", ки дар ивазкуниҳои макрос коркард шудаанд, ба "*.rsi" иваз карда шуданд.
  • Дастгирии сохтани ҷузъҳои Rust бо сатҳҳои оптимизатсия аз онҳое, ки барои рамзи C истифода мешаванд, қатъ карда шуд.
  • Модули fs илова карда шуд, ки барои кор бо системаҳои файлӣ пайвандҳоро таъмин мекунад. Намунаи системаи файлии оддии дар Rust навишташуда оварда шудааст.
  • Модули навбати корӣ барои кор бо навбатҳои система илова карда шудааст (пайвандҳоро бар сохторҳои ядрои work_struct ва workqueue_struct таъмин мекунад).
  • Таҳияи модули kasync бо татбиқи усулҳои барномасозии асинхронӣ (async) идома ёфт. Намунаи сервери TCP дар сатҳи аслӣ, ки дар Rust навишта шудааст, илова карда шуд.
  • Имконияти коркарди таваққуфҳо бо забони Rust бо истифода аз намудҳои [Threaded]Handler ва [Threaded]Registration` илова карда шуд.
  • Илова кардани макросҳои мурофиавии "#[vtable]" барои осон кардани кор бо ҷадвалҳои нишондиҳандаҳои функсионалӣ, ба монанди сохтори file_operations.
  • Иҷрои иловагии рӯйхатҳои дуҷонибаи алоқаманди "unsafe_list::List".
  • Дастгирии ибтидоӣ барои RCU (Хондан-нусхабардорӣ-навсозӣ) ва навъи Гвардия барои санҷидани он, ки қулфи хондан ба риштаи ҷорӣ пайваст шудааст ё не.
  • Функсияи иловашудаи Task::spawn() барои эҷод ва ба таври худкор оғоз кардани риштаҳои ядроӣ. Инчунин усули Task::wake_up() илова карда шуд.
  • Модули таъхир илова карда шуд, ки ба шумо имкон медиҳад, ки таъхирҳоро истифода баред (папечон бар msleep ()).

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

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

Манбаъ: opennet.ru

Илова Эзоҳ