Ho lokolloa ha puo ea lenaneo Rust 1.75 le unikernel Hermit 0.6.7

Ho lokolloa ha puo ea lenaneo la Rust 1.75 ka kakaretso, e thehiloeng ke morero oa Mozilla, empa hona joale e ntlafalitsoeng ka tlas'a ts'ebetso ea mokhatlo o ikemetseng o sa etseng phaello oa Rust Foundation, e hatisitsoe. Puo e shebana le ts'ireletso ea mohopolo 'me e fana ka mekhoa ea ho finyella mosebetsi o phahameng oa ho ts'oara mosebetsi ha o ntse o qoba ho sebelisoa ha moqoqo oa lithōle le nako ea ho sebetsa (nako ea ho sebetsa e fokotsehile ho qala ho qala le ho boloka laebrari e tloaelehileng).

Mekhoa ea ho sebetsana le memori ea Rust e boloka moqapi ho tsoa liphosong ha a laola lintlha le ho sireletsa khahlanong le mathata a hlahang ka lebaka la ho tšoara memori ea boemo bo tlaase, joalo ka ho fumana sebaka sa memori ka mor'a hore e lokolloe, ho tlosa li-null pointer, buffer overruns, joalo-joalo. Ho aba lilaebrari, ho fana ka meaho le ho laola litšepe, projeke e nts'etsapele mookameli oa thepa ea Cargo. Sebaka sa polokelo ea crates.io se tšehetsoa bakeng sa lilaebrari tse amohelang batho.

Tšireletseho ea memori e fanoa ka Rust ka nako ea ho bokella ka ho hlahloba litšupiso, ho boloka tlaleho ea botho ba ntho, ho boloka tlaleho ea bophelo ba ntho (scopes), le ho lekola ho nepahala ha phihlello ea mohopolo nakong ea ts'ebetso ea khoutu. Rust e boetse e fana ka ts'ireletso khahlano le phallo e felletseng, e hloka ho qalisoa ha boleng bo fapaneng pele e sebelisoa, e sebetsana le liphoso hamolemo laebraring e tloaelehileng, e sebelisa mohopolo oa litšupiso tse ke keng tsa fetoha le mefuta e fapaneng ka mokhoa o ikhethileng, e fana ka ho thaepa ho tiileng ho fokotsa liphoso tse utloahalang.

