Rust 1.74 programlama dilinin piyasaya sürülmesi. RustVMM denetimi. Rust'ta Binder'ı Yeniden Yazmak

Mozilla projesi tarafından kurulan ancak şu anda kar amacı gütmeyen bağımsız bir kuruluş olan Rust Foundation'ın himayesinde geliştirilen Rust 1.74 genel amaçlı programlama dilinin sürümü yayınlandı. Dil, bellek güvenliğine odaklanır ve bir çöp toplayıcı ve çalışma zamanı kullanımından kaçınırken yüksek iş paralelliği elde etmenin yollarını sağlar (çalışma zamanı, standart kitaplığın temel başlatma ve bakımına indirgenir).

Rust'ın bellek işleme yöntemleri, geliştiriciyi işaretçileri işlerken hatalardan korur ve serbest bırakıldıktan sonra bir bellek alanına erişme, boş işaretçilerin başvurusunu kaldırma, arabellek taşmaları vb. gibi düşük seviyeli bellek manipülasyonundan kaynaklanan sorunlara karşı koruma sağlar. Kitaplıkları dağıtmak, derlemeler sağlamak ve bağımlılıkları yönetmek için proje Kargo paketi yöneticisini geliştirir. Crates.io deposu kitaplıkları barındırmak için desteklenir.

Rust'ta bellek güvenliği, derleme zamanında referans kontrolü, nesne sahipliğinin izlenmesi, nesne ömürlerinin (kapsamların) izlenmesi ve kod yürütme sırasında bellek erişiminin doğruluğunun değerlendirilmesi yoluyla sağlanır. Rust ayrıca tamsayı taşmalarına karşı koruma sağlar, kullanımdan önce değişken değerlerinin zorunlu olarak başlatılmasını gerektirir, standart kitaplıkta hataları daha iyi işler, değişmez referanslar ve değişkenler kavramını varsayılan olarak uygular, mantıksal hataları en aza indirmek için güçlü statik yazım sunar.

