Ukukhutshwa kolwimi lwenkqubo iRust 1.75 kunye ne-unikernel Hermit 0.6.7

Ukukhutshwa kolwimi lwenkqubo ye-Rust 1.75, eyasekwa yiprojekthi ye-Mozilla, kodwa ngoku iphuhliswe phantsi kombutho ozimeleyo ongenzi nzuzo i-Rust Foundation, ipapashiwe. Ulwimi lugxininise ekukhuselweni kwememori kwaye lubonelela ngeendlela zokufikelela kwi-parallelism ephezulu yemisebenzi ngelixa ugwema ukusetyenziswa komqokeleli wenkunkuma kunye nexesha lokuqhuba (ixesha lokuqhuba liyancitshiswa ekuqaliseni okusisiseko kunye nokugcinwa kwelayibrari esemgangathweni).

Iindlela zokuphatha imemori ye-Rust zigcina umphuhlisi kwiimpazamo xa ulawula izikhombisi kwaye ukhusele kwiingxaki ezivela ngenxa yokuphathwa kwememori ekwinqanaba elisezantsi, njengokufikelela kwindawo yememori emva kokuba ikhululiwe, ukususa ireferensi yezalathisi ezingenanto, ukugqithiswa kwe-buffer, njl. Ukusasaza amathala eencwadi, ukubonelela ngokwakha kunye nokulawula ukuxhomekeka, iprojekthi iphuhlisa umphathi wephakheji yeCargo. Uvimba we-crates.io uyaxhaswa kukusingatha amathala eencwadi.

Ukhuseleko lwenkumbulo lubonelelwa kwiRust ngexesha lokudibanisa ngokujongwa kwereferensi, ukugcina umkhondo wobunini bento, ukugcina umkhondo wobomi bento (i-scopes), kunye nokuvavanya ukuchaneka kokufikelela kwimemori ngexesha lokwenziwa kwekhowudi. Umhlwa ukwabonelela ngokhuseleko ngokuchasene nokuphuphuma kwenani elipheleleyo, kufuna ukuqaliswa okunyanzelekileyo kwamaxabiso aguquguqukayo ngaphambi kokusetyenziswa, iphatha iimpazamo ngcono kwithala leencwadi elisemgangathweni, isebenzisa ingqikelelo yeembekiselo ezingenakuguquguquka kunye nezinto eziguquguqukayo ngokungagqibekanga, ibonelela ngochwethezo olomeleleyo ukuze kuncitshiswe iimpazamo ezinengqiqo.

Iinguqulelo eziphambili:

  • Yongeza ukukwazi ukusebenzisa "i-async fn" kunye ne "-> impl Trait" inothisi kwiimpawu zabucala. Umzekelo, usebenzisa "-> i-impl Trait" ungabhala indlela ye-trait ebuyisela i-iterator: i-trait Container { fn izinto (& self) -> impl Iterator; } Impl Isikhongozeli seMyContainer { fn izinto (& self) -> impl Iterator {self.items.iter().cloned ()}}

    Unokwenza kwakhona iimpawu usebenzisa "i-async fn": uphawu lweHttpService {async fn fetch (& self, url: Url) -> HtmlBody; // iya kwandiswa ukuya ku: // fn fetch(&self, url: Url) -> impl Future; }

  • I-API eyongeziweyo yokubala i-byte offsets ngokunxulumene nezikhombisi. Xa usebenza ngezikhombisi ezingenanto (β€œ*const T” kunye β€œ*mut T”), imisebenzi ingafuneka ukongeza i-offset kwisalathisi. Ngaphambili, kule nto kwakunokwenzeka ukusebenzisa ulwakhiwo olufana ne β€œ::yongeza(1)”, ukongeza inani leebhayithi ezingqamene nobukhulu buka β€œsize_of::()”. I-API entsha iwenza lula lo msebenzi kwaye yenza kube nokwenzeka ukukhohlisa i-byte offsets ngaphandle kokuphosa iintlobo kuqala ku-"*const u8" okanye "*mut u8".
    • isalathisi::byte_yongeza
    • isalathisi::byte_offset
    • isalathisi::byte_offset_from
    • isalathisi::byte_sub
    • isalathisi::ukusonga_byte_yongeza
    • isalathisi::ukusonga_byte_offset
    • isalathisi::Ukusonga_ngebhayithi_sub
  • Umsebenzi oqhubekayo wokwandisa ukusebenza kwe-rustc compiler. Yongeza i-BOLT optimizer, ehamba kwinqanaba le-post-link kwaye isebenzisa ulwazi oluvela kwiprofayili yokubulawa kwangaphambili. Ukusebenzisa i-BOLT kukuvumela ukuba ukhawulezise ukuphunyezwa komqokeleli malunga ne-2% ngokutshintsha i-layout ye-librustc_driver.so ikhowudi yelayibrari yokusetyenziswa ngokufanelekileyo kwe-cache yeprosesa.

    Kuqukwe ukwakhiwa komqokeleli we-rustc ngokhetho lwe-"-Ccodegen-units=1" ukuphucula umgangatho wokuphucula kwi-LLVM. Iimvavanyo ezenziweyo zibonisa ukunyuka komsebenzi kwimeko yokwakhiwa kwe-"-Ccodegen-units = 1" malunga ne-1.5%. Ukongezwa okongeziweyo kwenziwa ngokungagqibekanga kuphela kwiqonga le-x86_64-elingaziwa-linux-gnu.

    Ukulungiswa okukhankanywe ngaphambili kwavavanywa nguGoogle ukunciphisa ixesha lokwakha lamacandelo eqonga le-Android elibhalwe kwiRust. Ukusebenzisa i-"-C codegen-units = 1" xa kwakhiwa i-Android yasivumela ukuba sinciphise ubungakanani besixhobo se-toolkit nge-5.5% kwaye sandise ukusebenza kwayo nge-1.8%, ngelixa ixesha lokwakha i-toolkit ngokwayo liphantse liphindwe kabini.

    Ukuvumela ukuqokelelwa kwenkunkuma ye-link-time ("--gc-sections") kwazisa inzuzo yokusebenza ukuya kwi-1.9%, eyenza i-link-time optimization (LTO) ukuya kwi-7.7%, kunye ne-profile-based optimizations (PGO) ukuya kwi-19.8%. Ekugqibeleni, ukulungiswa kusetyenziswe ukusetyenziswa kwe-BOLT, okwenza kube lula ukunyusa isantya sokwakha ukuya kwi-24.7%, kodwa ubungakanani besixhobo sezixhobo zanda nge-10.9%.

    Ukukhutshwa kolwimi lwenkqubo iRust 1.75 kunye ne-unikernel Hermit 0.6.7

  • Inxalenye entsha ye-API iye yasiwa kudidi oluzinzileyo, kubandakanywa iindlela kunye nokuphunyezwa kweempawu ziye zazinziswa:
    • Atomic*::isuka_ptr
    • FileTimes
    • FileTimesExt
    • Ifayile::set_modified
    • Ifayile::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Ukhetho::njenge_isilayi
    • Ukhetho:: as_mut_piece
    • isalathisi::byte_yongeza
    • isalathisi::byte_offset
    • isalathisi::byte_offset_from
    • isalathisi::byte_sub
    • isalathisi::ukusonga_byte_yongeza
    • isalathisi::ukusonga_byte_offset
    • isalathisi::Ukusonga_ngebhayithi_sub
  • Uphawu "const", olumisela ukuba kunokwenzeka ukulisebenzisa kuyo nayiphi na imeko endaweni yesigxina, lisetyenziswa kwimisebenzi:
    • Ipv6Addr::to_ipv4_mapped
    • MhlawumbiUnit::cinga_init_funda
    • MhlawumbiUninit::zeroed
    • mem::uyacalula
    • mem:: zeroed
  • Inqanaba lesithathu lenkxaso liphunyeziwe kwi-csky-unknown-linux-gnuabiv2hf, i-i586-engaziwa-netbsd kunye ne-mipsel-unknown-netbsd platforms. Inqanaba lesithathu libandakanya inkxaso esisiseko, kodwa ngaphandle kovavanyo oluzenzekelayo, ukupapashwa kwezakhiwo ezisemthethweni, kunye nokuqinisekiswa kokwakhiwa kwekhowudi.

Ukongezelela, sinokuqaphela inguqu entsha yeprojekthi yeHermit, ephuhlisa i-kernel ekhethekileyo (unikernel), ebhalwe ngolwimi lwe-Rust, ukubonelela ngezixhobo zokwakha izicelo ezizimeleyo ezinokuthi ziqhube phezu kwe-hypervisor okanye i-hardware engenanto ngaphandle kweelayiti ezongezelelweyo. kwaye ngaphandle kwenkqubo yokusebenza. Xa yakhiwe, isicelo sidityaniswe ngokweenkcukacha kwithala leencwadi, eliphumeza ngokuzimeleyo yonke imisebenzi efunekayo, ngaphandle kokubotshwa kwi-OS kernel kunye namathala eencwadi enkqubo. Ikhowudi yeprojekthi ihanjiswa phantsi kwe-Apache 2.0 kunye neelayisensi ze-MIT. INdibano ixhaswa ukuphunyezwa kwe-stand-alone yezicelo ezibhalwe kwi-Rust, Go, Fortran, C kunye ne-C ++. Iprojekthi iphinda iphuhlise i-bootloader yayo evumela ukuba uqalise iHermit usebenzisa i-QEMU kunye ne-KVM.

umthombo: opennet.ru

Yongeza izimvo