Tso tawm cov lus programming Rust 1.75 thiab unikernel Hermit 0.6.7

Kev tso tawm ntawm Rust 1.75 cov lus qhia dav dav, tsim los ntawm Mozilla qhov project, tab sis tam sim no tsim los ntawm kev txhawb nqa ntawm lub koom haum ywj pheej tsis muaj txiaj ntsig Rust Foundation, tau tshaj tawm. Cov lus qhia txog kev nyab xeeb ntawm kev nco thiab muab txoj hauv kev kom ua tiav txoj haujlwm siab sib luag thaum tsis txhob siv cov khoom siv khib nyiab thiab lub sijhawm ua haujlwm (runtime raug txo qis rau kev pib pib thiab kev saib xyuas ntawm lub tsev qiv ntawv txheem).

Rust lub cim xeeb tuav txoj kev cawm tus tsim tawm los ntawm kev ua yuam kev thaum tswj cov taw qhia thiab tiv thaiv cov teeb meem uas tshwm sim los ntawm kev ua haujlwm qis qis, xws li nkag mus rau thaj chaw nco tom qab nws tau tso tawm, dereferencing null pointers, tsis overruns, thiab lwm yam. Txhawm rau faib cov tsev qiv ntawv, muab kev tsim kho thiab tswj hwm kev vam khom, qhov project tsim tus thawj tswj hwm pob khoom. Lub crates.io repository yog txaus siab rau hosting cov tsev qiv ntawv.

Kev nyab xeeb nco yog muab rau hauv Rust ntawm lub sijhawm sau los ntawm kev siv tshuaj xyuas, ua raws li cov tswv cuab ntawm cov khoom, khaws cov khoom siv lub neej (scopes), thiab ntsuas qhov tseeb ntawm kev nkag mus rau lub cim xeeb thaum lub sijhawm ua tiav cov lej. Rust kuj tseem muab kev tiv thaiv tus lej ntau dhau, yuav tsum muaj qhov sib txawv kom pib ua ntej siv, ua haujlwm yuam kev zoo dua hauv cov tsev qiv ntawv tus qauv, siv lub tswv yim ntawm cov ntaub ntawv tsis hloov pauv thiab hloov pauv los ntawm lub neej ntawd, thiab muaj kev ntaus ntawv zoo li qub kom txo qis qhov yuam kev.

