Kutolewa kwa lugha ya programu ya Rust 1.74. Ukaguzi wa RustVMM. Kuandika upya Kifunga katika kutu

Lugha ya programu ya madhumuni ya jumla Rust 1.74, 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 kusanidi ukaguzi wa lint kupitia faili ya Cargo.toml na faili ya maelezo ya kidhibiti kifurushi. Ili kufafanua mipangilio ya mstari, kama vile kiwango cha jibu (kataza, kataa, onya, ruhusu), sehemu mpya "[lints]" na "[workspace.lints]" zinapendekezwa, mabadiliko ambayo huzingatiwa wakati wa kufanya uamuzi kuhusu kujenga upya. Kwa mfano, badala ya kubainisha bendera za β€œ-F”, β€œ-D”, β€œ-W” na β€œ-A” wakati wa kuunganisha au kuongeza β€œ#![kataza(msimbo_usiosalama)]” na β€œ#![kataa(clippy). :” sifa za msimbo) :enum_glob_use)]" sasa inaweza kutumika katika faili ya maelezo ya Mizigo: [lints.rust] unsafe_code = "kataza" [lints.clippy] enum_glob_use = "kataa"
  • Kidhibiti kifurushi cha Crate ameongeza uwezo wa kuthibitisha wakati wa kuunganisha kwenye hazina. Usambazaji wa kimsingi ni pamoja na usaidizi wa kuweka vigezo vya uthibitishaji katika duka za sifa za Linux (kulingana na libsecret), macOS (Keychain) na Windows (Kidhibiti cha Kitambulisho cha Windows), lakini mfumo huo hapo awali ulifanywa kuwa wa kawaida na hukuruhusu kupanga kazi na watoa huduma anuwai kwa kuhifadhi na. kutengeneza tokeni, kwa mfano, programu-jalizi imetayarishwa kwa kutumia kidhibiti cha nenosiri cha 1Password. Uthibitishaji unaweza kuhitajika na hazina kwa operesheni yoyote, sio tu kudhibitisha kuwa vifurushi vimechapishwa. ~/.cargo/config.toml [registry] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Usaidizi wa makadirio ya aina ya kurejesha (impl_trait_projections) umeimarishwa, na kuruhusu Self na T::Assoc kutajwa katika aina za kurejesha kama vile "async fn" na "->impl Trait". struct Wrapper<'a, T>(&'a T); // Aina zisizo wazi za kurejesha zinazotaja `Self`: impl Wrapper<'_, ()> {async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } sifa Sifa<'a> {aina Assoc; fn new() -> Self::Assoc; } impl Sifa<'_> kwa () {aina Assoc = (); fn new() {} } // Aina za kurejesha opaque ambazo zinataja aina inayohusishwa: impl<'a, T: Sifa<'a>> Wrapper<'a, T> {async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • Sehemu mpya ya API imehamishwa hadi kwa kitengo cha uthabiti, ikijumuisha mbinu na utekelezaji wa sifa zimeimarishwa:
  • Sifa ya "const", ambayo huamua uwezekano wa kuitumia katika muktadha wowote badala ya mara kwa mara, hutumiwa katika kazi:
    • msingi::mem::transmute_copy
    • str::ni_ascii
    • [u8]::ni_ascii
    • msingi::namba::Kueneza
    • impl Kutoka kwa std::process::Stdio
    • impl Kutoka kwa std::process::Stdio
    • impl Kutoka kwa std::process::Child{Stdin, Stdout, Stderr}
    • impl Kutoka kwa std::process::Child{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_haijachaguliwa
    • std::ffi::OsString::katika_baiti_zilizosimbwa
    • std::ffi::OsStr::from_encoded_bytes_haijachaguliwa
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::Kosa::nyingine
    • impl TryFrom kwa u16
    • impl Kutoka <&[T; N]>kwa Vec
    • impl Kutoka<&mut [T; N]>kwa Vec
    • impl Kutoka<[T; N]> kwa Arc<[T]>
    • impl Kutoka<[T; N]> kwa Rc<[T]>
  • Kikusanyaji, kisanduku cha zana, maktaba ya kawaida, na utekelezaji wa programu zinazozalishwa zimeongeza mahitaji ya majukwaa ya Apple, ambayo sasa yanahitaji angalau macOS 10.12 Sierra, iOS 10, na tvOS 10 iliyotolewa mwaka wa 2016 ili kuendeshwa.
  • Kiwango cha tatu cha usaidizi kimetekelezwa kwa jukwaa la i686-pc-windows-gnullvm. Kiwango cha tatu kinahusisha usaidizi wa kimsingi, lakini bila majaribio ya kiotomatiki, uchapishaji wa miundo rasmi, au kuangalia ikiwa msimbo unaweza kutengenezwa.
  • Kiwango cha pili cha usaidizi kwa jukwaa lengwa la loongarch64-haijulikani-hakuna limetekelezwa. Ngazi ya pili ya usaidizi inahusisha dhamana ya mkutano.

Zaidi ya hayo, matukio mawili yanayohusiana na lugha ya Kutu yanaweza kuzingatiwa:

  • OSTIF (Mfuko wa Uboreshaji wa Teknolojia ya Chanzo Huria), iliyoundwa ili kuimarisha usalama wa miradi ya chanzo huria, imechapisha matokeo ya ukaguzi wa mradi wa RustVMM, ambao hutoa vipengele vya kuunda hypervisors maalum za kazi na wachunguzi wa mashine virtual (VMMs). Makampuni kama vile Intel, Alibaba, Amazon, Google, Linaro na Red Hat yanashiriki katika maendeleo ya mradi huo. Intel Cloud Hypervisor na viboreshaji vya Dragonball vinatengenezwa kulingana na RustVMM. Ukaguzi ulithibitisha ubora wa juu wa msingi wa kanuni na matumizi ya mbinu katika usanifu na utekelezaji unaolenga kufikia usalama wa juu. Wakati wa ukaguzi, matatizo 6 yalitambuliwa ambayo hayakuwa na athari za moja kwa moja kwa usalama.
  • Google ilianzisha utekelezaji mpya wa utaratibu wa mawasiliano wa mwingiliano wa Binder, ulioandikwa upya katika lugha ya Rust, kwa orodha ya utumaji barua ya wasanidi wa Linux kernel. Urekebishaji ulifanyika kama sehemu ya mradi wa kuimarisha usalama, kukuza mbinu salama za programu na kuongeza ufanisi wa kutambua matatizo wakati wa kufanya kazi na kumbukumbu kwenye Android (takriban 70% ya udhaifu wote hatari unaotambuliwa kwenye Android husababishwa na makosa wakati wa kufanya kazi na kumbukumbu. ) Utekelezaji wa Binder in Rust umepata usawa katika utendakazi na toleo asilia katika lugha ya C, hupita majaribio yote ya AOSP (Android Open-Source Project) na inaweza kutumika kutengeneza matoleo ya kufanya kazi ya programu dhibiti. Utendaji wa utekelezaji wote ni takriban katika kiwango sawa (mkengeuko ndani ya -1.96% na +1.38%).

Chanzo: opennet.ru

Kuongeza maoni