Rust 1.74 proqramlaşdırma dilinin buraxılışı. RustVMM auditi. Rustda Binderin yenidən yazılması

Mozilla layihəsi tərəfindən əsası qoyulmuş, lakin indi Rust Foundation müstəqil qeyri-kommersiya təşkilatının himayəsi altında hazırlanmış Rust 1.74 ümumi məqsədli proqramlaşdırma dilinin buraxılışı dərc edilmişdir. Bu dil yaddaşın təhlükəsizliyinə diqqət yetirir və zibil toplayıcıdan və işləmə müddətindən istifadə etmədən yüksək iş paralelliyinə nail olmaq üçün vasitələr təqdim edir (iş vaxtı standart kitabxananın əsas işə salınması və saxlanmasına qədər azaldılır).

Rust-un yaddaşla işləmə üsulları tərtibatçını göstəricilərlə manipulyasiya edərkən xətalardan xilas edir və yaddaşın aşağı səviyyəli işləməsi nəticəsində yaranan problemlərdən qoruyur, məsələn, yaddaş sahəsi boşaldıqdan sonra ona daxil olmaq, sıfır göstəricilərə istinad etmək, bufer aşmaq və s. Kitabxanaları yaymaq, qurmaları təmin etmək və asılılıqları idarə etmək üçün layihə Yük paketi meneceri hazırlayır. Crates.io deposu kitabxanaların yerləşdirilməsi üçün dəstəklənir.

Yaddaşın təhlükəsizliyi Rust-da kompilyasiya zamanı istinad yoxlaması, obyekt sahibliyinin izlənməsi, obyektin istifadə müddətinin (əhatə dairələrinin) izlənməsi və kodun icrası zamanı yaddaşa girişin düzgünlüyünün qiymətləndirilməsi vasitəsilə təmin edilir. Rust həmçinin tam ədədlərin daşmasına qarşı qorunma təmin edir, istifadə etməzdən əvvəl dəyişən dəyərlərin məcburi işə salınmasını tələb edir, standart kitabxanada səhvləri daha yaxşı idarə edir, dəyişməz istinadlar və dəyişənlər konsepsiyasını standart olaraq tətbiq edir, məntiqi səhvləri minimuma endirmək üçün güclü statik yazma təklif edir.

Əsas yeniliklər:

  • Paket meneceri manifesti ilə Cargo.toml faylı vasitəsilə lint yoxlamalarını konfiqurasiya etmək imkanı əlavə edildi. Cavab səviyyəsi (qadağan etmək, inkar etmək, xəbərdarlıq etmək, icazə vermək) kimi lint parametrlərini müəyyən etmək üçün yeni “[lints]” və “[workspace.lints]” bölmələri təklif olunur ki, bunlarda dəyişikliklər haqqında qərar qəbul edilərkən nəzərə alınır. yenidən qurulması. Məsələn, “#![qadağan (təhlükəsiz_kod)]” və “#![deny(clippy) yığarkən və ya əlavə edərkən “-F”, “-D”, “-W” və “-A” bayraqlarını göstərmək əvəzinə :” kodun atributları) :enum_glob_use)]" indi Yük manifestində istifadə edilə bilər: [lints.rust] unsafe_code = "qadağan" [lints.clippy] enum_glob_use = "inkar"
  • Crate paket meneceri repozitoriyaya qoşulduqda autentifikasiya imkanı əlavə etdi. Əsas paylama, identifikasiya parametrlərinin Linux etimadnamə mağazalarında (libsecret əsasında), macOS (Açarlıq) və Windows (Windows Credential Manager) yerləşdirilməsi dəstəyini əhatə edir, lakin sistem əvvəlcə modullaşdırılmışdır və saxlanması və saxlanması üçün müxtəlif provayderlərlə işi təşkil etməyə imkan verir. tokenlər yaratmaq, məsələn, 1Password parol menecerindən istifadə etmək üçün plagin hazırlanmışdır. Yalnız paketlərin dərc olunduğunu təsdiqləmək üçün deyil, hər hansı əməliyyat üçün depo tərəfindən autentifikasiya tələb oluna bilər. ~/.cargo/config.toml [registr] global-credential-providers = ["yük:token", "yük:libsecret"]
  • Qayıdış tipli proqnozlar (impl_trait_projections) üçün dəstək sabitləşdi və bu, Self və T:: Assoc-un "async fn" və "->impl Trait" kimi qaytarma növlərində qeyd edilməsinə imkan verdi. struct Wrapper<'a, T>(&'a T); // `Özünü` qeyd edən qeyri-şəffaf qaytarma növləri: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl İterator { /* … */ } } xüsusiyyət Xarakter<'a> { növü Dos; fn new() -> Self::Dos; } impl Xarakter<'_> üçün () { növü Dos = (); fn new() {} } // Əlaqəli növü qeyd edən qeyri-şəffaf qaytarma növləri: impl<'a, T: Trait<'a>> Sarmalayıcı<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl İterator { /* … */ } }
  • API-nin yeni hissəsi stabillər kateqoriyasına köçürüldü, o cümlədən xüsusiyyətlərin üsulları və tətbiqləri stabilləşdirildi:
  • Onun sabitlər əvəzinə istənilən kontekstdə istifadə imkanını təyin edən "const" atributundan funksiyalarda istifadə olunur:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • core::num::Doyma
    • impl From std::process::Stdio üçün
    • impl From std::process::Stdio üçün
    • impl From std::process::Child{Stdin, Stdout, Stderr} üçün
    • impl From std::process::Child{Stdin, Stdout, Stderr} üçün
    • std::ffi::OsString::from_encoded_bytes_checked
    • std::ffi::OsString::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_checked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::Xəta::digər
    • impl TryFrom u16 üçün
    • impl From<&[T; N]>Vec üçün
    • impl From<&mut [T; N]>Vec üçün
    • impl From<[T; Arc<[T]> üçün N]>
    • impl From<[T; Rc<[T]> üçün N]>
  • Kompilyator, alətlər dəsti, standart kitabxana və yaradılan proqram icra sənədləri Apple platformaları üçün tələbləri artırdı, indi işləmək üçün ən azı macOS 10.12 Sierra, iOS 10 və tvOS 10 tələb olunur.
  • Üçüncü dəstək səviyyəsi i686-pc-windows-gnullvm platforması üçün həyata keçirilib. Üçüncü səviyyə əsas dəstəyi əhatə edir, lakin avtomatlaşdırılmış sınaq, rəsmi quruluşların dərc edilməsi və ya kodun tikilib-qurula bilməyəcəyini yoxlamaq olmadan.
  • loongarch64-naməlum-none hədəf platforması üçün ikinci dəstək səviyyəsi həyata keçirilib. İkinci səviyyəli dəstək montaj zəmanətini əhatə edir.

Bundan əlavə, Rust dili ilə bağlı iki hadisəni qeyd etmək olar:

  • Açıq mənbəli layihələrin təhlükəsizliyini gücləndirmək üçün yaradılmış OSTIF (Açıq Mənbə Texnologiyalarının Təkmilləşdirilməsi Fondu) tapşırıqlar üçün xüsusi hipervizorların və virtual maşın monitorlarının (VMM) yaradılması üçün komponentləri təmin edən RustVMM layihəsinin auditinin nəticələrini dərc edib. Layihənin hazırlanmasında Intel, Alibaba, Amazon, Google, Linaro və Red Hat kimi şirkətlər iştirak edir. RustVMM əsasında Intel Cloud Hypervisor və Dragonball hipervizorları hazırlanır. Audit kod bazasının yüksək keyfiyyətini və arxitekturada və tətbiqdə maksimum təhlükəsizliyə nail olmağa yönəlmiş texnikalardan istifadəni təsdiqlədi. Audit zamanı təhlükəsizliyə birbaşa təsir göstərməyən 6 problem müəyyən edilib.
  • Google Linux kernel developer poçt siyahısına Rust dilində yenidən yazılmış Binder proseslərarası əlaqə mexanizminin yeni tətbiqini təqdim etdi. Yenidən iş təhlükəsizliyin gücləndirilməsi, təhlükəsiz proqramlaşdırma üsullarının təşviqi və Android-də yaddaşla işləyərkən problemlərin müəyyənləşdirilməsinin səmərəliliyinin artırılması layihəsinin bir hissəsi kimi həyata keçirilib (Android-də müəyyən edilmiş bütün təhlükəli zəifliklərin təxminən 70%-i yaddaşla işləyərkən yaranan səhvlərdən qaynaqlanır). ). Rust-da Binder tətbiqi funksionallıq baxımından C dilindəki orijinal versiya ilə bərabərlik əldə etdi, bütün AOSP (Android Open-Source Project) testlərindən keçdi və mikroproqramın işçi nəşrlərini yaratmaq üçün istifadə edilə bilər. Hər iki tətbiqin performansı təxminən eyni səviyyədədir (sapma -1.96% və +1.38%).

Mənbə: opennet.ru

Добавить комментарий