Kutulutsidwa kwa chilankhulo cha pulogalamu Rust 1.75 ndi unikernel Hermit 0.6.7

Chilankhulo chothandizira anthu ambiri Rust 1.75, chomwe chinakhazikitsidwa ndi polojekiti ya Mozilla koma tsopano chapangidwa mothandizidwa ndi bungwe lodziyimira pawokha lopanda phindu la Rust Foundation, chatulutsidwa. Chilankhulochi chimayang'ana kwambiri pachitetezo cha kukumbukira ndipo chimapereka njira zopezera kufananiza kwakukulu kwa ntchito ndikupewa kugwiritsa ntchito chotolera zinyalala ndi nthawi yothamanga (nthawi yothamanga imachepetsedwa kuti ikhale yoyambira ndikukonza laibulale yokhazikika).

Njira zogwiritsira ntchito kukumbukira za Rust zimapulumutsa wopanga ku zolakwika pamene akuwongolera zolozera ndikuteteza ku zovuta zomwe zimadza chifukwa cha kukumbukira kwapang'onopang'ono, monga kupeza malo okumbukira atamasulidwa, kuchotsa zolozera zopanda pake, ma buffer overruns, etc. Kugawira malaibulale, kupereka zomanga ndi kusamalira zodalira, pulojekitiyi imapanga woyang'anira phukusi la Cargo. Malo osungiramo crates.io amathandizidwa kuti azisunga malaibulale.

Kutetezedwa kwa Memory kumaperekedwa mu Rust panthawi yophatikiza kudzera pakuwunika, kuyang'anira umwini wa chinthu, kuyang'anira nthawi ya moyo wa chinthu (ma scopes), ndikuwunika kulondola kwa kukumbukira kukumbukira panthawi yopanga ma code. Dzimbiri limaperekanso chitetezo ku kusefukira kwazinthu zonse, kumafuna kukhazikitsidwa kovomerezeka kwa zinthu zosinthika musanagwiritse ntchito, kuwongolera zolakwika bwino mulaibulale yokhazikika, kumagwiritsa ntchito lingaliro la maumboni osasinthika ndi zosintha mwachisawawa, kumapereka zilembo zolimba kuti muchepetse zolakwika zomveka.

