ʻO ka ʻewalu o nā patches no ka Linux kernel me ke kākoʻo no ka ʻōlelo Rust

Ua noi ʻo Miguel Ojeda, ka mea kākau o ka papahana Rust-for-Linux, i ka hoʻokuʻu ʻana i nā mea v8 no ka hoʻomohala ʻana i nā mea hoʻokele ma ka ʻōlelo Rust no ka noʻonoʻo ʻana e nā mea hoʻomohala kernel Linux. ʻO kēia ka mana i hoʻoponopono hou ʻia o nā patches, e noʻonoʻo ana i ka mana mua, i paʻi ʻia me ka helu ʻole. ʻO ke kākoʻo Rust i manaʻo ʻia he hoʻokolohua, akā ua hoʻokomo ʻia i loko o ka lālā linux-next, koi ʻia e hoʻohui ʻia i ka hāʻule 5.20/6.0 hoʻokuʻu, a ua lawa ka makua e hoʻomaka i ka hana i ka hana ʻana i nā papa abstraction ma luna o nā subsystem kernel, a me ke kākau ʻana i nā mea hoʻokele. modules. Hoʻokumu kālā ʻia ka hoʻomohala ʻana e Google a me ka ISRG (Internet Security Research Group), ʻo ia ka mea nāna i hoʻokumu i ka papahana Let's Encrypt a hoʻolaha i ka HTTPS a me ka hoʻomohala ʻana i nā ʻenehana e hoʻomaikaʻi i ka palekana pūnaewele.

Ma ka mana hou:

  • ʻO ka pahu hana a me kahi ʻano like ʻole o ka waihona alloc, me ka ʻole o ka hoʻokumu ʻana o kahi kūlana "panic" i ka wā e loaʻa ai nā hewa, ua hōʻano hou ʻia no ka hoʻokuʻu ʻana o Rust 1.62. Hoʻohālikelike ʻia me ka mana i hoʻohana mua ʻia, ua hoʻokūpaʻa ka Rust toolkit i ke kākoʻo no ka hana const_fn_trait_bound i hoʻohana ʻia i loko o nā ʻāpana kernel.
  • Hoʻokaʻawale ʻia ka code paʻa i loko o kahi ʻāpana pahu ʻokoʻa "bindings", e maʻalahi ke kūkulu hou ʻana inā hoʻololi wale ʻia i ka pūʻolo nui "kernel".
  • Ka hoʻokō ʻana i ka macro "concat_idents!" kākau hou ʻia ma ke ʻano o kahi macro procedural ʻaʻole i hoʻopaʻa ʻia i ka hana concat_idents a ʻae i ka hoʻohana ʻana i nā kuhikuhi i nā loli kūloko.
  • Ua kākau hou ʻia ka macro "static_assert!", e ʻae ana i ka hoʻohana ʻana i ka "core::assert!()" ma kekahi ʻano pōʻaiapili ma kahi o nā mea mau.
  • Macro "build_error!" hoʻololi ʻia e hana ke hoʻonohonoho ʻia ke ʻano "RUST_BUILD_ASSERT_{WARN,ALLOW}" no nā modula.
  • Hoʻohui i kahi faila ʻokoʻa me nā hoʻonohonoho "kernel/configs/rust.config".
  • Ua kapa hou ʻia nā faila "*.i" i hoʻololi ʻia i ka "*.rsi".
  • Ua hoʻopau ʻia ke kākoʻo no ke kūkulu ʻana i nā ʻāpana Rust me nā pae hoʻonui ʻokoʻa mai nā mea i hoʻohana ʻia no ka code C.
  • Hoʻohui ʻia ka module fs, e hāʻawi ana i nā paʻa no ka hana ʻana me nā ʻōnaehana faila. Hāʻawi ʻia kahi laʻana o kahi ʻōnaehana faila maʻalahi i kākau ʻia ma Rust.
  • Hoʻohui ʻia ka module workqueue no ka hana ʻana me nā queues ʻōnaehana (hāʻawi i nā mea paʻa ma luna o ka work_struct a me workqueue_struct kernel structures).
  • Ua hoʻomau ka hoʻomohala ʻana o ka module kasync me ka hoʻokō ʻana i nā ʻano papahana asynchronous (async). Hoʻohui i kahi laʻana o kahi kikowaena TCP pae kumu i kākau ʻia ma Rust.
  • Hoʻohui ʻia ka hiki ke hoʻopaʻa i nā keʻakeʻa ma ka ʻōlelo Rust me ka hoʻohana ʻana i nā ʻano [Threaded]Handler a me [Threaded]Registration` ʻano.
  • Hoʻohui ʻia ka macro procedural "#[vtable]" i mea e maʻalahi ai ka hana ʻana me nā papa kuhikuhi o ka hana, e like me ke ʻano o ka file_operations structure.
  • Hoʻohui ʻia ka hoʻokō ʻana i nā papa inoa pili ʻelua "unsafe_list::List".
  • Hoʻohui ʻia ke kākoʻo mua no RCU (Read-copy-update) a me ke ʻano kiaʻi e nānā inā paʻa kahi laka heluhelu i ka pae o kēia manawa.
  • Hana Hoʻohui:: spawn () hana e hana a hoʻomaka koke i nā kaula kernel. Hoʻohui pū ʻia ke ʻano hana::wake_up().
  • Hoʻohui ʻia kahi module lohi e hiki ai iā ʻoe ke hoʻohana i nā lohi (kahi wīwī ma luna o msleep()).

ʻO nā hoʻololi i manaʻo ʻia e hiki ke hoʻohana iā Rust ma ke ʻano he ʻōlelo lua no ka hoʻomohala ʻana i nā mea hoʻokele a me nā modula kernel. Hōʻike ʻia ke kākoʻo Rust ma ke ʻano he koho ʻaʻole hiki ke hoʻohana ʻia e ka paʻamau a ʻaʻole i hopena i ka hoʻokomo ʻana o Rust i waena o nā mea hilinaʻi e pono ai no ka kernel. ʻO ka hoʻohana ʻana iā Rust no ka hoʻomohala ʻana i nā mea hoʻokele e ʻae iā ʻoe e hana i nā mea hoʻokele palekana a ʻoi aku ka maikaʻi me ka hoʻoikaika liʻiliʻi, me ka ʻole o nā pilikia e like me ke komo ʻana i kahi wahi hoʻomanaʻo ma hope o ka hoʻokuʻu ʻia ʻana, ka hoʻokuʻu ʻana i nā kuhikuhi null, a me ka hoʻonui ʻana.

Hāʻawi ʻia ka mālama mālama hoʻomanaʻo ma Rust i ka manawa hōʻuluʻulu ma o ka nānā ʻana i nā kuhikuhi, ka mālama ʻana i ka mea nona ka mea a me ke ola o ka mea (scope), a ma o ka loiloi ʻana i ka pololei o ke komo ʻana i ka hoʻomanaʻo i ka wā o ka hoʻokō code. Hāʻawi pū ʻo Rust i ka pale ʻana i ka integer overflows, koi pono i ka hoʻomaka mua ʻana o nā waiwai hoʻololi ma mua o ka hoʻohana ʻana, ʻoi aku ka maikaʻi o ka hoʻohana ʻana i nā hewa i loko o ka waihona maʻamau, pili i ka manaʻo o nā kuhikuhi immutable a me nā loli ma ke ʻano maʻamau, hāʻawi i ka paʻi static ikaika e hōʻemi i nā hewa loiloi.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka