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" mutha kulemba njira yomwe imabweza wobwereza: trait Container { fn items(&self) -> impl Iterator ; } impl Container ya MyContainer {fn zinthu(&self) -> impl Iterator {self.items.iter().cloned()}}}

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

  • API yawonjezedwa powerengera ma byte offset okhudzana ndi zolozera. Mukamagwira ntchito ndi zolozera zopanda kanthu ("*const T" ndi "*mut T"), ntchito zomwe zimawonjezera cholozera pacholozera zitha kufunikira. M'mbuyomu, izi zitha kutheka pogwiritsa ntchito chomanga ngati "<*const T>::add(1)", chomwe chimawonjezera ma byte angapo ofanana ndi kukula kwa "size_of::()". API yatsopanoyi imathandizira izi ndikulola kusinthidwa kwa ma byte offset osalembapo kale "* 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
  • Ntchito yokonza magwiridwe antchito a rustc compiler yapitilira. The BOLT optimizer yawonjezedwa, ikuyendetsa kulumikiza pambuyo ndikugwiritsa ntchito chidziwitso kuchokera ku mbiri yokonzekera yokonzekeratu. Kugwiritsa ntchito BOLT kumafulumizitsa kupha kwa compiler pafupifupi 2% pokonzanso dongosolo la library librustc_driver.so kuti mugwiritse ntchito bwino posungira purosesa.

    Kumanga kwa rustc compiler tsopano kwathandizidwa ndi "-Ccodegen-units = 1" njira, yomwe imapangitsa kukhathamiritsa kwa LLVM. Mayeso akuwonetsa kuchuluka kwa magwiridwe antchito pafupifupi 1.5% ndikumanga "-Ccodegen-units=1". Zowonjezera izi zimayatsidwa mwachisawawa pa nsanja ya x86_64-yosadziwika-linux-gnu.

    Kukonza zinthu zomwe zatchulidwa kale kunayesedwa ndi Google kuti achepetse nthawi yomwe imatenga popanga zigawo za nsanja. Android, yolembedwa m'chinenero cha Rust. Kugwiritsa ntchito "-C codegen-units=1" pomanga Android zinatithandiza kuchepetsa kukula kwa chida chogwiritsira ntchito ndi 5.5% ndikuwonjezera zokolola zake ndi 1.8%, pomwe nthawi yopangira chidacho inatsala pang'ono kuwirikiza kawiri.

    Kuthandizira kusonkhanitsa zinyalala za nthawi yolumikizirana ("--gc-sections") kunachulukitsa magwiridwe antchito ndi 1.9%, kupangitsa kukhathamiritsa kwa nthawi yolumikizirana (LTO) kudachulukitsa ndi 7.7%, ndikupangitsa kukhathamiritsa kwa mbiri (PGO) kudakulitsa ndi 19.8%. Potsirizira pake, kukhathamiritsa pogwiritsa ntchito chida cha BOLT kunagwiritsidwa ntchito, kuonjezera liwiro la kumanga ndi 24.7%, koma kuwonjezera kukula kwa toolchain 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::asume_init_read
    • MwinaUninit::ziroed
    • mem::zosankha
    • me:: zero
  • Thandizo la Level 3 lakhazikitsidwa pa nsanja za csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd, ndi mipsel-unknown-netbsd. Level 3 imapereka chithandizo chofunikira, koma popanda kuyesa zokha, kutulutsa kovomerezeka, kapena kutsimikizira zomanga.

Kuphatikiza apo, mtundu watsopano wa pulojekiti ya Hermit ndi wofunika kudziwa. Imapanga kernel yapadera (unikernel) yolembedwa mu Rust, yomwe imapereka zida zopangira mapulogalamu odziyimira pawokha omwe amatha kugwira ntchito pa hypervisor kapena hardware yopanda zigawo zina kapena makina ogwiritsira ntchito. Panthawi yomanga, pulogalamuyi imalumikizidwa mokhazikika ku laibulale yomwe imagwiritsa ntchito magwiridwe antchito onse ofunikira, popanda kulumikizidwa ku kernel ya OS kapena malaibulale a system. Khodi ya pulojekitiyi imagawidwa pansi pa zilolezo za Apache 2.0 ndi MIT. Imathandizira kupanga mapulogalamu odziyimira pawokha olembedwa mu Rust, Go, Fortran, C, ndi C++. Pulojekitiyi ikupanganso bootloader yakeyake, kulola Hermit kuti iyambitsidwe pogwiritsa ntchito QEMU ndi KVM.

Source: opennet.ru

Gulani kuchititsa kodalirika kwamasamba okhala ndi chitetezo cha DDoS, ma seva a VPS VDS Gulani malo odalirika osungira mawebusayiti okhala ndi chitetezo cha DDoS, ma seva a VPS VDS | ProHoster