Hoʻokuʻu ʻia ka ʻōlelo papahana Rust 1.75 a me ka unikernel Hermit 0.6.7

Ua paʻi ʻia ka hoʻokuʻu ʻia ʻana o ka ʻōlelo hoʻolālā kumu nui ʻo Rust 1.75, i hoʻokumu ʻia e ka papahana Mozilla, akā i kēia manawa ua hoʻomohala ʻia ma lalo o ka mana o ka hui kūʻokoʻa waiwai ʻole ʻo Rust Foundation. Hoʻopili ʻia ka ʻōlelo i ka palekana hoʻomanaʻo a hāʻawi i nā ala e hoʻokō ai i ka parallelism kiʻekiʻe i ka hoʻokō ʻana i ka hana, ʻoiai e pale ana i ka hoʻohana ʻana i ka ʻōpala a me ka manawa holo (ua hoʻemi ʻia ka manawa holo i ka hoʻomaka kumu a me ka mālama ʻana i ka waihona maʻamau).

Hoʻokuʻu ʻia nā ʻenehana hoʻomanaʻo hoʻomanaʻo a Rust i ka mea hoʻomohala mai nā hewa manipulation pointer a pale i nā pilikia e kū mai ana mai ka hoʻohana ʻana i ka hoʻomanaʻo haʻahaʻa haʻahaʻa, e like me ke komo ʻana ma hope o ka loaʻa ʻole ʻana, nā kuhi kuhikuhi null, overruns buffer, a me nā mea like. No ka hāʻawi ʻana i nā hale waihona puke, e hōʻoia i ka hui ʻana a me ka mālama ʻana i nā hilinaʻi, ke kūkulu nei ka papahana i ka luna pūʻolo Cargo. Kākoʻo ʻia ka waihona crates.io no ka mālama ʻana i nā hale waihona puke.

Hoʻoikaika ʻia ka palekana hoʻomanaʻo ma Rust i ka manawa hōʻuluʻulu ma o ka nānā ʻana, ka nānā ʻana i ka mea nona ka mea, ka noʻonoʻo ʻana i ke ola o ka mea (scoping), a me ka loiloi hoʻomanaʻo i ka wā holo. Hāʻawi pū ʻo Rust i ka pale ʻana i ka integer overflows, pono e hoʻomaka mua ʻia nā waiwai hoʻololi ma mua o ka hoʻohana ʻana, ʻoi aku ka maikaʻi o ka lawelawe hewa ʻana i ka waihona maʻamau, hoʻohana i ka manaʻo o nā kuhikuhi immutable a me nā loli ma ke ʻano maʻamau, a hāʻawi i ka paʻi static ikaika e hōʻemi i nā hewa loiloi.

