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

ʻO Miguel Ojeda, ka mea kākau o ka papahana Rust-for-Linux, ua manaʻo e hoʻokuʻu i nā mea v6 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 ʻehiku o ka paʻi ʻana, me ka noʻonoʻo ʻana i ka mana mua, i paʻi ʻia me ka helu ʻole. Manaʻo ʻia ke kākoʻo Rust he hoʻokolohua, akā ua hoʻokomo ʻia i loko o ka lālā linux-next a ua lawa ka hoʻomohala ʻana e hoʻomaka i ka hana ma ka hana ʻana i nā papa abstraction ma luna o nā subsystem kernel, a me ke kākau ʻana i nā mea hoʻokele a me nā modula. 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 o ka Pūnaewele.

Ma ka mana hou:

  • ʻO ka pahu hana a me kahi ʻano like ʻole o ka waihona alloc, i hoʻokuʻu ʻia mai ka hiki ʻana mai o kahi kūlana "panic" i ka wā e kū mai ai nā hewa, ua hōʻano hou ʻia i ka hoʻokuʻu ʻana o Rust 1.60, e hoʻopaʻa nei i ke kākoʻo no ke ʻano "maybe_uninit_extra" i hoʻohana ʻia i nā ʻāpana kernel.
  • Hoʻohui i ka hiki ke holo i nā hoʻokolohua mai ka palapala (nā hoʻokolohua i hoʻohana ʻia e like me nā laʻana i ka palapala), ma o ka hoʻololi ʻana i ka manawa o nā hoʻokolohua i hoʻopaʻa ʻia i ka kernel API i nā hoʻokolohua KUnit i hana ʻia i ka wā o ka hoʻouka ʻana.
  • Ua ʻae ʻia nā koi ʻaʻole pono nā hoʻāʻo i kahi ʻōlelo aʻo Clippy linter, e like me ka code kernel Rust.
  • Manaʻo ʻia kahi hoʻokō mua o ka module "net" me nā hana pūnaewele. Hiki i ka Rust code ke komo i nā hale pūnaewele kernel e like me Namespace (ma muli o ka struct net kernel structure), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) a me kā lākou IPv6 equivalents .
  • Aia ke kākoʻo mua no nā ʻenehana polokalamu asynchronous (async), i hoʻokō ʻia ma ke ʻano o ka module kasync. No ka laʻana, hiki iā ʻoe ke kākau i ka code asynchronous e hoʻopunipuni i nā kumu TCP: async fn echo_server(stream: TcpStream) -> Result { let mut buf = [0u8; 1024]; loop { let n = stream.read(&mut buf).kali?; ina n == 0 { ho'i Ok(()); } stream.write_all(&buf[..n]).kali?; } }
  • Hoʻohui ʻia:: kānana module no ka hoʻopunipuni ʻana i nā kānana packet network. Hoʻohui ʻia ka laʻana rust_netfilter.rs me kahi hoʻokō kānana ma ka ʻōlelo Rust.
  • Hoʻohui ʻia ka hoʻokō ʻana i kahi mutex smutex::Mutex maʻalahi, ʻaʻole pono ke pine.
  • Hoʻohui ʻia ʻo NoWaitLock, ʻaʻole e kali i kahi laka, a inā i noho ʻia e kekahi pae ʻē aʻe, e hōʻike ʻia kahi hewa i ka wā e hoʻāʻo ai e kiʻi i ka laka ma mua o ka hoʻōki ʻana i ka mea kelepona.
  • Hoʻohui ʻia ʻo RawSpinLock, i ʻike ʻia e raw_spinlock_t i loko o ka kernel, e pili i nā ʻāpana ʻaʻole hiki ke hoʻohana.
  • Hoʻohui ʻia ke ʻano ARef no nā kuhikuhi ʻana i kahi mea i hoʻohana ʻia ai ka mīkini helu kuhikuhi (hoʻihoʻi mau ʻia).
  • ʻO ka rustc_codegen_gcc backend, ka mea e hiki ai iā ʻoe ke hoʻohana i ka waihona libgccjit mai ka papahana GCC ma ke ʻano he code generator ma rustc e hāʻawi i ka rustc me ke kākoʻo no nā architectures a me nā optimizations i loaʻa ma GCC, ua hoʻokō i ka hiki ke bootstrapping i ka rustc compiler. ʻO ka hoʻolaha ʻana o ka mea hoʻopili, ʻo ia ka hiki ke hoʻohana i kahi mea hoʻoheheʻe code-based GCC ma rustc e kūkulu i ka rustc compiler ponoʻī. Eia kekahi, ʻo ka hoʻokuʻu hou ʻana o GCC 12.1 me nā hoʻoponopono i ka libgccjit pono no ka rustc_codegen_gcc e hana pololei. Ke hoʻomaka nei nā hoʻomākaukau e hoʻolako i ka hiki ke hoʻokomo iā rustc_codegen_gcc me ka hoʻohana ʻana i ka pono rustup.
  • Hoʻomaopopo ʻia ka holomua o ka hoʻomohala ʻana i ka GCC frontend gccrs me ka hoʻokō ʻana i ka mea hoʻopili ʻōlelo Rust e pili ana i ka GCC. Aia i kēia manawa ʻelua mau mea hoʻomohala manawa piha e hana ana ma gccrs.

E hoʻomanaʻo i nā hoʻololi i manaʻo ʻia e hiki ai 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 ʻia ʻana o Rust ma ke ʻano he hilinaʻi kūkulu pono 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 liʻiliʻi o ka hoʻoikaika ʻana, me ka ʻole o nā pilikia e like me ke komo ʻana i ka hoʻomanaʻo ma hope o ka hoʻokuʻu ʻana, nā kuhikuhi 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