Itusilẹ ti ede siseto Rust 1.74. RustVMM ayewo. Rewriting Apapo ni ipata

Itusilẹ ti ede siseto gbogboogbo-idi Rust 1.74, 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 tunto awọn sọwedowo lint nipasẹ faili Cargo.toml pẹlu oluṣakoso package ṣafihan. Lati ṣalaye awọn eto lint, gẹgẹbi ipele idahun (idinamọ, sẹ, kilọ, gba laaye), awọn apakan tuntun “[lints]” ati “[workspace.lints]” ti wa ni idamọran, awọn ayipada ninu eyiti a gba sinu akọọlẹ nigbati o ṣe ipinnu nipa atunse. Fun apẹẹrẹ, dipo sisọ awọn asia "-F", "-D", "-W" ati "-A" nigbati o ba n pejọ tabi ṣafikun "#! :" awọn eroja si koodu) :enum_glob_use)]" le ṣee lo ni bayi ninu ifihan Cargo: [lints.rust] unsafe_code = "dawọ" [lints.clippy] enum_glob_use = "deko"
  • Oluṣakoso package Crate ti ṣafikun agbara lati jẹri nigbati o ba sopọ si ibi ipamọ kan. Pinpin ipilẹ pẹlu atilẹyin fun gbigbe awọn igbelewọn ijẹrisi ni awọn ile itaja ijẹrisi Linux (da lori libsecret), macOS (Keychain) ati Windows (Oluṣakoso Ijẹrisi Windows), ṣugbọn eto naa ni akọkọ ṣe apọjuwọn ati gba ọ laaye lati ṣeto iṣẹ pẹlu ọpọlọpọ awọn olupese fun titoju ati ṣiṣẹda awọn ami, fun apẹẹrẹ, ohun itanna kan ti pese sile fun lilo oluṣakoso ọrọ igbaniwọle 1Password. Ijeri le nilo nipasẹ ibi ipamọ fun iṣẹ eyikeyi, kii ṣe lati jẹrisi nikan pe awọn idii ti ṣe atẹjade. ~/.cargo/config.toml [registry] global-credential-providers = ["ẹrù: àmi", "ẹrù: libsecret"]
  • Atilẹyin fun awọn asọtẹlẹ iru ipadabọ (impl_trait_projections) ti ni iduroṣinṣin, gbigba Ara ati T :: Assoc lati mẹnuba ni awọn iru ipadabọ bii “async fn” ati “-> impl Trait”. struct Wrapper<'a, T>(&'a T); // Awọn oriṣi ipadabọ amọ ti o mẹnuba `Ara-ara`: impl Wrapper <'_, ()> { async fn async_fn () -> Ara {/* … */ } fn impl_trait () -> impl Iterator { /* … */ } } Trait Trait<'a> {iru Assoc; fn titun () -> Ara :: Assoc; } impl Trait<'_> fun () {iru Assoc = (); fn new() {} } // Awọn iru ipadabọ ti ko nii ti o mẹnuba iru nkan ti o somọ: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T :: Assoc {/* … */ } fn a_few_assocs() -> impl Iterator { /* … */} }
  • 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:
  • Ẹya “const”, eyiti o pinnu iṣeeṣe ti lilo ni eyikeyi ipo dipo awọn iduro, ni a lo ninu awọn iṣẹ:
    • mojuto :: mem :: transmute_daakọ
    • str :: jẹ_ascii
    • [u8] :: jẹ_ascii
    • mojuto :: nom :: saturating
    • impl Lati fun std :: ilana :: Studio
    • impl Lati fun std :: ilana :: Studio
    • impl Lati fun std :: ilana :: Ọmọ {Stdin, Stdout, Stderr}
    • impl Lati fun std :: ilana :: Ọmọ {Stdin, Stdout, Stderr}
    • std :: ffi :: OsString :: from_encoded_bytes_unchecked
    • std :: ffi :: OsString :: sinu_encoded_bytes
    • std :: ffi :: OsStr :: from_encoded_bytes_unchecked
    • std :: ffi :: OsStr :: bi_encoded_bytes
    • std :: io :: aṣiṣe :: miiran
    • impl GbiyanjuLati fun u16
    • impl Lati<&[T; N]>fun Vec
    • impl Lati<& mut [T; N]>fun Vec
    • impl Lati<[T; N]> fun Arc<[T]>
    • impl Lati<[T; N]> fun Rc<[T]>
  • Olupilẹṣẹ, ohun elo irinṣẹ, ile-ikawe boṣewa, ati awọn imuṣiṣẹ ohun elo ti ipilẹṣẹ ni awọn ibeere ti o pọ si fun awọn iru ẹrọ Apple, ni bayi nilo o kere ju macOS 10.12 Sierra, iOS 10, ati 10 tvOS ti a tu silẹ ni ọdun 2016 lati ṣiṣẹ.
  • Ipele kẹta ti atilẹyin ti ṣe imuse fun i686-pc-windows-gnullvm Syeed. Ipele kẹta jẹ atilẹyin ipilẹ, ṣugbọn laisi idanwo adaṣe, titẹjade ti awọn ile-iṣẹ osise, ati ijẹrisi ti iṣelọpọ koodu.
  • Ipele keji ti atilẹyin fun loongarch64-unknown-ko si iru ẹrọ ibi-afẹde ti a ti ṣe imuse. Ipele keji ti atilẹyin jẹ iṣeduro apejọ kan.

