Ukukhishwa kolimi lokuhlela i-Rust 1.75 kanye ne-unikernel Hermit 0.6.7

Ulimi lokuhlela lwenhloso evamile i-Rust 1.75, olwasungulwa iphrojekthi ye-Mozilla kodwa manje oluthuthukiswe ngaphansi kwenhlangano ezimele engenzi nzuzo i-Rust Foundation, lukhululiwe. Ulimi lugxile ekuphepheni kwenkumbulo futhi luhlinzeka ngezindlela zokuzuza ukufana kwemisebenzi ephezulu kuyilapho ugwema ukusetshenziswa komqoqi kadoti nesikhathi sokusebenza (isikhathi sokusebenza sincishiselwa ekuqaliseni okuyisisekelo nasekunakekeleni umtapo wolwazi ojwayelekile).

Izindlela zokuphatha inkumbulo kaRust zisindisa unjiniyela emaphutheni lapho eshintsha izikhombi futhi avikele ezinkingeni eziphakama ngenxa yokuphatha inkumbulo esezingeni eliphansi, njengokufinyelela indawo yenkumbulo ngemva kokuba ikhululiwe, ukuhoxisa izikhombi ezingenalutho, ukugcwala kwebhafa, njll. Ukuze kusatshalaliswe imitapo yolwazi, ukuhlinzeka ngokwakha nokuphatha okuncikile, iphrojekthi ithuthukisa umphathi wephakheji ye-Cargo. Inqolobane ye-crates.io isekelwe ekusingatheni imitapo yolwazi.

Ukuphepha kwenkumbulo kunikezwa ku-Rust ngesikhathi sokuhlanganiswa ngokuhlolwa kwereferensi, ukulandelela ubunikazi bento, ukulandelela isikhathi sokuphila kwento (izikophu), nokuhlola ukulunga kokufinyelela inkumbulo ngesikhathi sokwenziwa kwekhodi. I-Rust iphinde inikeze isivikelo ekuchichimeni okuphelele, idinga ukuqaliswa okuyisibopho kwamanani ahlukahlukene ngaphambi kokusetshenziswa, iphatha amaphutha kangcono kulabhulali evamile, isebenzisa umqondo wezithenjwa ezingaguquleki nokuguquguqukayo ngokuzenzakalelayo, inikeza ukuthayipha okuqinile okuqinile ukuze kuncishiswe amaphutha anengqondo.

