Kutolewa kwa lugha ya programu Rust 1.75 na unikernel Hermit 0.6.7

Lugha ya programu ya madhumuni ya jumla Rust 1.75, iliyoanzishwa na mradi wa Mozilla lakini sasa imeendelezwa chini ya ufadhili wa shirika huru lisilo la faida la Rust Foundation, imetolewa. Lugha inazingatia usimamizi salama wa kumbukumbu na hutoa njia za kufikia usawa wa juu wa kazi huku ikiepuka matumizi ya mtoaji wa takataka na wakati wa kukimbia (muda wa kukimbia umepunguzwa kuwa uanzishaji wa kimsingi na matengenezo ya maktaba ya kawaida).

Mbinu za utunzaji wa kumbukumbu za kutu huokoa msanidi programu kutokana na hitilafu wakati wa kuendesha viashiria na kulinda dhidi ya matatizo yanayotokea kutokana na utunzaji wa kumbukumbu wa kiwango cha chini, kama vile kufikia eneo la kumbukumbu baada ya kuachiliwa, kuondoa marejeleo ya viashiria visivyofaa, utiririshaji wa bafa, n.k. Ili kusambaza maktaba, kutoa miundo na kudhibiti utegemezi, mradi huunda msimamizi wa kifurushi cha Cargo. Hazina ya crates.io inatumika kwa kupangisha maktaba.

Usalama wa kumbukumbu hutolewa katika Rust wakati wa kukusanya kupitia kukagua marejeleo, kufuatilia umiliki wa kitu, kufuatilia muda wa maisha ya kitu (wigo), na kutathmini usahihi wa ufikiaji wa kumbukumbu wakati wa utekelezaji wa nambari. Kutu pia hutoa ulinzi dhidi ya mafuriko kamili, inahitaji uanzishaji wa lazima wa maadili tofauti kabla ya matumizi, hushughulikia makosa vyema katika maktaba ya kawaida, hutumia dhana ya marejeleo yasiyobadilika na vigeu kwa chaguo-msingi, hutoa uchapaji thabiti wa tuli ili kupunguza makosa ya kimantiki.

