Pagpagawas sa programming language nga Rust 1.75 ug unikernel Hermit 0.6.7

Ang pagpagawas sa Rust 1.75 nga kinatibuk-ang katuyoan nga programming language, nga gitukod sa proyekto sa Mozilla, apan karon naugmad ubos sa pagdumala sa independenteng non-profit nga organisasyon nga Rust Foundation, gimantala. Ang lengguwahe nagtutok sa kaluwasan sa panumduman ug naghatag sa mga paagi aron makab-ot ang taas nga paralelismo sa trabaho samtang naglikay sa paggamit sa usa ka tigkolekta sa basura ug runtime (ang runtime gikunhoran ngadto sa batakang pagsugod ug pagmentinar sa standard library).

Ang mga pamaagi sa pagdumala sa panumduman sa Rust nagluwas sa developer gikan sa mga sayup sa pagmaniobra sa mga pointer ug pagpanalipod batok sa mga problema nga motumaw tungod sa ubos nga lebel sa pagdumala sa panumduman, sama sa pag-access sa usa ka lugar sa panumduman human kini mapagawas, pagtangtang sa mga null pointer, pag-overrun sa buffer, ug uban pa. Sa pag-apod-apod sa mga librarya, paghatag og mga pagtukod ug pagdumala sa mga dependency, ang proyekto nagpalambo sa Cargo package manager. Gisuportahan ang crates.io repository alang sa pag-host sa mga librarya.

Ang kaluwasan sa panumduman gihatag sa Rust sa oras sa pag-compile pinaagi sa pagsusi sa reference, pagsubay sa pagpanag-iya sa butang, pagsubay sa mga kinabuhi sa butang (scopes), ug pagtimbang-timbang sa pagkahusto sa pag-access sa memorya sa panahon sa pagpatuman sa code. Naghatag usab ang Rust og proteksyon batok sa pag-awas sa integer, nanginahanglan mandatory nga pagsugod sa mga variable nga kantidad sa wala pa gamiton, pagdumala sa mga sayup nga mas maayo sa standard nga librarya, gipadapat ang konsepto sa dili mausab nga mga pakisayran ug mga variable nga default, nagtanyag kusog nga static nga pag-type aron maminusan ang mga lohikal nga sayup.

