Rust хэлийг дэмждэг Linux цөмд зориулсан засваруудын найм дахь хувилбар

Rust-for-Linux төслийн зохиогч Мигель Ожеда Linux цөмийн хөгжүүлэгчдийн авч үзэхийн тулд Rust хэл дээрх төхөөрөмжийн драйверуудыг боловсруулахад зориулсан v8 бүрэлдэхүүн хэсгүүдийг гаргахыг санал болгов. Энэ бол хувилбарын дугааргүйгээр хэвлэгдсэн эхний хувилбарыг харгалзан засварын шинэчилсэн хувилбар юм. 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!()”-г ямар ч контекстэд ашиглах боломжийг олгосон.
  • Макро "бүтээл_алдаа!" модулиудад "RUST_BUILD_ASSERT_{АНХААРУУЛАХ, ЗӨВШӨӨРӨХ}" горимыг тохируулсан үед ажиллахаар тохируулсан.
  • "kernel/configs/rust.config" тохиргоотой тусдаа файл нэмсэн.
  • Макро орлуулалтаар боловсруулсан “*.i” файлуудын нэрийг “*.rsi” болгон өөрчилсөн.
  • C кодонд ашигласанаас өөр оновчлолын түвшинтэй Rust бүрэлдэхүүн хэсгүүдийг бүтээхэд дэмжлэг үзүүлэхээ больсон.
  • Файлын системтэй ажиллахад зориулсан холболтыг хангадаг fs модулийг нэмсэн. Rust хэл дээр бичигдсэн энгийн файлын системийн жишээг үзүүлэв.
  • Системийн дараалалтай ажиллахад зориулсан ажлын дарааллын модулийг нэмсэн (work_struct болон workqueue_struct цөмийн бүтцүүд дээр холболтыг хангадаг).
  • Kasync модулийг хөгжүүлэх нь асинхрон програмчлалын аргуудыг (async) хэрэгжүүлснээр үргэлжилсэн. Rust дээр бичигдсэн үндсэн түвшний TCP серверийн жишээг нэмсэн.
  • [Threaded]Handler төрлүүд болон [Threaded]Registration` төрлүүдийг ашиглан Rust хэл дээрх тасалдлыг зохицуулах чадварыг нэмсэн.
  • file_operations бүтэц гэх мэт функцийн заагч хүснэгтүүдтэй ажиллахад хялбар болгох үүднээс "#[vtable]" процедурын макро нэмсэн.
  • "unsafe_list::List" гэсэн хоёр чиглэлтэй холбогдсон жагсаалтын хэрэгжилт нэмэгдсэн.
  • Унших түгжээ нь одоогийн хэлхээнд холбогдсон эсэхийг шалгахын тулд RCU (Унших-хуулбар-шинэчлэх) болон Хамгаалалтын төрлийн анхны дэмжлэгийг нэмсэн.
  • Цөмийн хэлхээ үүсгэх, автоматаар эхлүүлэх Task::spawn() функцийг нэмсэн. Мөн Task::wake_up() аргыг нэмсэн.
  • Сааталыг ашиглах боломжийг олгодог саатлын модулийг нэмсэн (msleep() дээр боодол).

Санал болгож буй өөрчлөлтүүд нь Rust хэлийг драйверууд болон цөмийн модулиудыг хөгжүүлэх хоёр дахь хэл болгон ашиглах боломжтой болгож байна. Rust-ийн дэмжлэгийг анхдагчаар идэвхжүүлээгүй сонголт хэлбэрээр танилцуулж байгаа бөгөөд зэв нь цөмийн хувьд шаардлагатай бүтээх хамаарал болгон оруулахад хүргэдэггүй. Драйвер хөгжүүлэхэд Rust-ийг ашигласнаар санах ойд нэвтрэх эрх чөлөөлсний дараа санах ойд нэвтрэх, хоосон заагч хаягжилт, буфер хэт ачаалал гэх мэт асуудлуудаас ангид, хамгийн бага хүчин чармайлтаар илүү аюулгүй, илүү сайн драйверуудыг бий болгох боломжтой болно.

Санах ойн аюулгүй ажиллагааг Rust-д хөрвүүлэх үед лавлагаа шалгах, объектын эзэмшил болон объектын ашиглалтын хугацааг (хамрах хүрээ) хянах, мөн кодыг гүйцэтгэх явцад санах ойд нэвтрэх зөв эсэхийг үнэлэх замаар хангадаг. Rust нь бүхэл тоон хэтрэхээс хамгаалж, ашиглахын өмнө хувьсагчийн утгыг заавал эхлүүлэх шаардлагатай, стандарт номын санд алдааг илүү сайн зохицуулдаг, өөрчлөгддөггүй лавлагаа, хувьсагчийн ойлголтыг анхдагчаар ашигладаг, логик алдааг багасгахын тулд хүчтэй статик бичихийг санал болгодог.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх