Kuburitswa kwemutauro wechirongwa Rust 1.75 uye unikernel Hermit 0.6.7

Mutauro wehurongwa hwese-chinangwa Rust 1.75, wakavambwa neMozilla purojekiti asi ikozvino wakagadziridzwa pasi perubatsiro rwesangano rakazvimirira rerust Foundation, raburitswa. Mutauro unotarisana nekuchengetedza ndangariro uye unopa nzira dzekuwana yakakwirira basa parallelism uchidzivirira kushandiswa kwemarara uye nguva yekumhanya (nguva yekumhanya inoderedzwa kusvika yekutanga yekutanga uye kugadzirisa raibhurari yakajairwa).

Rust's memory yekubata nzira dzinochengetedza mugadziri kubva mukukanganisa kana achibata anonongedzera uye kudzivirira kubva kumatambudziko anomuka nekuda kweakadzika-level ndangariro kubata, sekuwana nzvimbo yekurangarira mushure mekunge yasunungurwa, kudzoreredza null pointer, buffer overruns, nezvimwe. Kugovera maraibhurari, kupa kuvaka uye kugadzirisa zvinotsamira, purojekiti inovandudza Cargo package maneja. Iyo crates.io repository inotsigirwa kuitisa maraibhurari.

Kuchengetedzwa kwendangariro kunopihwa muRust panguva yekuunganidza kuburikidza nekutariswa kwekutarisa, kuchengeta track yemuridzi wechinhu, kuchengeta track yehupenyu hwechinhu (scopes), uye kuongorora iko kurongeka kwekuwana ndangariro panguva yekuita kodhi. Ngura inopawo dziviriro kubva pahuwandu hwekufashukira, inoda kusungirirwa kwekutanga kwemhando dzakasiyana usati washandiswa, inobata zvikanganiso zviri nani muraibhurari yakajairwa, inoshandisa iyo pfungwa yezvisingachinjiki mareferensi uye zvinosiyana nekusarudzika, inopa yakasimba static typing kuderedza zvikanganiso zvine musoro.

Zvitsva zvikuru:

  • Yakawedzera kugona kushandisa "async fn" uye "-> impl Trait" notation mune zvakavanzika hunhu. Semuenzaniso, uchishandisa "-> impl Trait" unogona kunyora nzira yemaitiro inodzorera iterator: trait Container { fn items(&self) -> impl Iterator; } impl Container yeMyContainer { fn zvinhu(&self) -> impl Iterator {self.items.iter().cloned()}}

    Iwe unogona zvakare kugadzira hunhu uchishandisa "async fn": hunhu HttpService {async fn fetch(&self, url: Url) -> HtmlBody; // ichawedzerwa ku: // fn fetch(&self, url: Url) -> impl Future; }

  • Yakawedzerwa API yekuverenga byte offsets inoenderana nemanongedzo. Paunenge uchishanda nemapoinzi asina chinhu (β€œ* const T” uye β€œ* mut T”), mashandisirwo anogona kudikanwa kuwedzera chinongedzo kune chinongedzo. Kare, kune izvi zvaigoneka kushandisa chivakwa senge β€œ::add(1)”, tichiwedzera nhamba yemabhaiti inoenderana nehukuru hweβ€œsize_of::()”. Iyo API nyowani inorerutsa kuita uku uye inoita kuti zvikwanise kushandura byte offset pasina kutanga yakanda mhando ku "* const u8" kana "* mut u8".
    • pointer::byte_add
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::kupeta_byte_add
    • pointer::wrapping_byte_offset
    • pointer::kupeta_byte_sub
  • Kuenderera mberi nebasa rekuwedzera kuita kwerustc compiler. Yakawedzera iyo BOLT optimizer, iyo inomhanya mu-post-link nhanho uye inoshandisa ruzivo kubva kune pre-yakagadzirirwa kuuraya profiles. Kushandisa BOLT kunokubvumira kuti ukurumidze kuita compiler execution inenge 2% nekushandura marongerwo e librustc_driver.so raibhurari kodhi kuti ishandiswe zvakanyanya ye processor cache.

    Inosanganisirwa kuvaka iyo rustc compiler ne "-Ccodegen-units = 1" sarudzo yekuvandudza mhando ye optimization muLLVM. Miedzo yakaitwa inoratidza kuwedzera kwekuita muchiitiko che "-Ccodegen-units = 1" inovaka neinoda kusvika 1.5%. Iwo akawedzerwa optimizations anogoneswa nekusarudzika chete kune x86_64-isingazivikanwe-linux-gnu chikuva.

    Iwo ambotaurwa optimizations akaedzwa neGoogle kudzikisa nguva yekuvaka yeAroid platform zvikamu zvakanyorwa muRust. Kushandisa "-C codegen-units = 1" pakuvaka Android kwakatibvumira kuderedza saizi yeturusi ne5.5% uye kuwedzera mashandiro ayo ne1.8%, nepo nguva yekuvaka yeturusi pachezvayo yakapetwa kaviri.

    Kugonesa yekubatanidza-nguva kuunganidzwa kwemarara (β€œ--gc-zvikamu”) kwakaunza kubudirira kwekuita kusvika pa1.9%, zvichiita kuti link-time optimization (LTO) isvike 7.7%, uye profil-based optimizations (PGO) inosvika 19.8%. Mukupedzisira, kugadzirisa kwakashandiswa uchishandisa BOLT utility, iyo yakabvumira kuwedzera kwekuvaka kukurumidza kusvika ku24.7%, asi ukuru hwechigadziro chekushandisa chakawedzera ne10.9%.

    Kuburitswa kwemutauro wechirongwa Rust 1.75 uye unikernel Hermit 0.6.7

  • Chikamu chitsva cheAPI chakaendeswa kuchikamu cheyakagadzikana, kusanganisira nzira uye mashandisirwo ehunhu zvakadzikamiswa:
    • Atomic*::from_ptr
    • FileTimes
    • FileTimesExt
    • Faira::set_modified
    • Faira::set_times
    • IpAddr::ku_canonical
    • Ipv6Addr::to_canonical
    • Sarudzo::se_chidimbu
    • Sarudzo::as_mut_slice
    • pointer::byte_add
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::kupeta_byte_add
    • pointer::wrapping_byte_offset
    • pointer::kupeta_byte_sub
  • Iyo "const" hunhu, iyo inosarudza mukana wekuishandisa mune chero mamiriro pachinzvimbo chezvimiro, inoshandiswa mumabasa:
    • Ipv6Addr::to_ipv4_mapped
    • PamweUninit::fungira_init_verenga
    • PamweUninit::zeroed
    • mem::kusarura
    • mem::zeroed
  • Nhanho yechitatu yerutsigiro yakashandiswa kune csky-isingazivikanwe-linux-gnuabiv2hf, i586-isingazivikanwe-netbsd uye mipsel-isingazivikanwe-netbsd mapuratifomu. Chikamu chechitatu chinosanganisira rutsigiro rwekutanga, asi pasina otomatiki kuyedzwa, kushambadza official kuvaka, kana kutarisa kuti kodhi inogona kuvakwa.

Pamusoro pezvo, isu tinogona kucherechedza vhezheni nyowani yeHermit purojekiti, iyo inogadzira yakasarudzika kernel (unikernel), yakanyorwa mumutauro weRust, ichipa maturusi ekuvaka ega ega maapplication anogona kumhanya pamusoro pe hypervisor kana isina chinhu hardware pasina mamwe machira. uye pasina sisitimu yekushandisa. Kana yavakwa, iyo application inosungirirwa kune raibhurari, iyo inozvimiririra kuita ese anodiwa mashandiro, pasina kusungirirwa kune OS kernel nemaraibhurari ehurongwa. Iyo kodhi yeprojekiti yakagoverwa pasi peApache 2.0 uye MIT marezinesi. Gungano rinotsigirwa kuti riite-ega kuita zvikumbiro zvakanyorwa muRust, Go, Fortran, C uye C++. Iyo purojekiti iri zvakare kugadzira yayo bhootloader iyo inokutendera iwe kuvhura Hermit uchishandisa QEMU neKVM.

Source: opennet.ru

Voeg