Ngaleupaskeun basa programming Rust 1.74. audit RustVMM. Rewriting Binder di Rust

Pelepasan bahasa pemrograman tujuan umum Rust 1.74, diadegkeun ku proyék Mozilla, tapi ayeuna dikembangkeun dina naungan organisasi nirlaba bebas Rust Foundation, parantos diterbitkeun. basa museurkeun kana kaamanan memori jeung nyadiakeun sarana pikeun ngahontal paralelisme pakasaban tinggi bari Ngahindarkeun pamakéan a collector sampah na runtime (runtime diréduksi jadi initialization dasar tur pamaliharaan perpustakaan baku).

Métode penanganan memori Rust nyalametkeun pamekar tina kasalahan nalika ngamanipulasi pointer sareng ngajagi tina masalah anu timbul kusabab panangan mémori tingkat rendah, sapertos aksés ka daérah mémori saatos dibébaskeun, dereferencing pointer null, overruns panyangga, jsb. Pikeun ngadistribusikaeun perpustakaan, nyadiakeun ngawangun jeung ngatur kagumantungan, proyék ngamekarkeun manajer pakét Cargo. Repositori crates.io dirojong pikeun perpustakaan hosting.

Kasalametan memori disayogikeun dina Rust dina waktos kompilasi ngaliwatan pamariksaan rujukan, ngalacak kapamilikan obyék, ngalacak umur obyék (skop), sareng ngira-ngira kabeneran aksés mémori nalika palaksanaan kode. Karat ogé nyadiakeun panyalindungan ngalawan overflows integer, merlukeun initialization wajib nilai variabel saméméh pamakéan, handles kasalahan hadé dina perpustakaan baku, nerapkeun konsép rujukan immutable sarta variabel sacara standar, nawarkeun ketak statik kuat pikeun ngaleutikan kasalahan logis.

Inovasi utama:

  • Ditambahkeun kamampuhan pikeun ngonpigurasikeun cék lint via file Cargo.toml kalawan manifest manajer pakét. Pikeun nangtukeun setelan lint, kayaning tingkat respon (ngalarang, mungkir, ngingetkeun, ngidinan), bagian anyar "[lints]" jeung "[workspace.lints]" diusulkeun, parobahan nu dicokot kana akun nalika nyieun kaputusan ngeunaan. ngawangun deui. Contona, tinimbang nangtukeun "-F", "-D", "-W" jeung "-A" umbul nalika assembling atawa nambahkeun "#! [dilarang (unsafe_code)]" jeung "#! [mungkir (clippy). :” atribut kana kode nu): enum_glob_use)]" ayeuna bisa dipaké dina Kargo manifest: [lints.rust] unsafe_code = "ngalarang" [lints.clippy] enum_glob_use = "mungkir"
  • Pangatur pakét Crate parantos nambihan kamampuan pikeun ngabuktoskeun kaaslianana nalika nyambungkeun kana gudang. Distribusi dasar kalebet dukungan pikeun nempatkeun parameter auténtikasi di toko credential Linux (dumasar kana libsecret), macOS (Keychain) sareng Windows (Windows Credential Manager), tapi sistemna mimitina didamel modular sareng ngamungkinkeun anjeun ngatur padamelan sareng sababaraha panyadia pikeun nyimpen sareng ngahasilkeun tokens, contona, plugin a geus disiapkeun pikeun ngagunakeun manajer sandi 1Password. Auténtikasi tiasa diperyogikeun ku gudang pikeun operasi naon waé, sanés ngan ukur pikeun mastikeun yén bungkusan parantos diterbitkeun. ~/.cargo/config.toml [registry] global-credential-providers = ["kargo: token", "cargo:libsecret"]
  • Rojongan pikeun proyéksi tipe balik (impl_trait_projections) geus stabilized, sahingga Self jeung T:: Assoc bisa disebutkeun dina tipe balik kayaning "async fn" jeung "-> impl Tret". struct Wrapper<'a, T>(&'a T); // Jenis balik opaque anu nyebut `Self`: impl Wrapper<'_, ()> {async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } Tret Tret<'a> {tipe Assoc; fn anyar () -> Diri:: Assoc; } impl Tret<'_> for () {type Assoc = (); fn new () {} } // Tipe balik opaque nu nyebut tipe pakait: impl<'a, T: Trait<'a>> Wrapper<'a, T> {async fn mk_assoc() -> T:: Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • Bagian anyar tina API geus dipindahkeun ka kategori stabil, kaasup métode jeung palaksanaan Tret geus stabilized:
  • Atribut "const", anu nangtukeun kamungkinan ngagunakeunana dina konteks naon waé tinimbang konstanta, dianggo dina fungsi:
    • inti::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • inti ::num::Saturating
    • impl Ti pikeun std :: prosés :: Stdio
    • impl Ti pikeun std :: prosés :: Stdio
    • impl Ti pikeun std::prosés::Anak{Stdin, Stdout, Stderr}
    • impl Ti pikeun std::prosés::Anak{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_unchecked
    • std::ffi::OsString::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::Kasalahan::lain
    • impl TryFrom keur u16
    • impl Ti<&[T; N]> pikeun Vec
    • impl Ti<&mut [T; N]> pikeun Vec
    • impl Ti<[T; N]> pikeun Arc<[T]>
    • impl Ti<[T; N]> pikeun Rc<[T]>
  • Kompiler, toolkit, perpustakaan standar, sareng aplikasi anu tiasa dieksekusi parantos ningkatkeun syarat pikeun platform Apple, ayeuna peryogi sahenteuna macOS 10.12 Sierra, iOS 10, sareng tvOS 10 dileupaskeun dina 2016 pikeun ngajalankeun.
  • Tingkat katilu pangrojong parantos dilaksanakeun pikeun platform i686-pc-windows-gnullvm. Tingkat katilu ngawengku rojongan dasar, tapi tanpa nguji otomatis, penerbitan resmi ngawangun, atawa mariksa naha kode bisa diwangun.
  • Tingkat kadua dukungan pikeun platform target loongarch64-unknown-none parantos dilaksanakeun. Tingkat kadua pangrojong ngalibatkeun jaminan assembly.

Salaku tambahan, dua acara anu aya hubunganana sareng basa Rust tiasa dicatet:

  • The OSTIF (Open Source Technology Improvement Fund), dijieun pikeun nguatkeun kaamanan proyék open source, geus diterbitkeun hasil hiji Inok proyék RustVMM, nu nyadiakeun komponén pikeun nyieun hypervisors tugas-spésifik jeung monitor mesin virtual (VMMs). Pausahaan sapertos Intel, Alibaba, Amazon, Google, Linaro sareng Red Hat milu dina pangwangunan proyék. Intel Cloud Hypervisor sareng Dragonball hypervisors dikembangkeun dumasar kana RustVMM. Inok dikonfirmasi kualitas luhur dasar kode jeung pamakéan téhnik dina arsitektur jeung palaksanaan aimed dina achieving kaamanan maksimum. Salila Inok, 6 masalah anu dicirikeun nu teu boga dampak langsung kana kaamanan.
  • Google ngenalkeun palaksanaan anyar mékanisme komunikasi antarprosés Binder, ditulis deui dina basa Rust, ka milis pamekar kernel Linux. Rework dilaksanakeun salaku bagian tina proyék pikeun nguatkeun kaamanan, ngamajukeun téknik pamrograman anu aman sareng ningkatkeun efisiensi ngaidentipikasi masalah nalika damel sareng mémori dina Android (sakitar 70% sadaya kerentanan bahaya anu diidentifikasi dina Android disababkeun ku kasalahan nalika damel sareng mémori. ). Palaksanaan Binder di Rust parantos ngahontal paritas dina fungsionalitas sareng versi asli dina basa C, ngalangkungan sadaya tés AOSP (Android Open-Source Project) sareng tiasa dianggo pikeun nyiptakeun édisi firmware anu tiasa dianggo. Kinerja duanana palaksanaan kira-kira dina tingkat anu sarua (panyimpangan dina -1.96% jeung +1.38%).

sumber: opennet.ru

Tambahkeun komentar