Litlhahiso tse ka sehloohong:

  • E kenyellelitse bokhoni ba ho sebelisa "async fn" le "-> impl Trait" notation ka mekhoa ea poraefete. Ka mohlala, ho sebelisa "-> impl Trait" u ka ngola mokhoa oa mokhoa o khutlisetsang motho ea pheta-pheta: trait Container { fn items(&self) -> impl Iterator; } impl Setshelo sa MyContainer { fn items(&self) -> impl Iterator {self.items.iter().cloned()}}

    U ka boela ua etsa litšobotsi u sebelisa "async fn": tšobotsi HttpService {async fn fetch(&self, url: Url) -> HtmlBody; // e tla atolosoa ho: // fn fetch(&self, url: Url) -> impl Future; }

  • E kenyellelitsoe API bakeng sa ho bala li-byte offsets tse amanang le lintlha. Ha o sebetsa ka litsupa tse se nang letho ("*const T" le "*mut T"), ho ka hlokahala ts'ebetso ho kenyelletsa sesupo. Nakong e fetileng, bakeng sa sena ho ne ho khoneha ho sebelisa mohaho o kang "::eketsa(1)", ho eketsa palo ea li-byte tse tsamaellanang le boholo ba "size_of::()". API e ncha e nolofatsa ts'ebetso ena mme e etsa hore ho khonehe ho laola li-byte offsets ntle le ho qala mefuta ho "*const u8" kapa "*mut u8".
    • pointer::byte_eketsa
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_eketsa
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Mosebetsi o tsoelang pele ho eketsa ts'ebetso ea moqapi oa rustc. E kentse BOLT optimizer, e sebetsang sethaleng sa post-link mme e sebelisa boitsebiso bo tsoang ho profil ea ho bolaoa e lokiselitsoeng esale pele. Ho sebelisa BOLT ho u fa monyetla oa ho potlakisa ts'ebetso ea moqapi ka hoo e ka bang 2% ka ho fetola sebopeho sa librustc_driver.so laebrari ea khoutu bakeng sa tšebeliso e ntle ea cache ea processor.

    E kenyelelitsoe ho aha moqapi oa rustc ka khetho ea "-Ccodegen-units=1" ho ntlafatsa boleng ba ntlafatso ho LLVM. Liteko tse entsoeng li bontša keketseho ea ts'ebetso tabeng ea "-Ccodegen-units=1" e hahiloeng ka hoo e ka bang 1.5%. Lintlafatso tse kenyellelitsoeng li lumelloa ka mokhoa o ikhethileng feela bakeng sa sethala sa x86_64-tse sa tsejoeng-linux-gnu.

    Lintlafatso tse boletsoeng pejana li ile tsa lekoa ke Google ho fokotsa nako ea kaho ea likarolo tsa sethala sa Android se ngotsoeng ho Rust. Ho sebelisa "-C codegen-units = 1" ha re haha ​​​​Android ho re lumelletse ho fokotsa boholo ba lisebelisoa tsa lisebelisoa ka 5.5% le ho eketsa ts'ebetso ea eona ka 1.8%, ha nako ea ho haha ​​ea toolkit ka boeona e batla e imenne habeli.

    Ho nolofalletsa pokello ea lithōle tsa nako ("--gc-sections") ho tlisitse phaello ea ts'ebetso ho fihla ho 1.9%, ho nolofalletsa ho ntlafatsa nako ea li-link (LTO) ho fihla ho 7.7%, le optimizations e thehiloeng ho profil (PGO) ho fihla ho 19.8%. Qetellong, lisebelisoa li ile tsa sebelisoa ho sebelisoa BOLT utility, e leng se entseng hore ho khonehe ho eketsa lebelo la ho haha ​​​​ho 24.7%, empa boholo ba lisebelisoa tsa lisebelisoa bo eketsehile ka 10.9%.

    Ho lokolloa ha puo ea lenaneo Rust 1.75 le unikernel Hermit 0.6.7

  • Karolo e ncha ea API e fetiselitsoe sehlopheng sa ba tsitsitseng, ho kenyelletsa le mekhoa le ts'ebetsong ea mekhoa e tsitsitseng:
    • Atomic*::ho tloha_ptr
    • FileTimes
    • FileTimesExt
    • Faele::set_modified
    • Faele::set_times
    • IPAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Khetho::as_slice
    • Khetho::as_mut_slice
    • pointer::byte_eketsa
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_eketsa
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Sebopeho sa "consst", se khethollang monyetla oa ho se sebelisa maemong afe kapa afe ho fapana le li-constants, se sebelisoa mesebetsing:
    • Ipv6Addr::to_ipv4_mapped
    • MohlomongUninit:: nka_init_bala
    • MohlomongUninit::zeroed
    • mem:: kgethollo
    • mem::zeroed
  • Boemo ba boraro ba ts'ehetso bo kentsoe ts'ebetsong bakeng sa li-platform tsa csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd le mipsel-unknown-netbsd. Boemo ba boraro bo kenyelletsa ts'ehetso ea mantlha, empa ntle le tlhahlobo ea boiketsetso, meaho ea semmuso ea phatlalatso, kapa ho hlahloba hore na khoutu e ka hahuoa.

Ho phaella moo, re ka hlokomela phetolelo e ncha ea morero oa Hermit, o hlahisang kernel e khethehileng (unikernel), e ngotsoeng ka puo ea Rust, e fanang ka lisebelisoa tsa ho haha ​​​​likopo tse ikemetseng tse ka sebetsang ka holim'a hypervisor kapa hardware e se nang letho ntle le likarolo tse eketsehileng. le ntle le sistimi e sebetsang. Ha e hahiloe, kopo e hokahanngoa ka mokhoa o tsitsitseng le laebraring, e ikemetseng e sebetsanang le ts'ebetso eohle e hlokahalang, ntle le ho tlamelloa ho OS kernel le lilaebraring tsa tsamaiso. Khoutu ea projeke e ajoa tlasa laesense ea Apache 2.0 le MIT. Kopano e tšehetsoa bakeng sa ts'ebetso e ikemetseng ea likopo tse ngotsoeng ho Rust, Go, Fortran, C le C++. Morero o boetse o nts'etsapele bootloader ea ona e o lumellang ho qala Hermit o sebelisa QEMU le KVM.

Source: opennet.ru

Eketsa ka tlhaloso