Okuqanjiwe okuyinhloko:

  • Kwengezwe amandla okusebenzisa “async fn” kanye nethi “->impl Trait” ezicini eziyimfihlo. Isibonelo, usebenzisa okuthi “->impl Trait” ungabhala indlela ye-trait ebuyisela i-iterator: trait Container { fn items(&self) -> impl Iterator; } Isitsha se-impl se-MyContainer { fn items(&self) -> impl Iterator {self.items.iter().cloned()}}

    Ungakwazi futhi ukudala izici usebenzisa i-"async fn": trait HttpService {async fn fetch(&self, url: Url) -> HtmlBody; // izonwetshwa ukuze ibe: // fn fetch(&self, url: Url) -> impl Future; }

  • I-API eyengeziwe yokubala ama-byte offset ahlobene nezikhombi. Lapho usebenza ngezikhombisi ezingenalutho (“*const T” kanye “*mut T”), kungase kudingeke imisebenzi ukuze kwengezwe i-offset kusikhombisi. Ngaphambilini, kulokhu bekungenzeka ukusebenzisa ukwakhiwa okufana ne-“::add(1)”, kwengeza inani lamabhayithi ahambisana nosayizi “kasayizi_we::()”. I-API entsha yenza lo msebenzi ube lula futhi ikwenze kube lula ukusebenzisa ama-byte offset ngaphandle kokusakaza izinhlobo ku-"*const u8" noma "*mut u8".
    • isikhombi::byte_engeza
    • isikhombi::byte_offset
    • isikhombi::byte_offset_from
    • isikhombi::byte_sub
    • isikhombi::ukugoqa_byte_engeza
    • pointer::wrapping_byte_offset
    • isikhombi::ukugoqa_ibhayithi_sub
  • Umsebenzi oqhubekayo wokwandisa ukusebenza kwe-rustc compiler. Kwengezwe i-BOLT optimizer, esebenza kusiteji sokuxhumanisa futhi isebenzisa ulwazi oluvela kuphrofayela elungiselelwe kusengaphambili. Ukusebenzisa i-BOLT kukuvumela ukuthi usheshise ukusebenza komhlanganisi cishe ngo-2% ngokushintsha ukwakheka kwekhodi yelabhulali ye-librustc_driver.so ukuze usebenzise kahle inqolobane yokucubungula.

    Kufaka phakathi ukwakha i-rustc compiler ngenketho ethi "-Ccodegen-units=1" ukuthuthukisa ikhwalithi yokulungiselelwa ku-LLVM. Ukuhlola okwenziwe kubonisa ukwenyuka kokusebenza esimweni sokwakhiwa kwe-“-Ccodegen-units=1” cishe ngo-1.5%. Ukulungiselelwa okungeziwe kunikwa amandla ngokuzenzakalela kuphela kungxenyekazi ye-x86_64-engaziwa-linux-gnu.

    Ukulungiselelwa okukhulunywe ngakho ngaphambilini kwahlolwa i-Google ukuze kwehliswe isikhathi sokwakha sezingxenyekazi zeplathifomu ye-Android ebhalwe ngesiRust. Ukusebenzisa i-“-C codegen-units=1” lapho kwakhiwa i-Android kusivumele ukuba sehlise usayizi wekhithi yamathuluzi ngo-5.5% futhi sikhulise ukusebenza kwayo ngo-1.8%, kuyilapho isikhathi sokwakha sekhithi yamathuluzi ngokwaso sicishe siphindeke kabili.

    Ukunika amandla ukuqoqwa kukadoti wesikhathi sesixhumanisi (“--gc-sections”) kulethe inzuzo yokusebenza yafika ku-1.9%, okwenza i-link-time optimization (LTO) ifinyelele ku-7.7%, kanye nokulungiselelwa okusekelwe kuphrofayela (PGO) kufika ku-19.8%. Okokugcina, ukulungiswa kusetshenziswe kusetshenziswa insiza ye-BOLT, okwenze ukuthi kube nokwenzeka ukwandisa isivinini sokwakha ku-24.7%, kodwa usayizi wekhithi yamathuluzi ukhuphuke ngo-10.9%.

    Ukukhishwa kolimi lokuhlela i-Rust 1.75 kanye ne-unikernel Hermit 0.6.7

  • Ingxenye entsha ye-API iyiswe esigabeni sokuzinza, okuhlanganisa izindlela nokusetshenziswa kwezimpawu kuzinzile:
    • I-Atomic*::from_ptr
    • I-FileTimes
    • I-FileTimesExt
    • Ifayela::set_modified
    • Ifayela::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Inketho::njengocezu
    • Inketho::as_mut_slice
    • isikhombi::byte_engeza
    • isikhombi::byte_offset
    • isikhombi::byte_offset_from
    • isikhombi::byte_sub
    • isikhombi::ukugoqa_byte_engeza
    • pointer::wrapping_byte_offset
    • isikhombi::ukugoqa_ibhayithi_sub
  • Isibaluli esithi "const", esinquma ukuthi kungenzeka yini ukusisebenzisa kunoma yimuphi umongo esikhundleni sama-constants, sisetshenziswa emisebenzini:
    • Ipv6Addr::to_ipv4_mapped
    • MhlawumbeUninit::thatha_init_funda
    • MhlawumbeUninit::ziroed
    • mem::okubandlulula
    • mem::zero
  • Izinga lesithathu losekelo selisetshenziswe ku-csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd kanye neplathifomu ye-mipsel-unknown-netbsd. Ileveli yesithathu ibandakanya ukwesekwa okuyisisekelo, kodwa ngaphandle kokuhlola okuzenzakalelayo, ukushicilela izakhiwo ezisemthethweni, noma ukuhlola ukuthi ikhodi ingakhiwa yini.

Ukwengeza, singabona inguqulo entsha yephrojekthi ye-Hermit, eyenza i-kernel ekhethekile (unikernel), ebhalwe ngolimi lwe-Rust, ehlinzeka ngamathuluzi okwakha izinhlelo zokusebenza ezizimele ezingasebenza phezu kwe-hypervisor noma i-hardware engenalutho ngaphandle kwezendlalelo ezengeziwe. futhi ngaphandle kwesistimu yokusebenza. Uma lwakhiwe, uhlelo lokusebenza luxhunyaniswa ngokwezibalo kumtapo wolwazi, esebenzisa ngokuzimela yonke imisebenzi edingekayo, ngaphandle kokuboshelwa ku-OS kernel kanye nemitapo yolwazi yesistimu. Ikhodi yephrojekthi isatshalaliswa ngaphansi kwamalayisensi e-Apache 2.0 kanye ne-MIT. Umhlangano usekelwe ekusebenziseni uzimele wodwa wezinhlelo zokusebenza ezibhalwe nge-Rust, Go, Fortran, C kanye ne-C++. Le phrojekthi futhi ithuthukisa i-bootloader yayo ekuvumela ukuthi uqalise i-Hermit usebenzisa i-QEMU ne-KVM.

Source: opennet.ru

Engeza amazwana