Paglabas ng programming language na Rust 1.75 at unikernel Hermit 0.6.7

Ang pagpapalabas ng Rust 1.75 general-purpose programming language, na itinatag ng proyekto ng Mozilla, ngunit ngayon ay binuo sa ilalim ng auspice ng independiyenteng non-profit na organisasyon na Rust Foundation, ay nai-publish. Nakatuon ang wika sa kaligtasan ng memorya at nagbibigay ng paraan upang makamit ang mataas na parallelism sa trabaho habang iniiwasan ang paggamit ng isang basurero at runtime (runtime ay binabawasan sa pangunahing pagsisimula at pagpapanatili ng karaniwang library).

Ang mga paraan ng pangangasiwa ng memorya ng Rust ay nagliligtas sa developer mula sa mga error kapag nagmamanipula ng mga pointer at nagpoprotekta laban sa mga problemang lumitaw dahil sa mababang antas ng paghawak ng memorya, tulad ng pag-access sa isang lugar ng memorya pagkatapos na ito ay mapalaya, pag-derefer ng mga null pointer, pag-overrun ng buffer, atbp. Upang ipamahagi ang mga aklatan, magbigay ng mga build at pamahalaan ang mga dependency, bubuo ang proyekto ng Cargo package manager. Ang crates.io repository ay suportado para sa pagho-host ng mga aklatan.

Ang kaligtasan ng memorya ay ibinibigay sa Rust sa oras ng pag-compile sa pamamagitan ng pagsuri sa sanggunian, pagsubaybay sa pagmamay-ari ng bagay, pagsubaybay sa mga buhay ng bagay (mga saklaw), at pagtatasa ng kawastuhan ng pag-access sa memorya sa panahon ng pagpapatupad ng code. Nagbibigay din ang kalawang ng proteksyon laban sa mga overflow ng integer, nangangailangan ng mandatoryong pagsisimula ng mga variable na halaga bago gamitin, mas mahusay na pinangangasiwaan ang mga error sa karaniwang library, inilalapat ang konsepto ng hindi nababagong mga sanggunian at mga variable bilang default, nag-aalok ng malakas na static na pag-type upang mabawasan ang mga lohikal na error.

Mga pangunahing inobasyon:

  • Idinagdag ang kakayahang gumamit ng "async fn" at ang notasyong "->impl Trait" sa mga pribadong katangian. Halimbawa, gamit ang β€œ->impl Trait” maaari kang magsulat ng isang trait method na nagbabalik ng iterator: trait Container { fn items(&self) -> impl Iterator; } impl Container para sa MyContainer { fn item(&self) -> impl Iterator { self.items.iter().cloned() } }

    Maaari ka ring lumikha ng mga katangian gamit ang "async fn": trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // ay papalawakin sa: // fn fetch(&self, url: Url) -> impl Future; }

  • Nagdagdag ng API para sa pagkalkula ng mga byte offset na nauugnay sa mga pointer. Kapag nagtatrabaho sa mga walang laman na pointer ("*const T" at "*mut T"), maaaring kailanganin ang mga operasyon upang magdagdag ng offset sa pointer. Dati, para dito posible na gumamit ng isang construction tulad ng "::add(1)", pagdaragdag ng bilang ng mga byte na tumutugma sa laki ng "size_of::()". Pinapasimple ng bagong API ang operasyong ito at ginagawang posible na manipulahin ang mga byte offset nang hindi muna itina-cast ang mga uri 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
  • Patuloy na trabaho upang mapataas ang pagganap ng rustc compiler. Idinagdag ang BOLT optimizer, na tumatakbo sa yugto ng post-link at gumagamit ng impormasyon mula sa isang pre-prepared execution profile. Ang paggamit ng BOLT ay nagbibigay-daan sa iyo na pabilisin ang compiler execution ng humigit-kumulang 2% sa pamamagitan ng pagbabago ng layout ng librustc_driver.so library code para sa mas mahusay na paggamit ng processor cache.

    Kasama ang pagbuo ng rustc compiler gamit ang opsyong "-Ccodegen-units=1" upang mapabuti ang kalidad ng pag-optimize sa LLVM. Ang mga pagsubok na isinagawa ay nagpapakita ng pagtaas sa pagganap sa kaso ng "-Ccodegen-units=1" na build ng humigit-kumulang 1.5%. Ang mga idinagdag na pag-optimize ay pinagana bilang default para lamang sa x86_64-unknown-linux-gnu platform.

    Ang mga naunang nabanggit na pag-optimize ay sinubukan ng Google upang bawasan ang oras ng pagbuo ng mga bahagi ng Android platform na nakasulat sa Rust. Ang paggamit ng "-C codegen-units=1" sa pagbuo ng Android ay nagbigay-daan sa amin na bawasan ang laki ng toolkit ng 5.5% at pataasin ang performance nito ng 1.8%, habang halos dumoble ang oras ng pagbuo ng toolkit mismo.

    Ang pagpapagana ng link-time na pangongolekta ng basura (β€œ--gc-sections”) ay nagdala ng performance gain ng hanggang 1.9%, na nagpapagana ng link-time optimization (LTO) hanggang 7.7%, at profile-based optimizations (PGO) hanggang 19.8% . Sa pangwakas, ang mga pag-optimize ay inilapat gamit ang BOLT utility, na nagbigay-daan sa pagtaas ng bilis ng build sa 24.7%, ngunit ang laki ng toolkit ay tumaas ng 10.9%.

    Paglabas ng programming language na Rust 1.75 at unikernel Hermit 0.6.7

  • Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay na-stabilize:
    • Atomic*::from_ptr
    • FileTimes
    • FileTimesExt
    • File::set_modified
    • File::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Pagpipilian::as_slice
    • Pagpipilian::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 katangiang "const", na tumutukoy sa posibilidad na gamitin ito sa anumang konteksto sa halip na mga constant, ay ginagamit sa mga function:
    • IPv6Addr::to_ipv4_mapped
    • MaybeUninit::assume_init_read
    • MaybeUninit::zeroed
    • mem::discriminant
    • mem::zeroed
  • Ang ikatlong antas ng suporta ay ipinatupad para sa csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd at mipsel-unknown-netbsd platform. Ang ikatlong antas ay nagsasangkot ng pangunahing suporta, ngunit walang automated na pagsubok, pag-publish ng mga opisyal na build, o pagsuri kung ang code ay maaaring buuin.

Bukod pa rito, mapapansin natin ang isang bagong bersyon ng proyektong Hermit, na bumubuo ng isang espesyal na kernel (unikernel), na nakasulat sa wikang Rust, na nagbibigay ng mga tool para sa pagbuo ng mga self-contained na application na maaaring tumakbo sa ibabaw ng isang hypervisor o hubad na hardware nang walang karagdagang mga layer at walang operating system. Kapag binuo, ang application ay static na naka-link sa isang library, na nakapag-iisa na nagpapatupad ng lahat ng kinakailangang pag-andar, nang hindi nakatali sa OS kernel at mga library ng system. Ang code ng proyekto ay ipinamahagi sa ilalim ng mga lisensya ng Apache 2.0 at MIT. Sinusuportahan ang Assembly para sa stand-alone na pagpapatupad ng mga application na nakasulat sa Rust, Go, Fortran, C at C++. Gumagawa din ang proyekto ng sarili nitong bootloader na nagbibigay-daan sa iyong ilunsad ang Hermit gamit ang QEMU at KVM.

Pinagmulan: opennet.ru

Magdagdag ng komento