Main innovations:

  • Ntxiv lub peev xwm los siv "async fn" thiab "-> impl Trait" sau nyob rau hauv tus kheej qhov zoo. Piv txwv li, siv "-> impl Trait" koj tuaj yeem sau ib txoj hauv kev zoo uas xa rov qab ib qho iterator: trait Container { fn items(&self) -> impl Iterator; } impl Thawv rau MyContainer { fn khoom(& nws tus kheej) -> impl Iterator { self.items.iter().cloned() } }

    Koj tuaj yeem tsim qhov zoo siv "async fn": zoo HttpService { async fn fetch(& tus kheej, url: Url) -> HtmlBody; // yuav nthuav dav rau: // fn fetch(& nws tus kheej, url: Url) -> impl Yav Tom Ntej ; }

  • Ntxiv API rau kev suav byte offsets txheeb ze rau pointers. Thaum ua haujlwm nrog tus taw qhia liab qab (β€œ* const T” thiab β€œ*mut T”), cov haujlwm yuav tsum tau ntxiv qhov offset rau tus taw tes. Yav dhau los, rau qhov no nws tuaj yeem siv kev tsim kho xws li ":: ntxiv (1)", ntxiv cov lej ntawm bytes sib npaug rau qhov loj ntawm "size_of::()". API tshiab ua kom yooj yim rau txoj haujlwm no thiab ua rau nws muaj peev xwm los tswj cov byte offsets yam tsis tau ua ntej casting hom rau "* const u8" lossis "*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
  • Kev ua haujlwm txuas ntxiv kom ua tau zoo ntawm rustc compiler. Ntxiv cov BOLT optimizer, uas khiav hauv theem tom qab txuas thiab siv cov ntaub ntawv los ntawm kev npaj ua ntej ua tiav. Siv BOLT tso cai rau koj kom ua kom tiav cov compiler los ntawm 2% los ntawm kev hloov cov txheej txheem ntawm librustc_driver.so tsev qiv ntawv code rau kev siv ntau dua ntawm cov processor cache.

    suav nrog tsim lub rustc compiler nrog "-Ccodegen-units = 1" kev xaiv los txhim kho qhov zoo ntawm kev ua kom zoo hauv LLVM. Cov kev ntsuam xyuas ua tau pom tias muaj kev nce qib hauv kev ua tau zoo nyob rau hauv rooj plaub ntawm "-Ccodegen-units = 1" tsim los ntawm kwv yees li 1.5%. Cov kev ua kom zoo ntxiv tau qhib los ntawm lub neej ntawd tsuas yog rau x86_64-tsis paub-linux-gnu platform.

    Cov yav tas los hais optimizations tau sim los ntawm Google kom txo tau lub sij hawm tsim ntawm Android platform Cheebtsam sau nyob rau hauv Rust. Siv "-C codegen-units = 1" thaum tsim Android tso cai rau peb txo qhov loj ntawm cov cuab yeej los ntawm 5.5% thiab nce nws cov kev ua tau zoo los ntawm 1.8%, thaum lub sijhawm tsim cov cuab yeej nws tus kheej yuav luag ob npaug.

    Ua kom muaj kev sib txuas-lub sij hawm khib nyiab ("--gc-sections") coj qhov kev ua tau zoo nce mus txog 1.9%, ua kom qhov txuas-lub sij hawm optimization (LTO) mus txog 7.7%, thiab profile-based optimizations (PGO) mus txog 19.8%. Nyob rau hauv qhov kawg, kev ua kom zoo tau raug siv los ntawm kev siv BOLT, uas ua rau nws muaj peev xwm ua kom muaj peev xwm nce mus txog 24.7%, tab sis qhov loj ntawm cov cuab yeej tau nce 10.9%.

    Tso tawm cov lus programming Rust 1.75 thiab unikernel Hermit 0.6.7

  • Ib feem tshiab ntawm API tau raug hloov mus rau qeb ntawm qhov ruaj khov, suav nrog cov txheej txheem thiab kev siv ntawm cov yam ntxwv tau ruaj khov:
    • Atomic *:: los ntawm_ptr
    • FileTimes
    • FileTimesExt
    • File::set_modified
    • File::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Option::as_slice
    • Option::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
  • Tus cwj pwm "const", uas txiav txim siab qhov muaj peev xwm ntawm kev siv nws nyob rau hauv ib qho ntsiab lus es tsis txhob tas mus li, yog siv rau hauv kev ua haujlwm:
    • Ipv6Addr::to_ipv4_mapped
    • Tej zaumUninit:: assume_init_read
    • Tej zaumUninit::zeroed
    • mem ::discriminant
    • mem ::zero
  • Qhov thib peb theem ntawm kev txhawb nqa tau siv rau csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd thiab mipsel-unknown-netbsd platforms. Qib thib peb suav nrog kev txhawb nqa yooj yim, tab sis tsis muaj kev sim automated, tshaj tawm kev tsim kho, lossis tshawb xyuas seb qhov chaws puas tuaj yeem tsim.

Tsis tas li ntawd, peb tuaj yeem nco txog qhov tshiab ntawm Hermit project, uas tsim cov ntsiav tshwj xeeb (unikernel), sau ua lus Rust, muab cov cuab yeej tsim kho tus kheej cov ntawv thov uas tuaj yeem khiav saum lub hypervisor lossis liab qab kho vajtse yam tsis muaj txheej txheej ntxiv. thiab tsis muaj lub operating system. Thaum tsim, daim ntawv thov raug txuas mus rau lub tsev qiv ntawv, uas nws tus kheej siv tag nrho cov haujlwm tsim nyog, yam tsis tau khi rau OS kernel thiab cov tsev qiv ntawv. Txoj haujlwm code raug faib raws li Apache 2.0 thiab MIT cov ntawv tso cai. Kev sib dhos tau txais kev txhawb nqa rau kev ua tiav ib leeg ntawm cov ntawv sau npe hauv Rust, Go, Fortran, C thiab C ++. Lub phiaj xwm tseem tab tom tsim nws tus kheej bootloader uas tso cai rau koj tso Hermit siv QEMU thiab KVM.

Tau qhov twg los: opennet.ru

Ntxiv ib saib