Rust 1.74 програмчлалын хэлийг гаргасан. RustVMM аудит. Биндэрийг зэвэнд дахин бичиж байна

Mozilla төслөөс үүсгэн байгуулсан, гэхдээ одоо Rust Foundation бие даасан ашгийн бус байгууллагын ивээл дор бүтээгдсэн Rust 1.74 ерөнхий зориулалтын програмчлалын хэлний хувилбар хэвлэгдэн гарлаа. Энэ хэл нь санах ойн аюулгүй байдалд анхаарлаа хандуулж, хог цуглуулагч болон ажиллах хугацааг ашиглахаас зайлсхийхийн зэрэгцээ ажлын өндөр зэрэглэлд хүрэх арга хэрэгслийг өгдөг (ажиллах хугацаа нь стандарт номын сангийн үндсэн эхлүүлэх, засвар үйлчилгээ хүртэл багассан).

Rust-ийн санах ойтой харьцах аргууд нь хөгжүүлэгчийг заагчийг удирдах үед гарч болох алдаанаас аварч, санах ойг сулласны дараа санах ойн талбарт хандах, тэг заагчийг ялгах, буфер хэт ачаалах гэх мэт санах ойн доод түвшний боловсруулалтаас үүдэлтэй асуудлаас хамгаалдаг. Номын санг түгээх, бүтээн байгуулалтыг хангах, хамаарлыг удирдахын тулд төсөл нь Ачааны багц менежерийг боловсруулдаг. Crates.io репозиторыг номын санг байршуулахад дэмждэг.

Санах ойн аюулгүй байдлыг Rust-д хөрвүүлэх үед лавлагаа шалгах, объектын өмчлөлийг хянах, объектын ашиглалтын хугацааг (хамрах хүрээ) бүртгэх, кодыг гүйцэтгэх явцад санах ойд нэвтрэх зөв эсэхийг үнэлэх замаар хангадаг. Rust нь бүхэл тоон хэтрэхээс хамгаалж, ашиглахын өмнө хувьсагчийн утгыг заавал эхлүүлэхийг шаарддаг, стандарт номын сан дахь алдааг илүү сайн зохицуулдаг, өөрчлөгдөшгүй лавлагаа ба хувьсагчийн ойлголтыг анхдагчаар ашигладаг, логик алдааг багасгахын тулд хүчтэй статик бичвэрийг санал болгодог.

