Itusilẹ ti ede siseto Rust 1.75 ati unikernel Hermit 0.6.7

Itusilẹ ti ede siseto gbogboogbo-idi Rust 1.75, ti o da nipasẹ iṣẹ akanṣe Mozilla, ṣugbọn ni bayi ni idagbasoke labẹ awọn atilẹyin ti ominira ti kii ṣe èrè agbari Rust Foundation, ti ṣe atẹjade. Ede naa dojukọ aabo iranti ati pese awọn ọna lati ṣaṣeyọri isọdọkan iṣẹ giga lakoko ti o yago fun lilo ikojọpọ idoti ati akoko asiko (akoko asiko ti dinku si ipilẹṣẹ ipilẹ ati itọju ile-ikawe boṣewa).

Awọn ọna mimu iranti Rust ṣe igbala awọn olupilẹṣẹ lati awọn aṣiṣe nigbati o ba ni ifọwọyi awọn itọka ati daabobo lodi si awọn iṣoro ti o dide nitori mimu iranti ipele kekere, gẹgẹbi iraye si agbegbe iranti lẹhin ti o ti ni ominira, piparẹ awọn itọka asan, awọn ifasilẹ ifipamọ, ati bẹbẹ lọ. Lati kaakiri awọn ile-ikawe, pese awọn kikọ ati ṣakoso awọn igbẹkẹle, iṣẹ akanṣe n ṣe idagbasoke oluṣakoso package Ẹru. Ibi ipamọ crates.io jẹ atilẹyin fun awọn ile-ikawe alejo gbigba.

Ailewu iranti ti pese ni ipata ni akoko iṣakojọ nipasẹ ṣiṣe ayẹwo itọkasi, ṣiṣe itọju ohun-ini ohun, titọju awọn igbesi aye ohun (awọn iwọn), ati iṣiro deede wiwọle iranti lakoko ṣiṣe koodu. Ipata tun pese aabo lodi si ṣiṣan odidi odidi, nilo ipilẹṣẹ dandan ti awọn iye oniyipada ṣaaju lilo, mu awọn aṣiṣe dara julọ ni ile-ikawe boṣewa, lo imọran ti awọn itọkasi ailagbara ati awọn oniyipada nipasẹ aiyipada, nfunni titẹ aimi to lagbara lati dinku awọn aṣiṣe ọgbọn.