Ni afikun, awọn iṣẹlẹ meji ti o jọmọ ede Rust ni a le ṣe akiyesi:

  • OSTIF (Open Source Technology Improvement Fund), ti a ṣẹda lati teramo aabo ti awọn iṣẹ orisun orisun, ti ṣe atẹjade awọn abajade ti iṣayẹwo ti iṣẹ akanṣe RustVMM, eyiti o pese awọn paati fun ṣiṣẹda awọn hypervisors pato-ṣiṣe ati awọn diigi ẹrọ foju (VMMs). Awọn ile-iṣẹ bii Intel, Alibaba, Amazon, Google, Linaro ati Red Hat n kopa ninu idagbasoke iṣẹ akanṣe naa. Intel Cloud Hypervisor ati Dragonball hypervisors ti wa ni idagbasoke ti o da lori RustVMM. Ayẹwo naa jẹrisi didara giga ti ipilẹ koodu ati lilo awọn ilana ni faaji ati imuse ti o ni ero lati ṣaṣeyọri aabo ti o pọju. Lakoko iṣayẹwo, awọn iṣoro 6 ti ṣe idanimọ ti ko ni ipa taara lori ailewu.
  • Google ṣafihan imuse tuntun ti ẹrọ ibaraẹnisọrọ interprocess Binder, ti a tun kọ ni ede Rust, si atokọ ifiweranṣẹ olupilẹṣẹ kernel Linux. Atunse naa ni a ṣe gẹgẹ bi apakan ti iṣẹ akanṣe kan lati teramo aabo, igbelaruge awọn ilana siseto to ni aabo ati mu iṣẹ ṣiṣe ti idamo awọn iṣoro nigba ṣiṣẹ pẹlu iranti ni Android (nipa 70% ti gbogbo awọn ailagbara ti o lewu ti a mọ ni Android ni o fa nipasẹ awọn aṣiṣe nigba ṣiṣẹ pẹlu iranti. ). Imuse ti Binder ni Rust ti ṣaṣeyọri ni ibamu ni iṣẹ ṣiṣe pẹlu ẹya atilẹba ni ede C, kọja gbogbo awọn idanwo AOSP (Android Open-Source Project) ati pe o le ṣee lo lati ṣẹda awọn atẹjade ṣiṣẹ ti famuwia. Išẹ ti awọn imuse mejeeji jẹ isunmọ ni ipele kanna (awọn iyatọ laarin -1.96% ati + 1.38%).

orisun: opennet.ru

Fi ọrọìwòye kun