Гол инноваци:

  • Багц менежерийн манифест бүхий Cargo.toml файлаар хөвөн шалгах тохиргоог хийх боломжийг нэмсэн. Хариултын түвшин (хориолох, үгүйсгэх, сэрэмжлүүлэх, зөвшөөрөх) зэрэг хөвөнгийн тохиргоог тодорхойлохын тулд "[lints]" болон "[workspace.lints]" гэсэн шинэ хэсгүүдийг санал болгож, шийдвэр гаргахдаа эдгээр өөрчлөлтийг харгалзан үзнэ сэргээн босгох. Жишээ нь, “#![хориогүй(аюултай_код)]” болон “#![deny(clippy)-г угсрах, нэмэх үед “-F”, “-D”, “-W”, “-A” тугуудыг зааж өгөхийн оронд. :” кодын атрибутууд) :enum_glob_use)]"-г одоо Ачааны манифестэд ашиглах боломжтой: [lints.rust] unsafe_code = "хорио" [lints.clippy] enum_glob_use = "deny"
  • Crate багц менежер нь репозитортой холбогдох үед баталгаажуулах чадварыг нэмсэн. Үндсэн багцад баталгаажуулалтын параметрүүдийг Линуксийн итгэмжлэлийн дэлгүүрүүд (libsecret дээр суурилсан), macOS (түлхүүрийн оосор) болон Windows (Windows итгэмжлэлийн менежер) байрлуулах дэмжлэг багтсан боловч уг системийг анх модульчлагдсан бөгөөд хадгалах, хадгалах зорилгоор янз бүрийн үйлчилгээ үзүүлэгчтэй ажиллах ажлыг зохион байгуулах боломжийг танд олгоно. токен үүсгэх, жишээлбэл, 1Password нууц үгийн менежерийг ашиглахад зориулж залгаасыг бэлтгэсэн. Багцыг нийтэлсэн эсэхийг баталгаажуулахын тулд биш аливаа үйл ажиллагаанд репозитороос баталгаажуулалт шаардлагатай байж болно. ~/.cargo/config.toml [бүртгэл] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Буцах төрлийн төсөөллийн (impl_trait_projections) дэмжлэгийг тогтворжуулж, "async fn" болон "->impl Trait" зэрэг буцаалтын төрлүүдэд Self болон T::Assoc-ийг дурдах боломжийг олгосон. struct Wrapper<'a, T>(&'a T); // `Self`-г дурдсан тунгалаг бус буцаалтын төрлүүд: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } шинж чанар шинж<'a> { төрөл Assoc; fn new() -> Self::Assoc; } impl Trait<'_> for () { type Assoc = (); fn new() {} } // Холбогдох төрлийг дурдсан тунгалаг бус буцаах төрлүүд: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • API-ийн шинэ хэсгийг тогтвортой гэсэн ангилалд шилжүүлж, шинж чанаруудын арга, хэрэгжилтийг тогтворжуулсан:
  • Үүнийг тогтмолуудын оронд ямар ч нөхцөлд ашиглах боломжийг тодорхойлдог "const" шинж чанарыг дараах функцүүдэд ашигладаг.
    • үндсэн :: mem :: хуулбарлах
    • str::is_ascii
    • [u8]::is_ascii
    • core::num::Saturating
    • impl From std::process::Stdio
    • impl From std::process::Stdio
    • impl From std::process::Child{Stdin, Stdout, Stderr}
    • impl From std::process::Child{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_checked-гүй
    • std::ffi::OsString::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_checked-гүй
    • std ::ffi ::OsStr :: кодлогдсон_байт
    • std::io::Алдаа::бусад
    • impl TryFrom u16-д зориулагдсан
    • impl From<&[T; N]>Vec-д зориулсан
    • impl From<&mut [T; N]>Vec-д зориулсан
    • impl From<[T; Arc<[T]>-д зориулсан N]>
    • impl From<[T; Rc<[T]>-д зориулсан N]>
  • Хөрвүүлэгч, багаж хэрэгсэл, стандарт номын сан болон үүсгэсэн програмын гүйцэтгэх файлууд нь Apple-ийн платформуудад тавигдах шаардлагыг нэмэгдүүлж, одоо хамгийн багадаа 10.12 онд гарсан macOS 10 Sierra, iOS 10, tvOS 2016-ыг ажиллуулах шаардлагатай болсон.
  • Гурав дахь түвшний дэмжлэгийг i686-pc-windows-gnullvm платформ дээр хэрэгжүүлсэн. Гурав дахь түвшин нь үндсэн дэмжлэгийг агуулдаг боловч автоматжуулсан туршилт, албан ёсны бүтээлийг нийтлэх, кодыг бүтээх боломжтой эсэхийг шалгахгүйгээр.
  • loongarch64-unknown-none зорилтот платформыг дэмжих хоёр дахь түвшнийг хэрэгжүүлсэн. Хоёрдахь түвшний дэмжлэг нь угсралтын баталгааг агуулдаг.

Нэмж дурдахад Rust хэлтэй холбоотой хоёр үйл явдлыг тэмдэглэж болно:

  • Нээлттэй эхийн төслүүдийн аюулгүй байдлыг бэхжүүлэх зорилгоор байгуулагдсан OSTIF (Нээлттэй эхийн технологийг сайжруулах сан) нь даалгаварт зориулсан гипервизорууд болон виртуал машины дэлгэц (VMM) үүсгэх бүрэлдэхүүн хэсгүүдээр хангадаг RustVMM төслийн аудитын үр дүнг нийтэлжээ. Төслийг боловсруулахад Intel, Alibaba, Amazon, Google, Linaro, Red Hat зэрэг компаниуд оролцож байна. Intel Cloud Hypervisor болон Dragonball гипервизоруудыг RustVMM дээр үндэслэн хөгжүүлж байна. Аудит нь кодын баазын өндөр чанар, аюулгүй байдлыг дээд зэргээр хангахад чиглэсэн архитектур, хэрэгжилтэд техник ашигласан болохыг баталжээ. Шалгалтын явцад аюулгүй байдалд шууд нөлөөлөөгүй 6 зөрчил илэрсэн.
  • Google нь Linux цөм хөгжүүлэгчийн захидлын жагсаалтад Rust хэлээр дахин бичсэн Binder процесс хоорондын харилцааны механизмын шинэ хэрэгжилтийг нэвтрүүлсэн. Аюулгүй байдлыг бэхжүүлэх, аюулгүй програмчлалын техникийг сурталчлах, Андройд үйлдлийн системд санах ойтой ажиллахад тулгарч буй бэрхшээлийг тодорхойлох үр ашгийг нэмэгдүүлэх төслийн хүрээнд дахин боловсруулалт хийсэн (Android дээр тодорхойлсон бүх аюултай эмзэг байдлын 70 орчим хувь нь санах ойтой ажиллах үеийн алдаанаас үүдэлтэй). ). Rust-д Binder-ийн хэрэгжилт нь Си хэл дээрх анхны хувилбартай ижил төстэй байдалд хүрч, бүх AOSP (Android Open-Source Project) тестийг давж, програмын ажлын хувилбаруудыг бий болгоход ашиглаж болно. Хоёр хэрэгжилтийн гүйцэтгэл ойролцоогоор ижил түвшинд байна (хазайлт -1.96% ба +1.38%).

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх