Liberasyon langaj pwogram Rust 1.75 ak unikernel Hermit 0.6.7

Yo te pibliye piblikasyon langaj pwogramasyon jeneral Rust 1.75, ki te fonde pa pwojè Mozilla, men kounye a devlope sou ejid òganizasyon endepandan ki pa pou pwofi Rust Foundation. Lang la konsantre sou sekirite memwa epi li bay mwayen pou reyalize gwo paralèl nan ekzekisyon travay, pandan y ap evite itilizasyon yon pèseptè fatra ak tan exécute (se redui tan an nan inisyalizasyon debaz ak antretyen nan bibliyotèk la estanda).

Teknik jesyon memwa Rust yo libere pwomotè a soti nan erè manipilasyon konsèy epi pwoteje kont pwoblèm ki rive nan manipilasyon memwa ki ba-nivo, tankou aksè apre-gratis, dereferans pointer nil, depase tanpon, ak lòt bagay. Pou distribye bibliyotèk, asire asanble ak jere depandans, pwojè a ap devlope manadjè pake kago. Repozitwa crates.io sipòte pou hosting bibliyotèk.

Sekirite memwa aplike nan Rust nan moman konpile atravè chèk referans, swiv pwopriyetè objè, konsiderasyon pou tout lavi objè (delimitasyon) ak evalyasyon aksè memwa nan tan exécution. Rust tou bay pwoteksyon kont debòde nonb antye relatif, mande pou valè varyab yo dwe inisyalize anvan yo itilize, gen pi bon manyen erè nan bibliyotèk estanda a, sèvi ak konsèp nan referans imuiabl ak varyab pa default, epi li ofri fò sezisman estatik pou minimize erè lojik.

Prensipal inovasyon:

  • Te ajoute kapasite pou itilize "async fn" ak notasyon "->impl Trait" nan karakteristik prive. Pa egzanp, lè l sèvi avèk "->impl Trait" ou ka ekri yon metòd karakteristik ki retounen yon iteratè: trait Container { fn items(&self) -> impl Iterator; } impl Container for MyContainer { fn items(&self) -> impl Iterator {self.items.iter().cloned() } }

    Ou kapab tou kreye karakteristik lè l sèvi avèk "async fn": trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // yo pral elaji nan: // fn fetch(&self, url: Url) -> impl Future; }

  • Te ajoute API pou kalkile konpanse byte parapò ak endikasyon. Lè w ap travay ak endikasyon ki vid (“*const T” ak “*mut T”), operasyon yo ka oblije ajoute yon konpanse nan konsèy la. Anvan sa, pou sa li te posib pou itilize yon konstriksyon tankou "::add(1)", ajoute kantite bytes ki koresponn ak gwosè "size_of::()". Nouvo API a senplifye operasyon sa a epi li fè li posib pou manipile offsets byte san yo pa premye jete kalite yo nan "*const u8" oswa "*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
  • Kontinye travay pou ogmante pèfòmans du rustc. Te ajoute optimisateur BOLT, ki kouri nan etap pòs-lyen epi sèvi ak enfòmasyon ki soti nan yon pwofil ekzekisyon pre-prepare. Sèvi ak BOLT pèmèt ou akselere ekzekisyon konpilatè a apeprè 2% lè w chanje layout kòd bibliyotèk librustc_driver.so pou itilizasyon kachèt processeur a pi efikas.

    Gen ladann konstwi du rustc ak opsyon "-Ccodegen-units=1" pou amelyore kalite optimisation nan LLVM. Tès yo fè montre yon ogmantasyon nan pèfòmans nan ka a nan "-Ccodegen-units = 1" bati pa apeprè 1.5%. Optimize yo ajoute yo aktive pa default sèlman pou platfòm la x86_64-unknown-linux-gnu.

    Optimize yo mansyone deja yo te teste pa Google pou diminye tan konstriksyon konpozan platfòm android ekri nan Rust. Sèvi ak "-C codegen-units = 1" lè w ap bati Android pèmèt nou redwi gwosè bwat zouti a pa 5.5% epi ogmante pèfòmans li a 1.8%, pandan y ap tan konstriksyon zouti nan tèt li prèske double.

    Pèmèt koleksyon fatra nan tan lyen ("--gc-sections") te pote pwogrè nan pèfòmans jiska 1.9%, pèmèt optimize tan lyen (LTO) jiska 7.7%, ak optimize ki baze sou pwofil (PGO) jiska 19.8%. Nan final la, optimize yo te aplike lè l sèvi avèk sèvis piblik BOLT la, ki te fè li posib pou ogmante vitès la bati a 24.7%, men gwosè a nan bwat zouti a ogmante pa 10.9%.

    Liberasyon langaj pwogram Rust 1.75 ak unikernel Hermit 0.6.7

  • Yon nouvo pòsyon nan API a te transfere nan kategori ki estab, ki gen ladan metòd yo ak aplikasyon karakteristik yo:
    • Atomik*::from_ptr
    • FileTimes
    • FileTimesExt
    • File::set_modified
    • File::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Opsyon::as_slice
    • Opsyon::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
  • Atribi "const", ki detèmine posiblite pou itilize li nan nenpòt kontèks olye pou yo konstan, yo itilize nan fonksyon yo:
    • Ipv6Addr::to_ipv4_mapped
    • PetètUninit::assume_init_read
    • PetètUninit::zeroed
    • mem::diskriminant
    • mem::zeroed
  • Yo te aplike twazyèm nivo sipò pou platfòm csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd ak mipsel-unknown-netbsd. Twazyèm nivo a enplike sipò debaz, men san yo pa tès otomatik, pibliye bati ofisyèl, oswa tcheke si kòd la ka bati.

Anplis de sa, nou ka sonje yon nouvo vèsyon pwojè Hermit, ki devlope yon nwayo espesyalize (unikernel), ekri nan lang Rust, ki bay zouti pou bati aplikasyon endepandan ki ka kouri sou tèt yon ipèvizè oswa pyès ki nan konpitè san okenn kouch adisyonèl. ak san yon sistèm operasyon. Lè yo bati, aplikasyon an se statikman lye nan yon bibliyotèk, ki endepandamman aplike tout fonksyonalite ki nesesè yo, san yo pa mare nan nwayo a OS ak bibliyotèk sistèm. Kòd pwojè a distribye anba Apache 2.0 ak lisans MIT. Asanble sipòte pou egzekisyon otonòm aplikasyon ki ekri nan Rust, Go, Fortran, C ak C++. Pwojè a ap devlope tou pwòp bootloader li ki pèmèt ou lanse Hermit lè l sèvi avèk QEMU ak KVM.

Sous: opennet.ru

Add nouvo kòmantè