Ubunifu kuu:

  • Imeongeza uwezo wa kutumia "async fn" na nukuu ya "->impl Trait" katika sifa za kibinafsi. Kwa mfano, kwa kutumia β€œ->impl Trait” unaweza kuandika mbinu ya sifa ambayo inarudisha kiboreshaji: trait Container { fn items(&self) -> impl Iterator; } impl Container ya MyContainer { fn items(&self) -> impl Iterator {self.items.iter().cloned() } }

    Unaweza pia kuunda sifa kwa kutumia "async fn": sifa HttpService {async fn fetch(&self, url: Url) -> HtmlBody; // itapanuliwa hadi: // fn fetch(&self, url: Url) -> impl Future; }

  • Aliongeza API kwa ajili ya kuhesabu byte kukabiliana na viashiria. Wakati wa kufanya kazi na viashiria wazi ("*const T" na "*mut T"), shughuli zinaweza kuhitajika ili kuongeza kukabiliana na pointer. Hapo awali, kwa hili iliwezekana kutumia ujenzi kama "::add(1)", na kuongeza idadi ya baiti zinazolingana na ukubwa wa "size_of::()". API mpya hurahisisha utendakazi huu na hurahisisha kudhibiti urekebishaji wa baiti bila kwanza kutuma aina kwa "*const u8" au "*mut u8".
    • pointer::byte_ongeza
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_ongeza
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Kazi iliyoendelea ili kuongeza utendaji wa mkusanyaji wa rustc. Imeongeza kiboreshaji cha BOLT, ambacho hutumika katika hatua ya baada ya kiungo na hutumia maelezo kutoka kwa wasifu wa utekelezaji uliotayarishwa awali. Kutumia BOLT hukuruhusu kuharakisha utekelezaji wa mkusanyaji kwa takriban 2% kwa kubadilisha mpangilio wa msimbo wa maktaba librustc_driver.so kwa matumizi bora zaidi ya akiba ya kichakataji.

    Inajumuisha kujenga kikusanyaji cha rustc kwa chaguo la "-Ccodegen-units=1" ili kuboresha ubora wa uboreshaji katika LLVM. Majaribio yaliyofanywa yanaonyesha ongezeko la utendaji katika kesi ya "-Ccodegen-units=1" kujenga kwa takriban 1.5%. Uboreshaji ulioongezwa huwashwa kwa chaguo-msingi tu kwa jukwaa la x86_64-unknown-linux-gnu.

    Uboreshaji uliotajwa hapo awali ulijaribiwa na Google ili kupunguza muda wa uundaji wa vipengele vya jukwaa la Android vilivyoandikwa kwa Rust. Kutumia "-C codegen-units=1" wakati wa kuunda Android kulituruhusu kupunguza ukubwa wa kisanduku cha zana kwa 5.5% na kuongeza utendakazi wake kwa 1.8%, huku muda wa uundaji wa zana yenyewe karibu mara mbili.

    Kuwasha ukusanyaji wa takataka kwa wakati wa kiunganishi (β€œ--gc-sections”) kulileta faida ya utendaji hadi 1.9%, kuwezesha uboreshaji wa muda wa kiungo (LTO) hadi 7.7%, na uboreshaji kulingana na wasifu (PGO) hadi 19.8%. Katika mwisho, uboreshaji ulitumiwa kwa kutumia matumizi ya BOLT, ambayo ilifanya iwezekanavyo kuongeza kasi ya kujenga hadi 24.7%, lakini saizi ya zana iliongezeka kwa 10.9%.

    Kutolewa kwa lugha ya programu Rust 1.75 na unikernel Hermit 0.6.7

  • Sehemu mpya ya API imehamishwa hadi kwa kitengo cha uthabiti, ikijumuisha mbinu na utekelezaji wa sifa zimeimarishwa:
    • Atomiki*::kutoka_ptr
    • FileTimes
    • FileTimesExt
    • Faili::set_modified
    • Faili::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Chaguo::kama_kipande
    • Chaguo::as_mut_slice
    • pointer::byte_ongeza
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_ongeza
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • Sifa ya "const", ambayo huamua uwezekano wa kuitumia katika muktadha wowote badala ya mara kwa mara, hutumiwa katika kazi:
    • Ipv6Addr::to_ipv4_mapped
    • LabdaUninit:: assume_init_read
    • LabdaUninit::ziroed
    • mem::mbaguzi
    • mem::ziroed
  • Kiwango cha tatu cha usaidizi kimetekelezwa kwa majukwaa ya csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd na mipsel-unknown-netbsd. Kiwango cha tatu kinahusisha usaidizi wa kimsingi, lakini bila majaribio ya kiotomatiki, uchapishaji wa miundo rasmi, au kuangalia ikiwa msimbo unaweza kutengenezwa.

Zaidi ya hayo, tunaweza kutambua toleo jipya la mradi wa Hermit, ambao hutengeneza kernel maalum (unikernel), iliyoandikwa kwa lugha ya Rust, kutoa zana za kujenga programu za kujitegemea ambazo zinaweza kukimbia juu ya hypervisor au vifaa vya wazi bila tabaka za ziada. na bila mfumo wa uendeshaji. Inapojengwa, programu inaunganishwa kwa takwimu na maktaba, ambayo hutekeleza kwa kujitegemea utendaji wote muhimu, bila kuunganishwa na kernel ya OS na maktaba ya mfumo. Msimbo wa mradi unasambazwa chini ya leseni za Apache 2.0 na MIT. Mkutano unaweza kutumika kwa ajili ya utekelezaji wa pekee wa maombi yaliyoandikwa katika Rust, Go, Fortran, C na C++. Mradi huo pia unatengeneza kipakiaji chake chenyewe ambacho hukuruhusu kuzindua Hermit kwa kutumia QEMU na KVM.

Chanzo: opennet.ru

Kuongeza maoni