Paglabas ng Rust 1.74 programming language. RustVMM audit. Muling Pagsusulat ng Binder sa kalawang

Ang pagpapalabas ng Rust 1.74 general-purpose programming language, na itinatag ng proyekto ng Mozilla, ngunit ngayon ay binuo sa ilalim ng auspice ng independiyenteng non-profit na organisasyon na Rust Foundation, ay nai-publish. Nakatuon ang wika sa kaligtasan ng memorya at nagbibigay ng paraan upang makamit ang mataas na parallelism sa trabaho habang iniiwasan ang paggamit ng isang basurero at runtime (runtime ay binabawasan sa pangunahing pagsisimula at pagpapanatili ng karaniwang library).

Ang mga paraan ng pangangasiwa ng memorya ng Rust ay nagliligtas sa developer mula sa mga error kapag nagmamanipula ng mga pointer at nagpoprotekta laban sa mga problemang lumitaw dahil sa mababang antas ng paghawak ng memorya, tulad ng pag-access sa isang lugar ng memorya pagkatapos na ito ay mapalaya, pag-derefer ng mga null pointer, pag-overrun ng buffer, atbp. Upang ipamahagi ang mga aklatan, magbigay ng mga build at pamahalaan ang mga dependency, bubuo ang proyekto ng Cargo package manager. Ang crates.io repository ay suportado para sa pagho-host ng mga aklatan.

Ang kaligtasan ng memorya ay ibinibigay sa Rust sa oras ng pag-compile sa pamamagitan ng pagsuri sa sanggunian, pagsubaybay sa pagmamay-ari ng bagay, pagsubaybay sa mga buhay ng bagay (mga saklaw), at pagtatasa ng kawastuhan ng pag-access sa memorya sa panahon ng pagpapatupad ng code. Nagbibigay din ang kalawang ng proteksyon laban sa mga overflow ng integer, nangangailangan ng mandatoryong pagsisimula ng mga variable na halaga bago gamitin, mas mahusay na pinangangasiwaan ang mga error sa karaniwang library, inilalapat ang konsepto ng hindi nababagong mga sanggunian at mga variable bilang default, nag-aalok ng malakas na static na pag-type upang mabawasan ang mga lohikal na error.

Mga pangunahing inobasyon:

  • Nagdagdag ng kakayahang mag-configure ng mga lint check sa pamamagitan ng Cargo.toml file kasama ang manifest ng manager ng package. Upang tukuyin ang mga setting ng lint, gaya ng antas ng pagtugon (ipagbawal, tanggihan, babalaan, payagan), ang mga bagong seksyong "[lints]" at "[workspace.lints]" ay iminungkahi, mga pagbabago kung saan isinasaalang-alang kapag gumagawa ng desisyon tungkol sa muling pagtatayo. Halimbawa, sa halip na tukuyin ang mga flag na "-F", "-D", "-W" at "-A" kapag nag-assemble o nagdaragdag ng "#![forbid(unsafe_code)]" at "#![deny(clippy) :” na mga attribute sa code) :enum_glob_use)]" ay maaari na ngayong gamitin sa Cargo manifest: [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "deny"
  • Ang Crate package manager ay nagdagdag ng kakayahang mag-authenticate kapag kumokonekta sa isang repositoryo. Kasama sa pangunahing pakete ang suporta para sa paglalagay ng mga parameter ng pagpapatunay sa mga tindahan ng kredensyal ng Linux (batay sa libsecret), macOS (Keychain) at Windows (Windows Credential Manager), ngunit ang system ay unang ginawang modular at nagbibigay-daan sa iyo upang ayusin ang trabaho sa iba't ibang mga provider para sa pag-iimbak at pagbuo ng mga token, halimbawa, isang plugin ang inihanda para sa paggamit ng 1Password password manager. Maaaring kailanganin ng repository ang pagpapatunay para sa anumang operasyon, hindi lamang para kumpirmahin na ang mga pakete ay nai-publish na. ~/.cargo/config.toml [registry] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Ang suporta para sa mga return type projection (impl_trait_projections) ay na-stabilize, na nagpapahintulot sa Self at T::Assoc na banggitin sa mga return type gaya ng "async fn" at "->impl Trait". struct Wrapper<'a, T>(&'a T); // Opaque return type that mention `Self`: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } trait Trait<'a> { type Assoc; fn new() -> Sarili::Assoc; } impl Trait<'_> para sa () { type Assoc = (); fn new() {} } // Opaque return type na nagbabanggit ng nauugnay na uri: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay na-stabilize:
  • Ang katangiang "const", na tumutukoy sa posibilidad na gamitin ito sa anumang konteksto sa halip na mga constant, ay ginagamit sa mga function:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • core::num::Saturating
    • impl Mula sa para sa std::process::Stdio
    • impl Mula sa para sa std::process::Stdio
    • impl From for std::process::Child{Stdin, Stdout, Stderr}
    • impl From for std::process::Child{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::Error::other
    • impl TryFrom para sa u16
    • impl Mula sa<&[T; N]> para kay Vec
    • impl Mula sa<&mut [T; N]> para kay Vec
    • impl Mula sa<[T; N]> para sa Arc<[T]>
    • impl Mula sa<[T; N]> para sa Rc<[T]>
  • Ang compiler, toolkit, karaniwang library, at mga nabuong application executable ay nagpapataas ng mga kinakailangan para sa mga platform ng Apple, ngayon ay nangangailangan ng hindi bababa sa macOS 10.12 Sierra, iOS 10, at tvOS 10 na inilabas noong 2016 upang tumakbo.
  • Ang ikatlong antas ng suporta ay ipinatupad para sa i686-pc-windows-gnullvm platform. Ang ikatlong antas ay nagsasangkot ng pangunahing suporta, ngunit walang automated na pagsubok, pag-publish ng mga opisyal na build, o pagsuri kung ang code ay maaaring buuin.
  • Naipatupad na ang pangalawang antas ng suporta para sa loongarch64-unknown-none target platform. Ang ikalawang antas ng suporta ay nagsasangkot ng garantiya ng pagpupulong.

Bukod pa rito, maaaring mapansin ang dalawang kaganapan na nauugnay sa wikang Rust:

  • Ang OSTIF (Open Source Technology Improvement Fund), na nilikha upang palakasin ang seguridad ng mga open source na proyekto, ay naglathala ng mga resulta ng isang pag-audit ng proyektong RustVMM, na nagbibigay ng mga bahagi para sa paglikha ng mga hypervisors na partikular sa gawain at mga virtual machine monitor (VMM). Ang mga kumpanya tulad ng Intel, Alibaba, Amazon, Google, Linaro at Red Hat ay nakikilahok sa pagbuo ng proyekto. Ang Intel Cloud Hypervisor at Dragonball hypervisor ay binuo batay sa RustVMM. Kinumpirma ng audit ang mataas na kalidad ng base ng code at ang paggamit ng mga diskarte sa arkitektura at pagpapatupad na naglalayong makamit ang pinakamataas na seguridad. Sa panahon ng pag-audit, 6 na problema ang natukoy na walang direktang epekto sa kaligtasan.
  • Ipinakilala ng Google ang isang bagong pagpapatupad ng mekanismo ng komunikasyon sa interprocess ng Binder, na muling isinulat sa wikang Rust, sa mailing list ng developer ng Linux kernel. Ang muling paggawa ay isinagawa bilang bahagi ng isang proyekto upang palakasin ang seguridad, itaguyod ang mga secure na diskarte sa programming at pataasin ang kahusayan ng pagtukoy ng mga problema kapag nagtatrabaho sa memorya sa Android (mga 70% ng lahat ng mga mapanganib na kahinaan na natukoy sa Android ay sanhi ng mga error kapag nagtatrabaho gamit ang memorya. ). Ang pagpapatupad ng Binder sa Rust ay nakamit ang parity sa functionality sa orihinal na bersyon sa C language, pumasa sa lahat ng AOSP (Android Open-Source Project) na mga pagsubok at maaaring magamit upang lumikha ng mga gumaganang edisyon ng firmware. Ang pagganap ng parehong pagpapatupad ay humigit-kumulang sa parehong antas (mga deviation sa loob ng -1.96% at +1.38%).

Pinagmulan: opennet.ru

Magdagdag ng komento