Panguna nga mga inobasyon:

  • Gidugang ang abilidad sa paggamit sa "async fn" ug ang "-> impl Trait" nga notasyon sa pribadong mga kinaiya. Pananglitan, gamit ang "->impl Trait" mahimo nimong isulat ang usa ka pamaagi sa kinaiya nga nagbalik sa usa ka iterator: Trait Container { fn items(&self) -> impl Iterator; } impl Container para sa MyContainer { fn items(&self) -> impl Iterator {self.items.iter().cloned()} }

    Makahimo ka usab og mga kinaiya gamit ang "async fn": trait HttpService {async fn fetch(&self, url: Url) -> HtmlBody; // mapalapad ngadto sa: // fn fetch(&self, url: Url) -> impl Umaabot; }

  • Gidugang ang API alang sa pagkalkula sa mga byte offset nga may kalabotan sa mga pointer. Kung nagtrabaho gamit ang mga hubad nga pointer ("*const T" ug "*mut T"), mahimo’g kinahanglan ang mga operasyon aron makadugang usa ka offset sa pointer. Kaniadto, alang niini posible nga gamiton ang usa ka pagtukod sama sa "::add (1)", pagdugang sa gidaghanon sa mga byte nga katumbas sa gidak-on sa "size_of:: ()". Gipasimple sa bag-ong API kini nga operasyon ug gipaposible ang pagmaniobra sa mga byte offset nga dili una ihulog ang mga tipo sa "*const u8" o "*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
  • Nagpadayon nga pagtrabaho aron madugangan ang pasundayag sa rustc compiler. Gidugang ang BOLT optimizer, nga nagdagan sa post-link nga yugto ug naggamit sa impormasyon gikan sa usa ka pre-prepared execution profile. Ang paggamit sa BOLT nagtugot kanimo sa pagpadali sa pagpatuman sa compiler sa mga 2% pinaagi sa pag-usab sa layout sa librustc_driver.so library code alang sa mas episyente nga paggamit sa processor cache.

    Lakip ang pagtukod sa rustc compiler nga adunay kapilian nga "-Ccodegen-units=1" aron mapauswag ang kalidad sa pag-optimize sa LLVM. Ang mga pagsulay nga gihimo nagpakita sa pagtaas sa performance sa kaso sa "-Ccodegen-units=1" nga pagtukod sa gibana-bana nga 1.5%. Ang dugang nga mga pag-optimize gipalihok pinaagi sa default alang lamang sa x86_64-unknown-linux-gnu nga plataporma.

    Ang nahisgotan na nga mga pag-optimize gisulayan sa Google aron makunhuran ang oras sa pagtukod sa mga sangkap sa platform sa Android nga gisulat sa Rust. Ang paggamit sa "-C codegen-units = 1" sa dihang ang pagtukod sa Android nagtugot kanamo sa pagpakunhod sa gidak-on sa toolkit sa 5.5% ug pagdugang sa performance niini sa 1.8%, samtang ang panahon sa pagtukod sa toolkit mismo halos doble.

    Ang pagpagana sa link-time nga pagkolekta sa basura (β€œ--gc-sections”) nagdala sa performance gain ngadto sa 1.9%, nakapahimo sa link-time optimization (LTO) ngadto sa 7.7%, ug profile-based optimizations (PGO) ngadto sa 19.8% . Sa katapusan, ang mga pag-optimize gigamit gamit ang BOLT utility, nga nagpaposible nga madugangan ang katulin sa pagtukod sa 24.7%, apan ang gidak-on sa toolkit nadugangan sa 10.9%.

    Pagpagawas sa programming language nga Rust 1.75 ug unikernel Hermit 0.6.7

  • Usa ka bag-ong bahin sa API ang gibalhin sa kategorya nga stable, lakip ang mga pamaagi ug pagpatuman sa mga kinaiya nga na-stabilize:
    • Atomic*::gikan sa_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
  • Ang "const" nga hiyas, nga nagtino sa posibilidad sa paggamit niini sa bisan unsa nga konteksto imbes nga mga constant, gigamit sa mga gimbuhaton:
    • IPv6Addr::to_ipv4_mapped
    • MaybeUninit::assume_init_read
    • MaybeUninit::zeroed
    • mem:: diskriminasyon
    • mem::zero
  • Ang ikatulo nga lebel sa suporta kay gipatuman para sa csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd ug mipsel-unknown-netbsd nga mga plataporma. Ang ikatulo nga lebel naglakip sa batakang suporta, apan walay automated nga pagsulay, pagmantala sa opisyal nga pagtukod, o pagsusi kon ang code mahimo bang matukod.

Dugang pa, mamatikdan nato ang usa ka bag-ong bersyon sa Hermit nga proyekto, nga nagpalambo sa usa ka espesyal nga kernel (unikernel), nga gisulat sa Rust nga pinulongan, nga naghatag og mga himan alang sa pagtukod sa kaugalingon nga mga aplikasyon nga mahimong modagan sa ibabaw sa usa ka hypervisor o hubo nga hardware nga walay dugang nga mga lut-od. ug walay operating system. Kung gitukod, ang aplikasyon statically nalambigit sa usa ka librarya, nga independente nga nagpatuman sa tanan nga kinahanglan nga gamit, nga wala gihigot sa OS kernel ug mga librarya sa sistema. Ang code sa proyekto giapod-apod ubos sa Apache 2.0 ug MIT nga mga lisensya. Gisuportahan ang Assembly alang sa stand-alone nga pagpatuman sa mga aplikasyon nga gisulat sa Rust, Go, Fortran, C ug C ++. Ang proyekto nagpalambo usab sa kaugalingon nga bootloader nga nagtugot kanimo sa paglansad sa Hermit gamit ang QEMU ug KVM.

Source: opennet.ru

Idugang sa usa ka comment