Ntọhapụ nke asụsụ mmemme Rust 1.75 na unikernel Hermit 0.6.7

Mwepụta nke asụsụ mmemme izugbe nke Rust 1.75, nke ọrụ Mozilla hiwere, mana nke emepụtara ugbu a n'okpuru nkwado nke otu nọọrọ onwe ya na-abụghị uru Rust Foundation, ka ebipụtala. Asụsụ ahụ na-elekwasị anya na nchekwa nchekwa ma na-enye ụzọ iji nweta ọrụ dị elu na parallelism ma na-ezere iji onye na-ekpofu ihe mkpofu na oge ịgba ọsọ (oge ọ na-agba ọsọ na-ebelata ka ọ bụrụ mmalite na nhazi nke ọbá akwụkwọ ọkọlọtọ).

Ụzọ ijikwa ebe nchekwa rust na-azọpụta onye nrụpụta site na njehie mgbe ị na-emegharị ihe nrịbama ma chebe onwe ya pụọ ​​​​na nsogbu ndị na-ebilite n'ihi njikwa ebe nchekwa dị ala, dị ka ịnweta ebe nchekwa mgbe a tọhapụrụ ya, iwepụ pointers null, buffer overruns, wdg. Iji kesaa ọba akwụkwọ, nye ihe na-ewuli elu ma jikwaa ịdabere, ọrụ ahụ na-emepụta onye njikwa ngwugwu Cargo. A na-akwado ebe nchekwa crates.io maka ọba akwụkwọ nnabata.

A na-enye nchekwa nchekwa na nchara n'oge a na-achịkọta site na ntụle ntụnye aka, idobe usoro nwe ihe, idobe oge ndụ ihe (scopes), na ịlele izi ezi nke ịnweta ebe nchekwa n'oge mmebe koodu. Nchara na-enyekwa nchebe pụọ na integer njupụta, na-achọ mmalite mmalite nke ụkpụrụ agbanwe agbanwe tupu eji ya, na-edozi njehie nke ọma n'ọbá akwụkwọ ọkọlọtọ, na-etinye echiche nke ntụgharị na mgbanwe na-adịghị agbanwe agbanwe na ndabara, na-enye akara static siri ike iji belata njehie ezi uche dị na ya.