Awọn imotuntun akọkọ:

  • Ṣe afikun agbara lati lo “async fn” ati ami “-> impl Trait” ni awọn ami ikọkọ. Fun apẹẹrẹ, lilo “-> impl Trait” o le kọ ọna abuda kan ti o da aṣetunṣe pada: trait Container {fn items(&self) -> impl Iterator; } impl Apoti fun MyContainer {fn awọn ohun(&self) -> impl Iterator {self.items.iter().cloned()}}

    O tun le ṣẹda awọn abuda nipa lilo "async fn": iwa HttpService {async fn fetch(&self, url: Url) -> HtmlBody; // yoo faagun si: // fn fetch (&self, url: Url) -> impl Future; }

  • API ti a ṣafikun fun ṣiṣe iṣiro awọn aiṣedeede baiti ni ibatan si awọn itọka. Nigbati o ba n ṣiṣẹ pẹlu awọn itọka igboro (“* const T” ati “* mut T”), awọn iṣẹ le nilo lati ṣafikun aiṣedeede si ijuboluwole. Ni iṣaaju, fun eyi o ṣee ṣe lati lo ikole bi “:: fikun (1)”, fifi nọmba awọn baiti ti o baamu si iwọn “size_of:: ()”. API tuntun jẹ ki iṣẹ ṣiṣe di irọrun ati mu ki o ṣee ṣe lati ṣe afọwọyi awọn aiṣedeede baiti lai kọkọ sọ iru awọn iru si “* const u8” tabi “* mut u8”.
    • ijuboluwole :: baiti_add
    • ijuboluwole :: baiti_offset
    • ijuboluwole :: baiti_offset_lati
    • ijuboluwole :: baiti_sub
    • ijuboluwole :: wrapping_byte_add
    • ijuboluwole :: wrapping_byte_offset
    • ijuboluwole :: wrapping_byte_sub
  • Iṣẹ ti o tẹsiwaju lati mu iṣẹ ti olupilẹṣẹ rustc pọ si. Ṣe afikun BOLT optimizer, eyiti o ṣiṣẹ ni ipele-ọna asopọ ifiweranṣẹ ati lilo alaye lati profaili ipaniyan ti a ti pese tẹlẹ. Lilo BOLT gba ọ laaye lati yara ipaniyan alakojo nipa iwọn 2% nipa yiyipada ifilelẹ ti koodu ikawe librusc_driver.so fun lilo daradara siwaju sii ti kaṣe ero isise.

    To wa kikọ rustc alakojo pẹlu aṣayan "-Ccodegen-units=1" lati mu didara iṣapeye dara si ni LLVM. Awọn idanwo ti a ṣe ṣe afihan ilosoke iṣẹ ṣiṣe ni ọran ti “-Ccodegen-units=1” kọ nipa isunmọ 1.5%. Awọn iṣapeye ti a ṣafikun jẹ ṣiṣẹ nipasẹ aiyipada nikan fun pẹpẹ x86_64-unknown-linux-gnu.

    Awọn iṣapeye ti a mẹnuba tẹlẹ ni idanwo nipasẹ Google lati dinku akoko kikọ ti awọn paati iru ẹrọ Android ti a kọ sinu Rust. Lilo "-C codegen-units=1" nigba kikọ Android gba wa laaye lati dinku iwọn ohun elo irinṣẹ nipasẹ 5.5% ati mu iṣẹ rẹ pọ si nipasẹ 1.8%, lakoko ti akoko kikọ ohun elo irinṣẹ funrararẹ ti fẹrẹ ilọpo meji.

    Ṣiṣe ikojọpọ idoti akoko-ọna asopọ (“--gc-sections”) mu ere iṣẹ pọ si 1.9%, ṣiṣe iṣapeye akoko-ọna asopọ (LTO) titi di 7.7%, ati awọn iṣapeye-orisun profaili (PGO) titi di 19.8%. Ni ipari, a lo awọn iṣapeye nipa lilo ohun elo BOLT, eyiti o jẹ ki o ṣee ṣe lati mu iyara kikọ pọ si 24.7%, ṣugbọn iwọn ohun elo ohun elo pọ nipasẹ 10.9%.

    Itusilẹ ti ede siseto Rust 1.75 ati unikernel Hermit 0.6.7

  • Apa tuntun ti API ni a ti gbe si ẹka ti iduroṣinṣin, pẹlu awọn ọna ati awọn imuse ti awọn abuda ti jẹ imuduro:
    • Atomic*:: lati_ptr
    • FileTimes
    • FileTimesExt
    • Faili :: set_modified
    • Faili :: set_times
    • IPAddr :: to_canonical
    • Ipv6Addr :: to_canonical
    • Aṣayan :: bi_bibẹ
    • Aṣayan :: as_mut_slice
    • ijuboluwole :: baiti_add
    • ijuboluwole :: baiti_offset
    • ijuboluwole :: baiti_offset_lati
    • ijuboluwole :: baiti_sub
    • ijuboluwole :: wrapping_byte_add
    • ijuboluwole :: wrapping_byte_offset
    • ijuboluwole :: wrapping_byte_sub
  • Ẹya “const”, eyiti o pinnu iṣeeṣe ti lilo ni eyikeyi ipo dipo awọn iduro, ni a lo ninu awọn iṣẹ:
    • Ipv6Addr :: to_ipv4_mapped
    • Boya Uninit :: ro_nit_read
    • Boya Uninit :: odo
    • mem :: iyasoto
    • mem :: odo
  • Ipele atilẹyin kẹta ti ni imuse fun csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd ati awọn iru ẹrọ mipsel-unknown-netbsd. Ipele kẹta jẹ atilẹyin ipilẹ, ṣugbọn laisi idanwo adaṣe, titẹjade awọn ile-iṣẹ osise, tabi ṣayẹwo boya koodu naa le kọ.

Ni afikun, a le ṣe akiyesi ẹya tuntun ti iṣẹ akanṣe Hermit, eyiti o ndagba ekuro pataki kan (unikernel), ti a kọ sinu ede Rust, pese awọn irinṣẹ fun kikọ awọn ohun elo ti o wa ninu ara ti o le ṣiṣẹ lori oke hypervisor tabi ohun elo igboro laisi awọn ipele afikun. ati laisi ẹrọ ṣiṣe. Nigbati o ba kọ, ohun elo naa ni asopọ ni iṣiro si ile-ikawe kan, eyiti o ṣe imuse gbogbo iṣẹ ṣiṣe pataki, laisi asopọ si ekuro OS ati awọn ile-ikawe eto. Koodu ise agbese ti pin labẹ Apache 2.0 ati awọn iwe-aṣẹ MIT. Apejọ jẹ atilẹyin fun ipaniyan imurasilẹ-nikan ti awọn ohun elo ti a kọ sinu Rust, Go, Fortran, C ati C ++. Ise agbese na tun n ṣe agbekalẹ bootloader tirẹ ti o fun ọ laaye lati ṣe ifilọlẹ Hermit nipa lilo QEMU ati KVM.

orisun: opennet.ru

Fi ọrọìwòye kun