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

Ua hāʻawi ʻo Miguel Ojeda, ka mea kākau o ka papahana Rust-for-Linux, i kahi koho ʻekolu no ka hoʻomohala ʻana i nā mea hoʻokele ma ka ʻōlelo Rust no nā mea hoʻomohala kernel Linux e noʻonoʻo ai. Manaʻo ʻia ke kākoʻo Rust he hoʻokolohua, akā ua ʻae ʻia no ka hoʻokomo ʻana i ka lālā linux-next. 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.

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.

Ke hoʻomau nei ka mana hou o nā patches i ka hoʻopau ʻana i nā manaʻo i hana ʻia i ka wā o ke kūkākūkā o nā mana mua a me ka lua o nā pā. ʻO nā loli i ʻike ʻia:

  • Ua hoʻololi ʻia ka hoʻohana ʻana i ka hoʻokuʻu paʻa o Rust 1.57 ma ke ʻano he mea hōʻuluʻulu kuhikuhi a ua hāʻawi ʻia kahi loulou i ka paʻi paʻa o ka ʻōlelo Rust 2021. Ma mua, ua hoʻopaʻa ʻia nā pā i ka lālā beta o Rust a ua hoʻohana i kekahi mau hiʻohiʻona ʻōlelo. ua helu ʻia ma ke ʻano paʻa ʻole. ʻO ka hoʻololi ʻana i ka Rust 2021 kikoʻī ua ʻae iā mākou e hoʻomaka i ka hana e pale aku i ka hoʻohana ʻana i nā hiʻohiʻona paʻa ʻole i nā pā e like me const_fn_transmute, const_panic, const_unavailable_unchecked a me core_panic a try_reserve.
  • Ke hoʻomau nei ka hoʻomohala ʻana i ka mana alloc o ka hale waihona Rust i hoʻokomo ʻia i loko o nā patches, i hoʻololi ʻia e hoʻopau i nā hana hoʻomanaʻo hoʻomanaʻo o ka hiki ke hana ʻia o ke kūlana "panic" ke loaʻa nā hewa, e like me waho o ka hoʻomanaʻo. Hoʻokomo ka mana hou i nā koho "no_rc" a me "no_sync" e hoʻopau i ka hana ʻaʻole i hoʻohana ʻia i ka kernel Rust code, e hoʻonui ai i ka waihona. Ke hoʻomau nei ka hana me nā mea hoʻomohala alloc nui, e kuhikuhi ana i ka hoʻololi ʻana i nā loli e pono ai no ka kernel i ka waihona nui. ʻO ke koho "no_fp_fmt_parse", koi ʻia no ka hana ʻana o ka waihona ma ka pae kernel, ua hoʻoneʻe ʻia i ka waihona kumu Rust (core).
  • Ua hoʻomaʻemaʻe ʻia ke code no ka hoʻopau ʻana i nā ʻōlelo aʻoaʻo compiler i ke kūkulu ʻana i ka kernel ma ke ʻano CONFIG_WERROR. I ke kūkulu ʻana i ke code ma Rust, hoʻohana ʻia nā ʻano hana diagnostic compiler hou aʻe a me nā ʻōlelo luhi Clippy linter.
  • Manaʻo ʻia nā Abstractions no ka hoʻohana ʻana i ka code Rust no nā seqlocks (nā laka ʻana), kāhea ʻia ke kāhea ʻana no ka hoʻokele mana, I/O Memory (readX/writeX), interrupt and thread handler, GPIO, komo i nā mea hana, nā mea hoʻokele a me nā hōʻoia.
  • Ua hoʻonui ʻia nā mea hana no ka hoʻomohala ʻana i nā mea hoʻokele e hoʻokomo i nā mutexes hiki ke hoʻoneʻe ʻia, bit iterators, hoʻopaʻa kuhikuhi maʻalahi, hoʻomaikaʻi i nā diagnostics hewa, a me nā ʻōnaehana kūʻokoʻa kaʻa kaʻa ʻikepili.
  • Hoʻomaikaʻi i ka hana me nā loulou me ka hoʻohana ʻana i kahi ʻano Ref maʻalahi, e pili ana i ka refcount_t backend, e hoʻohana ana i ka kernel API o ka inoa like no ka helu ʻana i nā kuhikuhi. Ua wehe ʻia ke kākoʻo no nā ʻano Arc a me Rc i hāʻawi ʻia ma ka waihona alloc maʻamau a ʻaʻole i loaʻa i ke code i hoʻokō ʻia ma ka pae kernel (ua hoʻomākaukau ʻia nā koho no ka waihona ponoʻī e hoʻopau i kēia mau ʻano).
  • Loaʻa i nā ʻāpana kahi mana o ka mea hoʻokele PL061 GPIO, kākau hou ʻia ma Rust. ʻO kahi hiʻohiʻona kūikawā o ka mea hoʻokele, ʻo kāna hoʻokō ʻana kokoke i ka laina ma ka laina e hana hou i ka mea hoʻokele GPIO i ka ʻōlelo C. No nā mea hoʻomohala e makemake e kamaʻāina i ka hana ʻana i nā mea hoʻokele ma Rust, ua hoʻomākaukau ʻia kahi hoʻohālikelike laina-by-line e hiki ai iā lākou ke hoʻomaopopo i nā mea kūkulu ma Rust i hoʻololi ʻia ke code C.
  • Ua hoʻohana ka Rust codebase nui i ka rustc_codegen_gcc, kahi rustc backend no GCC e hoʻokō nei i ka hui mua-o-manawa (AOT) me ka hoʻohana ʻana i ka waihona libgccjit. Me ka hoʻomohala kūpono o ka backend, e ʻae iā ʻoe e hōʻiliʻili i ke code Rust i komo i ka kernel me ka hoʻohana ʻana iā GCC.
  • Ma kahi o ARM, Google a me Microsoft, ua hōʻike ʻo Red Hat i ka hoihoi i ka hoʻohana ʻana i ka ʻōlelo Rust i ka kernel Linux. E hoʻomanaʻo kākou ua hāʻawi pololei ʻo Google i ke kākoʻo no ka papahana Rust no Linux, ke hoʻomohala nei i kahi hoʻokō hou o ka mīkini kamaʻilio Binder interprocess ma Rust, a ke noʻonoʻo nei i ka hiki ke hana hou i nā mea hoʻokele like ʻole ma Rust. Ua hoʻomaka ʻo Microsoft e hoʻokō i nā mea hoʻokele no Hyper-V ma Rust. Ke hana nei ʻo ARM e hoʻomaikaʻi i ke kākoʻo Rust no nā ʻōnaehana kumu ARM. Ua hoʻokō ʻo IBM i ke kākoʻo Rust i ka kernel no nā ʻōnaehana PowerPC.

Source: opennet.ru

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