Isi ihe ọhụrụ:

  • Agbakwunyere ike iji "async fn" na akara "-> impl Trait" na àgwà nzuzo. Dịka ọmụmaatụ, iji "-> impl Trait" ị nwere ike dee usoro njirimara nke na-eweghachite onye nrụpụta: trait Container {fn items(&self) -> impl Iterator; } impl Container maka MyContainer {fn ihe(&onwe) -> impl Iterator {self.items.iter().cloned()}}

    Ị nwekwara ike ịmepụta àgwà site na iji "async fn": àgwà HttpService { async fn fetch (&self, url: Url) -> HtmlBody; // a ga-agbasawanye na: // fn fetch (&self, url: Url) -> impl Future; }

  • API agbakwunyere maka ịgbakọ nkwụghachi ụgwọ byte metụtara ntụnye aka. Mgbe ị na-eji ihe nrịbama efu na-arụ ọrụ (“* const T” na “*mut T”), enwere ike ịchọ ọrụ iji tinye nkwụghachi na ntụnye ahụ. Na mbụ, maka nke a ọ ga-ekwe omume iji ihe owuwu dị ka " :: tinye (1)", na-agbakwụnye ọnụ ọgụgụ nke bytes kwekọrọ na nha "size_of:: ()". API ọhụrụ ahụ na-eme ka ọrụ a dị mfe ma na-eme ka o kwe omume ịmegharị ihe nkwụghachi nke byte na-ebughị ụzọ tinye ụdị ndị ahụ na "* const u8" ma ọ bụ "* mut u8".
    • pointer ::byte_add
    • pointer ::byte_offset
    • pointer ::byte_offset_si
    • pointer ::byte_sub
    • pointer ::wrapping_byte_add
    • pointer ::wrapping_byte_offset
    • pointer ::wrapping_byte_sub
  • Na-aga n'ihu na-arụ ọrụ iji mụbaa arụmọrụ nke rustc compiler. Agbakwunyere BOLT optimizer, nke na-agba ọsọ na post-njikọ ma na-eji ozi sitere na profaịlụ mmebe akwadoro tupu oge eruo. Iji BOLT na-enye gị ohere ịme ngwa ngwa mkpochapụ ihe dịka 2% site n'ịgbanwe nhazi nke koodu ọba akwụkwọ librusc_driver.so maka iji cache processor rụọ ọrụ nke ọma.

    Gụnyere iwulite rustc compiler na nhọrọ "-Ccodegen-units=1" iji kwalite ogo njikarịcha na LLVM. Nnwale ndị e mere na-egosi mmụba nke arụmọrụ n'ihe banyere "-Ccodegen-units=1" na-ewu ihe dịka 1.5%. A na-akwado nkwalite ndị agbakwunyere na ndabara naanị maka ikpo okwu x86_64-unknown-linux-gnu.

    Google nwalere nkwalite ndị a kpọtụrụ aha na mbụ iji belata oge nrụpụta ngwa ikpo okwu gam akporo nke edere na ajari. Iji "-C codegen-units = 1" mgbe ị na-ewu gam akporo nyere anyị ohere ibelata nha nke ngwa ngwa site na 5.5% wee welie arụmọrụ ya site na 1.8%, ebe oge nrụpụta nke ngwa ngwa n'onwe ya fọrọ nke nta ka okpukpu abụọ.

    Na-eme ka nchịkọta mkpofu oge njikọ ("-gc-ngalaba") wetara uru arụmọrụ ruo 1.9%, na-eme ka njikarịcha oge njikọ (LTO) ruo 7.7%, na nkwalite ndị dabeere na profaịlụ (PGO) ruo 19.8%. N'ikpeazụ, a na-etinye njikarịcha site na iji ọrụ BOLT, nke mere ka o kwe omume ịbawanye ọsọ ọsọ na 24.7%, mana nha nke ngwá ọrụ ahụ mụbara site na 10.9%.

    Ntọhapụ nke asụsụ mmemme Rust 1.75 na unikernel Hermit 0.6.7

  • Atụgharịla akụkụ ọhụrụ nke API n'ụdị nke kwụsiri ike, gụnyere ụzọ na mmejuputa omume nke ejiri mesie ike:
    • Atọmk*:: sitere na_ptr
    • FileTimes
    • FileTimesExt
    • Faịlụ::set_modified
    • Faịlụ:: set_times
    • IPAddr :: ka_canonical
    • Ipv6Addr :: na-canonical
    • Nhọrọ :: as_slice
    • Nhọrọ :: as_mut_slice
    • pointer ::byte_add
    • pointer ::byte_offset
    • pointer ::byte_offset_si
    • pointer ::byte_sub
    • pointer ::wrapping_byte_add
    • pointer ::wrapping_byte_offset
    • pointer ::wrapping_byte_sub
  • A na-eji àgwà "const", nke na-ekpebi ohere iji ya mee ihe n'ọnọdụ ọ bụla kama ịdịgidesi ike, na ọrụ:
    • IPv6Addr :: ka_ipv4_mapped
    • MaybeUninit :: were_init_agụ
    • Eleghi anya Uninit :: efu
    • mem:: ikpa oke
    • mem:: efu
  • Emejuputala ọkwa nkwado nke atọ maka csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd na mipsel-unknown-netbsd nyiwe. Ọkwa nke atọ gụnyere nkwado bụ isi, mana na-enweghị nnwale akpaaka, na-ewu ụlọ ọrụ na-ebipụta, ma ọ bụ lelee ma enwere ike iwu koodu ahụ.

Tụkwasị na nke a, anyị nwere ike ịhụ ụdị ọrụ Hermit ọhụrụ, nke na-emepụta kernel pụrụ iche (unikernel), nke edere n'asụsụ Rust, na-enye ngwá ọrụ maka ịmepụta ngwa ndị nwere onwe ha nke nwere ike ịgba ọsọ n'elu hypervisor ma ọ bụ ngwaike efu na-enweghị ọkwa ọzọ. na enweghị sistemụ arụmọrụ. Mgbe arụchara ya, a na-ejikọta ngwa ahụ na ọbá akwụkwọ, nke na-arụ ọrụ niile dị mkpa n'onwe ya, na-ejikọtaghị ya na kernel OS na ụlọ akwụkwọ ọbá akwụkwọ. A na-ekesa koodu ọrụ n'okpuru ikike Apache 2.0 na MIT. A na-akwado ọgbakọ maka naanị mmezu nke ngwa ndị edere na Rust, Go, Fortran, C na C++. Ọrụ a na-emepụtakwa bootloader nke ya nke na-enye gị ohere ịmalite Hermit site na iji QEMU na KVM.

isi: opennet.ru

Tinye a comment