Zatsopano zazikulu:

  • Anawonjezera kuthekera kogwiritsa ntchito "async fn" ndi "-> impl Trait" zolemba pazikhalidwe zachinsinsi. Mwachitsanzo, pogwiritsa ntchito "-> impl Trait" mukhoza kulemba ndondomeko ya khalidwe yomwe imabwezeretsanso wobwereza: khalidwe Container { fn items(& self) -> impl Iterator; } impl Container ya MyContainer {fn zinthu(&self) -> impl Iterator {self.items.iter().cloned()}}

    Mukhozanso kupanga makhalidwe pogwiritsa ntchito "async fn": khalidwe la HttpService {async fn fetch(&self, url: Url) -> HtmlBody; // idzakulitsidwa ku: // fn fetch(&self, url: Url) -> impl Future; }

  • API yowonjezeredwa yowerengera ma byte offset okhudzana ndi zolozera. Mukamagwira ntchito ndi zolozera zopanda kanthu ("* const T" ndi "*mut T"), maopaleshoni angafunikire kuwonjezera cholumikizira ku cholozera. M'mbuyomu, chifukwa cha izi zinali zotheka kugwiritsa ntchito zomangamanga monga "::add(1)", ndikuwonjezera chiwerengero cha ma byte ofanana ndi kukula kwa "size_of::()". API yatsopano imathandizira izi ndikupangitsa kuti zitheke kusintha ma byte osatulutsa mitunduyo ku "* const u8" kapena "*mut u8".
    • pointer::byte_add
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Kupitiliza ntchito kuti muwonjezere magwiridwe antchito a rustc compiler. Anawonjezera BOLT optimizer, yomwe imayenda mu post-link siteji ndikugwiritsa ntchito chidziwitso kuchokera ku mbiri yokonzekera yokonzekeratu. Kugwiritsa ntchito BOLT kumakupatsani mwayi wofulumizitsa kupha kwa compiler pafupifupi 2% posintha masanjidwe a library ya librustc_driver.so kuti mugwiritse ntchito bwino posungira purosesa.

    Kuphatikizirapo kupanga compiler ya rustc ndi "-Ccodegen-units=1" njira yopititsira patsogolo kukhathamiritsa kwa LLVM. Mayesero omwe adachitika akuwonetsa kuwonjezeka kwa magwiridwe antchito pankhani ya "-Ccodegen-units = 1" yomanga pafupifupi 1.5%. Kukhathamiritsa kowonjezera kumathandizidwa mwachisawawa pa nsanja ya x86_64-yosadziwika-linux-gnu.

    Zomwe tazitchula kale zidayesedwa ndi Google kuti achepetse nthawi yomanga zida za nsanja za Android zolembedwa ku Rust. Kugwiritsa ntchito "-C codegen-units = 1" pomanga Android kunatilola kuti tichepetse kukula kwa zida zogwiritsira ntchito ndi 5.5% ndikuwonjezera ntchito yake ndi 1.8%, pamene nthawi yomanga zidazokha pafupifupi kawiri.

    Kuthandizira kusonkhanitsa zinyalala za nthawi yolumikizana ("--gc-magawo") kunabweretsa phindu mpaka 1.9%, kupangitsa kukhathamiritsa kwa nthawi yolumikizira (LTO) mpaka 7.7%, ndi kukhathamiritsa kwambiri (PGO) mpaka 19.8%. Pamapeto pake, kukhathamiritsa kunagwiritsidwa ntchito pogwiritsa ntchito BOLT, zomwe zinapangitsa kuti ziwonjezeke liwiro la kumanga ku 24.7%, koma kukula kwa chida chinawonjezeka ndi 10.9%.

    Kutulutsidwa kwa chilankhulo cha pulogalamu Rust 1.75 ndi unikernel Hermit 0.6.7

  • Gawo latsopano la API lasunthidwa ku gulu lokhazikika, kuphatikiza njira ndi kukhazikitsidwa kwa machitidwe akhazikika:
    • Atomiki*::kuchokera_ptr
    • FileTimes
    • FileTimesExt
    • Fayilo::set_modified
    • Fayilo::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Njira::monga_kagawo
    • Njira::as_mut_slice
    • pointer::byte_add
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Lingaliro la "const", lomwe limatsimikizira kuthekera kogwiritsa ntchito mwanjira iliyonse m'malo mwa zokhazikika, limagwiritsidwa ntchito muzochita:
    • Ipv6Addr::to_ipv4_mapped
    • MwinaUninit::kuganiza_init_werengani
    • MwinaUninit::ziroed
    • mem::zosankha
    • me:: zero
  • Gawo lachitatu lothandizira lakhazikitsidwa pa nsanja za csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd ndi mipsel-unknown-netbsd. Mulingo wachitatu umakhudzanso chithandizo choyambirira, koma popanda kuyesa kokha, kusindikiza kovomerezeka, kapena kuwona ngati code ingamangidwe.

Kuonjezera apo, tikhoza kuzindikira mtundu watsopano wa polojekiti ya Hermit, yomwe imapanga kernel yapadera (unikernel), yolembedwa m'chinenero cha dzimbiri, kupereka zida zopangira mapulogalamu odzipangira okha omwe amatha kuthamanga pamwamba pa hypervisor kapena hardware yopanda kanthu popanda zigawo zowonjezera. komanso popanda opaleshoni dongosolo. Ikamangidwa, ntchitoyo imalumikizidwa ndi laibulale, yomwe imagwiritsa ntchito ntchito zonse zofunika, popanda kumangirizidwa ku OS kernel ndi malaibulale amtundu. Khodi ya pulojekitiyi imagawidwa pansi pa ziphaso za Apache 2.0 ndi MIT. Msonkhano umathandizidwa kuti agwiritse ntchito okha mapulogalamu olembedwa mu Rust, Go, Fortran, C ndi C ++. Ntchitoyi ikupanganso bootloader yake yomwe imakulolani kuti mutsegule Hermit pogwiritsa ntchito QEMU ndi KVM.

Source: opennet.ru

Kuwonjezera ndemanga