Ang ikawalong bersyon sa mga patch alang sa Linux kernel nga adunay suporta alang sa Rust nga pinulongan

Si Miguel Ojeda, tagsulat sa Rust-for-Linux nga proyekto, nagsugyot sa pagpagawas sa v8 nga mga sangkap alang sa pagpalambo sa mga driver sa device sa Rust nga pinulongan aron konsiderahon sa Linux kernel developers. Kini ang gibag-o nga bersyon sa mga patch, nga gikonsiderar ang una nga bersyon, gipatik nga wala’y numero sa bersyon. Ang suporta sa Rust gikonsiderar nga eksperimento, apan gilakip na sa linux-next branch, nag-angkon nga gisagol sa pagpagawas sa pagkahulog sa 5.20 / 6.0, ug igo na nga hamtong aron magsugod sa pagtrabaho sa paghimo sa mga abstraction layer sa mga subsystem sa kernel, ingon man mga driver sa pagsulat ug modules. Ang kalamboan gipondohan sa Google ug sa ISRG (Internet Security Research Group), nga mao ang nagtukod sa Let's Encrypt nga proyekto ug nagpasiugda sa HTTPS ug sa pagpalambo sa mga teknolohiya aron mapausbaw ang seguridad sa Internet.

Sa bag-ong bersyon:

  • Ang toolkit ug usa ka variant sa alloc library, nga wala’y mahimo nga henerasyon sa usa ka "panic" nga kahimtang kung adunay mga sayup, gi-update alang sa pagpagawas sa Rust 1.62. Kung itandi sa kaniadto nga gigamit nga bersyon, ang Rust toolkit nagpalig-on sa suporta alang sa const_fn_trait_bound functionality nga gigamit sa kernel patch.
  • Ang binding code gibulag sa usa ka separado nga crate package nga "bindings", nga nagpasimple sa pagtukod pag-usab kung ang mga pagbag-o gihimo lamang sa panguna nga pakete nga "kernel".
  • Pagpatuman sa macro "concat_idents!" gisulat pag-usab sa porma sa usa ka procedural macro nga wala nahigot sa concat_idents functionality ug nagtugot sa paggamit sa mga pakisayran sa lokal nga mga variable.
  • Ang macro nga "static_assert!" Gisulat na usab, nga nagtugot sa paggamit sa "core::assert!()" sa bisan unsang konteksto imbes nga mga constants.
  • Macro "build_error!" gipahiangay sa pagtrabaho kung ang "RUST_BUILD_ASSERT_{WARN,Allow}" mode gitakda alang sa mga module.
  • Gidugang ang usa ka bulag nga file nga adunay mga setting nga "kernel/configs/rust.config".
  • Ang "*.i" nga mga file nga giproseso sa macro substitutions giilisan og ngalan ngadto sa "*.rsi".
  • Ang suporta alang sa pagtukod sa mga sangkap sa Rust nga adunay lebel sa pag-optimize nga lahi sa gigamit alang sa C code gihunong na.
  • Gidugang ang module sa fs, nga naghatag mga pagbugkos alang sa pagtrabaho sa mga sistema sa file. Usa ka pananglitan sa usa ka yano nga sistema sa file nga gisulat sa Rust gihatag.
  • Gidugang workqueue module para sa pagtrabaho uban sa system queues (naghatag ug bindings sa work_struct ug workqueue_struct kernel structures).
  • Ang pag-uswag sa kasync module nagpadayon sa pagpatuman sa asynchronous programming method (async). Gidugang ang usa ka pananglitan sa usa ka core-level nga TCP server nga gisulat sa Rust.
  • Gidugang ang abilidad sa pagdumala sa mga interrupt sa Rust nga pinulongan gamit ang [Threaded]Handler type ug [Threaded]Registration` type.
  • Gidugang ang procedural macro "#[vtable]" aron mas sayon ​​ang pagtrabaho sa mga table sa function pointer, sama sa file_operations structure.
  • Gidugang nga pagpatuman sa bidirectional linked lists "unsafe_list:: List".
  • Gidugang inisyal nga suporta alang sa RCU (Read-copy-update) ug Guard type aron masusi kung ang usa ka read lock nahigot sa kasamtangan nga thread.
  • Gidugang nga Buluhaton::spawn() function sa paghimo ug awtomatikong pagsugod sa kernel thread. Gidugang usab ang Task::wake_up() nga pamaagi.
  • Gidugang ang usa ka module sa paglangan nga nagtugot kanimo sa paggamit sa mga paglangan (usa ka wrapper sa msleep()).

Ang gisugyot nga mga pagbag-o nagpaposible sa paggamit sa Rust isip ikaduhang pinulongan alang sa pagpalambo sa mga drayber ug kernel modules. Ang suporta sa Rust gipresentar isip usa ka opsyon nga dili mahimo pinaagi sa default ug dili moresulta sa Rust nga gilakip isip usa ka gikinahanglan nga pagsalig sa pagtukod alang sa kernel. Ang paggamit sa Rust alang sa pagpalambo sa drayber magtugot kanimo sa paghimo og mas luwas ug mas maayo nga mga drayber nga adunay gamay nga paningkamot, gawasnon sa mga problema sama sa pag-access sa memorya human sa pagpalaya, null pointer dereferences, ug buffer overruns.

Ang pagdumala nga luwas sa memorya gihatag sa Rust sa oras sa pag-compile pinaagi sa pagsusi sa pakisayran, pagsubay sa pagpanag-iya sa butang ug kinabuhi sa butang (sangkap), ingon man pinaagi sa pagtimbang-timbang sa pagkahusto sa pag-access sa memorya sa panahon sa pagpatuman sa code. Naghatag usab ang Rust og proteksyon batok sa pag-awas sa integer, nanginahanglan mandatory nga pagsugod sa mga variable nga kantidad sa wala pa gamiton, pagdumala sa mga sayup nga mas maayo sa standard nga librarya, gipadapat ang konsepto sa dili mausab nga mga pakisayran ug mga variable nga default, nagtanyag kusog nga static nga pag-type aron maminusan ang mga lohikal nga sayup.

Source: opennet.ru

Idugang sa usa ka comment