Ana yenilikler:

  • Paket yöneticisi bildirimiyle Cargo.toml dosyası aracılığıyla tüy kontrollerini yapılandırma yeteneği eklendi. Yanıt düzeyi (yasakla, reddet, uyar, izin ver) gibi tüy bırakmayan ayarları tanımlamak için, yeni "[lints]" ve "[workspace.lints]" bölümleri önerilmektedir; bunlar hakkında karar verirken değişiklikler dikkate alınır. yeniden inşa etmek. Örneğin, “#![forbid(unsafe_code)]” ve “#![deny(clippy) kodlarını birleştirirken veya eklerken “-F”, “-D”, “-W” ve “-A” bayraklarını belirtmek yerine :” kodun nitelikleridir) :enum_glob_use)]" artık Kargo manifestosunda kullanılabilir: [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "reddet"
  • Crate paket yöneticisi, bir depoya bağlanırken kimlik doğrulama özelliği ekledi. Temel dağıtım, Linux kimlik bilgisi depolarına (libsecret tabanlı), macOS'a (Anahtarlık) ve Windows'a (Windows Kimlik Bilgisi Yöneticisi) kimlik doğrulama parametrelerini yerleştirme desteğini içerir, ancak sistem başlangıçta modüler hale getirildi ve depolama ve depolama için çeşitli sağlayıcılarla çalışmayı düzenlemenize olanak tanır. Örneğin token üreten 1Password şifre yöneticisinin kullanımına yönelik bir eklenti hazırlanmıştır. Kimlik doğrulama, yalnızca paketlerin yayınlandığını doğrulamak için değil, herhangi bir işlem için depo tarafından gerekli olabilir. ~/.cargo/config.toml [kayıt defteri] global-kimlik bilgisi sağlayıcıları = ["kargo:token", "kargo:libsecret"]
  • Dönüş türü projeksiyonları (impl_trait_projections) desteği stabilize edilerek Self ve T::Assoc'un "async fn" ve "->impl Trait" gibi dönüş türlerinde belirtilmesine olanak tanındı. struct Sarıcı<'a, T>(&'a T); // `Kendinden' bahseden opak dönüş türleri: impl Sarmalayıcı<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Yineleyici { /* … */ } } özellik Özellik<'a> { type Assoc; fn new() -> Self::Assoc; } impl Özellik<'_> for () { type Assoc = (); fn new() {} } // İlişkili bir türden bahseden opak dönüş türleri: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Yineleyici { /* … */ } }
  • API'nin yeni bir bölümü kararlı kategorisine taşındı ve özelliklerin yöntemleri ve uygulamaları kararlı hale getirildi:
  • Sabitler yerine herhangi bir bağlamda kullanılma olasılığını belirleyen "const" niteliği işlevlerde kullanılır:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • core::num::Doyurucu
    • impl From std::process::Stdio için
    • impl From std::process::Stdio için
    • 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::Hata::diğer
    • impl TryFrom 16 yaş altı için
    • ima etmek <&[T; N]>Vec için
    • ima etmek <&mut'tan [T; N]>Vec için
    • ima etmek <[T'den; Ark için N]><[T]>
    • ima etmek <[T'den; Rc<[T]> için N]>
  • Derleyici, araç seti, standart kitaplık ve oluşturulan uygulama yürütülebilir dosyalarının Apple platformları için gereksinimleri arttı ve artık 10.12'da piyasaya sürülen en az macOS 10 Sierra, iOS 10 ve tvOS 2016'un çalıştırılması gerekiyor.
  • i686-pc-windows-gnullvm platformu için üçüncü düzey destek uygulandı. Üçüncü düzey temel desteği içerir ancak otomatik testler, resmi yapıların yayınlanması veya kodun oluşturulup oluşturulamayacağının kontrol edilmesi söz konusu değildir.
  • loongarch64-unknown-none hedef platformu için ikinci seviye destek uygulandı. İkinci destek seviyesi montaj garantisini içerir.

Ek olarak Rust diliyle ilgili iki olaya dikkat çekilebilir:

  • Açık kaynak projelerinin güvenliğini güçlendirmek için oluşturulan OSTIF (Açık Kaynak Teknoloji Geliştirme Fonu), göreve özel hipervizörler ve sanal makine monitörleri (VMM'ler) oluşturmaya yönelik bileşenler sağlayan RustVMM projesinin denetiminin sonuçlarını yayınladı. Projenin geliştirilmesine Intel, Alibaba, Amazon, Google, Linaro ve Red Hat gibi şirketler katılıyor. Intel Cloud Hypervisor ve Dragonball hipervizörleri RustVMM temel alınarak geliştirilmektedir. Denetim, kod tabanının yüksek kalitesini ve mimaride ve uygulamada maksimum güvenliğe ulaşmayı amaçlayan tekniklerin kullanıldığını doğruladı. Denetim sırasında emniyeti doğrudan etkilemeyen 6 sorun tespit edildi.
  • Google, Binder süreçler arası iletişim mekanizmasının Rust dilinde yeniden yazılan yeni bir uygulamasını Linux çekirdeği geliştirici posta listesine ekledi. Yeniden çalışma, güvenliği güçlendirmek, güvenli programlama tekniklerini teşvik etmek ve Android'de bellekle çalışırken sorunları belirleme verimliliğini artırmak için bir projenin parçası olarak gerçekleştirildi (Android'de tanımlanan tüm tehlikeli güvenlik açıklarının yaklaşık% 70'i bellekle çalışırken yapılan hatalardan kaynaklanıyor) ). Binder'ın Rust'ta uygulanması, C dilindeki orijinal sürümle işlevsellik bakımından eşitlik sağladı, tüm AOSP (Android Açık Kaynak Projesi) testlerini geçti ve ürün yazılımının çalışma sürümlerini oluşturmak için kullanılabilir. Her iki uygulamanın performansı yaklaşık olarak aynı seviyededir (-%1.96 ve +%1.38 aralığındaki sapmalar).

Kaynak: opennet.ru

Yorum ekle