Nā hana hou nui:

  • Hoʻohui i ka hiki ke hoʻohana i ka "async fn" a me ka "-> impl Trait" notation i nā ʻano pilikino. No ka laʻana, me ka hoʻohana ʻana i "-> impl Trait" hiki iā ʻoe ke kākau i kahi ʻano hana e hoʻihoʻi i kahi mea hoʻihoʻi: trait Container { fn items (&self) -> impl Iterator; }.

    Hiki iā ʻoe ke hana i nā ʻano me ka "async fn": trait HttpService {async fn fetch(&self, url: Url) -> HtmlBody; // e hoʻonui ʻia i: // fn fetch(&self, url: Url) -> impl Future; }

  • Hoʻohui ʻia ka API no ka helu ʻana i nā offset byte e pili ana i nā kuhikuhi. I ka hana ʻana me nā kuhikuhi kikoʻī ("*const T" a me "*mut T"), pono paha nā hana e hoʻohui i kahi offset i ka pointer. Ma mua, no kēia mea hiki ke hoʻohana i kahi hana e like me "::add (1)", e hoʻohui i ka helu o nā bytes e pili ana i ka nui o "size_of:: ()". Hoʻomaʻamaʻa ka API hou i kēia hana a hiki ke hoʻololi i nā offset byte me ka hoʻolei mua ʻana i nā ʻano i "* const u8" a i ʻole "*mut u8".
    • kuhikuhi::byte_add
    • kuhikuhi::byte_offset
    • kuhikuhi::byte_offset_from
    • kuhikuhi::byte_sub
    • kuhikuhi::wrapping_byte_add
    • kuhikuhi::wrapping_byte_offset
    • kuhikuhi::wrapping_byte_sub
  • Hoʻomau ka hana e hoʻonui i ka hana o ka rustc compiler. Hoʻohui ʻia ka BOLT optimizer, e holo ana ma ke kahua post-link a hoʻohana i ka ʻike mai kahi ʻaoʻao hoʻokō i hoʻomākaukau mua ʻia. Me ka hoʻohana ʻana iā BOLT e hiki iā ʻoe ke wikiwiki i ka hoʻokō compiler ma kahi o 2% ma o ka hoʻololi ʻana i ka hoʻolālā o ka code library librustc_driver.so no ka hoʻohana pono ʻana i ka cache processor.

    Hoʻohui ʻia ke kūkulu ʻana i ka mea hoʻopili rustc me ke koho "-Ccodegen-units=1" e hoʻomaikaʻi i ka maikaʻi o ka optimization ma LLVM. Hōʻike nā hoʻokolohua i hoʻonui ʻia i ka hana ma ka hihia o ka "-Ccodegen-units=1" i kūkulu ʻia ma kahi o 1.5%. Hiki ke hoʻohui ʻia nā optimizations ma ka paʻamau no ka x86_64-unknown-linux-gnu platform.

    Ua hoʻāʻo ʻia nā optimizations i ʻōlelo mua ʻia e Google e hōʻemi i ka manawa kūkulu o nā ʻāpana platform Android i kākau ʻia ma Rust. Ke hoʻohana nei i ka "-C codegen-units = 1" i ke kūkulu ʻana i ka Android e ʻae iā mākou e hōʻemi i ka nui o ka hāmeʻa e 5.5% a hoʻonui i kāna hana ma 1.8%, ʻoiai ʻo ka manawa hana o ka hāmeʻa ponoʻī ʻaneʻane pālua.

    ʻO ka ʻae ʻana i ka hōʻiliʻili ʻōpala manawa-link (“--gc-sections”) i loaʻa ka loaʻa o ka hana a hiki i 1.9%, hiki i ka link-time optimization (LTO) a hiki i 7.7%, a me ka profile-based optimizations (PGO) a hiki i 19.8% . I ka hopena, ua hoʻohana ʻia nā optimizations me ka hoʻohana ʻana i ka pono BOLT, i hiki ai ke hoʻonui i ka wikiwiki o ke kūkulu ʻana i 24.7%, akā ua hoʻonui ʻia ka nui o ka hāmeʻa e 10.9%.

    Hoʻokuʻu ʻia ka ʻōlelo papahana Rust 1.75 a me ka unikernel Hermit 0.6.7

  • Ua hoʻoili ʻia kahi ʻāpana hou o ka API i ka ʻāpana paʻa, me nā ʻano a me nā hoʻokō o nā ʻano:
    • Atomic*::mai_ptr
    • FileTimes
    • FileTimesExt
    • Kōnae::set_modified
    • Kōnae::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Koho:: as_slice
    • Koho::as_mut_slice
    • kuhikuhi::byte_add
    • kuhikuhi::byte_offset
    • kuhikuhi::byte_offset_from
    • kuhikuhi::byte_sub
    • kuhikuhi::wrapping_byte_add
    • kuhikuhi::wrapping_byte_offset
    • kuhikuhi::wrapping_byte_sub
  • Hoʻohana ʻia ka ʻano "const", ka mea e hoʻoholo ai i ka hiki ke hoʻohana ʻia i kēlā me kēia pōʻaiapili ma kahi o nā mea mau, hoʻohana ʻia i nā hana:
    • Ipv6Addr::to_ipv4_mapped
    • Malia pahaUninit:: assume_init_read
    • Malia pahaUninit::zeroed
    • mem:: hoʻokaʻawale
    • mem::ʻole
  • Ua hoʻokō ʻia ke kolu o ke kākoʻo no nā kahua csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd a me mipsel-unknown-netbsd. ʻO ke kolu o ka pae e pili ana i ke kākoʻo maʻamau, akā me ka ʻole o ka hoʻāʻo ʻana, ka hoʻopuka ʻana i nā hale mana, a i ʻole ka nānā ʻana inā hiki ke kūkulu ʻia ke code.

Eia hou, hiki iā mākou ke hoʻomaopopo i kahi mana hou o ka papahana Hermit, e hoʻomohala ana i kahi kernel kūikawā (unikernel), i kākau ʻia ma ka ʻōlelo Rust, e hāʻawi ana i nā mea hana no ke kūkulu ʻana i nā noi ponoʻī hiki ke holo ma luna o kahi hypervisor a i ʻole nā ​​​​mea hana ʻole me ka ʻole o nā papa. a me ka ʻole o ka ʻōnaehana hana. Ke kūkulu ʻia, pili ʻia ka palapala noi i kahi waihona, kahi e hoʻokō kūʻokoʻa i nā hana pono āpau, me ka ʻole o ka nakinaki ʻana i ka kernel OS a me nā hale waihona puke. Hāʻawi ʻia ke code papahana ma lalo o nā laikini Apache 2.0 a me MIT. Kākoʻo ʻia ʻo Assembly no ka hoʻokō kū hoʻokahi o nā noi i kākau ʻia ma Rust, Go, Fortran, C a me C++. Ke hoʻomohala nei ka papahana i kāna bootloader ponoʻī e hiki ai iā ʻoe ke hoʻomaka iā Hermit me ka hoʻohana ʻana i QEMU a me KVM.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka