Sakin yaren shirye-shirye Rust 1.75 da unikernel Hermit 0.6.7

An buga yaren shirye-shirye na Rust 1.75 na gabaɗaya, wanda aikin Mozilla ya kafa, amma yanzu an haɓaka shi a ƙarƙashin inuwar wata kungiya mai zaman kanta mai zaman kanta ta Rust Foundation. Harshen yana mai da hankali kan amincin ƙwaƙwalwar ajiya kuma yana ba da hanyoyin cimma babban daidaiton aiki yayin guje wa yin amfani da mai tara shara da lokacin aiki (an rage lokacin aiki zuwa farawa na asali da kiyaye daidaitaccen ɗakin karatu).

Hanyoyin sarrafa ƙwaƙwalwar Rust suna ceton mai haɓakawa daga kurakurai yayin sarrafa masu nuni da kuma kariya daga matsalolin da suka taso saboda ƙarancin kulawar ƙwaƙwalwar ajiya, kamar samun damar wurin ƙwaƙwalwar ajiya bayan an 'yantar da shi, cire maƙasudin null, buffer overruns, da dai sauransu. Don rarraba ɗakunan karatu, samar da gini da sarrafa abubuwan dogaro, aikin yana haɓaka manajan fakitin Kaya. Ana tallafawa ma'ajiyar crates.io don ɗaukar ɗakunan karatu.

Ana ba da amincin ƙwaƙwalwar ajiya a cikin Tsatsa a lokacin tattarawa ta hanyar duba tunani, kiyaye bin diddigin mallakar abu, kiyaye tsawon rayuwa (masu iyawa), da tantance daidaiton damar ƙwaƙwalwar ajiya yayin aiwatar da lambar. Tsatsa kuma yana ba da kariya daga ambaliya mai lamba, yana buƙatar ƙaddamar da ƙima mai mahimmanci kafin amfani, yana sarrafa kurakurai mafi kyau a cikin daidaitaccen ɗakin karatu, yana amfani da ra'ayi na nassoshi marasa canzawa da masu canji ta tsohuwa, yana ba da buga rubutu mai ƙarfi don rage kurakurai masu ma'ana.

Manyan sabbin abubuwa:

  • Ƙara ikon yin amfani da "async fn" da kuma "-> impl Trait" a cikin halaye masu zaman kansu. Misali, ta amfani da "-> impl Trait" za ka iya rubuta hanyar sifa da ke dawo da mai mai da: trait Container {fn items(&self) -> impl Iterator; } impl Container don MyContainer {fn abubuwa (&kai) -> impl Iterator {self.items.iter().cloned()}}

    Hakanan zaka iya ƙirƙirar halaye ta amfani da "async fn": halayen HttpService {async fn fetch(&self, url: Url) -> HtmlBody; // za a fadada zuwa: // fn fetch (&self, url: Url) -> impl Future; }

  • API ɗin da aka ƙara don ƙididdige saitin byte dangane da masu nuni. Lokacin aiki tare da masu nuni ("*const T" da "*mut T"), ana iya buƙatar ayyuka don ƙara haɓakawa zuwa mai nuni. A baya can, don wannan yana yiwuwa a yi amfani da ginin kamar " :: ƙara (1)", ƙara yawan adadin bytes daidai da girman "size_of :: ()". Sabuwar API tana sauƙaƙa wannan aikin kuma yana ba da damar yin amfani da abubuwan kashe byte ba tare da fara jefa nau'ikan zuwa "* const u8" ko "*mut u8" ba.
    • nuni ::byte_add
    • nuni ::byte_offset
    • nuni ::byte_offset_daga
    • nuni ::byte_sub
    • nuni ::wrapping_byte_add
    • nuni ::wrapping_byte_offset
    • nuni ::wrapping_byte_sub
  • Ci gaba da aiki don haɓaka aikin mai tara rustc. Ƙara mai inganta BOLT, wanda ke gudana a cikin matakin haɗin gwiwa kuma yana amfani da bayanai daga bayanin martabar da aka riga aka shirya. Yin amfani da BOLT yana ba ku damar hanzarta aiwatar da mai tarawa da kusan kashi 2% ta hanyar canza fasalin lambar ɗakin karatu na librusc_driver.so don ƙarin ingantaccen amfani da cache na processor.

    Haɗe da gina rustc compiler tare da zaɓin "-Ccodegen-units=1" don haɓaka ingancin haɓakawa a cikin LLVM. Gwaje-gwajen da aka yi sun nuna haɓakar aiki a yanayin "-Ccodegen-units=1" ginawa da kusan 1.5%. Ana kunna ƙarin haɓakawa ta tsohuwa kawai don dandalin x86_64-unknown-linux-gnu.

    Abubuwan ingantawa da aka ambata a baya Google ne ya gwada su don rage lokacin gina abubuwan dandali na Android da aka rubuta cikin Rust. Yin amfani da "-C codegen-units=1" lokacin gina Android ya ba mu damar rage girman kayan aikin da kashi 5.5% kuma mu ƙara yawan aiki da kashi 1.8%, yayin da lokacin gina kayan aikin da kansa ya kusan ninka sau biyu.

    Ƙaddamar da tarin datti na lokaci-lokaci ("-gc-sections") ya kawo ribar wasan kwaikwayon har zuwa 1.9%, yana ba da damar haɓaka lokaci-lokaci (LTO) har zuwa 7.7%, da haɓaka tushen bayanan martaba (PGO) har zuwa 19.8%. A ƙarshe, an yi amfani da haɓakawa ta amfani da kayan aikin BOLT, wanda ya ba da damar haɓaka saurin ginawa zuwa 24.7%, amma girman kayan aikin ya karu da 10.9%.

    Sakin yaren shirye-shirye Rust 1.75 da unikernel Hermit 0.6.7

  • An koma wani sabon yanki na API zuwa nau'in barga, gami da hanyoyin da aiwatar da halaye an daidaita su:
    • Atomic*::daga_ptr
    • FileTimes
    • FileTimesExt
    • Fayil :: saita_modified
    • Fayil :: saita_times
    • IPAddr :: zuwa_canonical
    • Ipv6Addr :: zuwa_canonical
    • Zabin :: as_slice
    • Zaɓi :: as_mut_slice
    • nuni ::byte_add
    • nuni ::byte_offset
    • nuni ::byte_offset_daga
    • nuni ::byte_sub
    • nuni ::wrapping_byte_add
    • nuni ::wrapping_byte_offset
    • nuni ::wrapping_byte_sub
  • Ana amfani da sifa na "const", wanda ke ƙayyade yiwuwar amfani da shi a cikin kowane mahallin maimakon akai-akai, a cikin ayyuka:
    • Ipv6Addr :: zuwa_ipv4_mapped
    • Wataƙila Uninit :: ɗauka_init_ karanta
    • Wataƙila Uninit :: zeroed
    • mem:: nuna bambanci
    • mem:: zero
  • An aiwatar da mataki na uku na tallafi don csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd da mipsel-unknown-netbsd dandamali. Mataki na uku ya ƙunshi tallafi na asali, amma ba tare da gwaji ta atomatik ba, buga ginin hukuma, ko duba ko za a iya gina lambar.

Bugu da ƙari, za mu iya lura da wani sabon nau'i na aikin Hermit, wanda ke haɓaka ƙwaya ta musamman (unikernel), wanda aka rubuta a cikin harshen Rust, yana ba da kayan aiki don gina aikace-aikacen da ke da kai wanda zai iya gudana a saman hypervisor ko kayan aiki maras kyau ba tare da ƙarin yadudduka ba. kuma ba tare da tsarin aiki ba. Lokacin da aka gina shi, aikace-aikacen yana da alaƙa kai tsaye zuwa ɗakin karatu, wanda ke aiwatar da duk ayyukan da suka wajaba, ba tare da an haɗa shi da kernel na OS da ɗakunan karatu na tsarin ba. Ana rarraba lambar aikin a ƙarƙashin Apache 2.0 da lasisin MIT. Ana tallafawa majalisa don aiwatar da aikace-aikacen da aka rubuta a cikin Rust, Go, Fortran, C da C++ kadai. Hakanan aikin yana haɓaka nasa bootloader wanda ke ba ku damar ƙaddamar da Hermit ta amfani da QEMU da KVM.

source: budenet.ru

Add a comment