Veröffentlichung der Programmiersprache Rust 1.74. Audit von RustVMM. Neuimplementierung von Binder in Rust.

Die neue Version der Programmiersprache Rust 1.74, die ursprünglich von Mozilla entwickelt wurde und jetzt von der unabhängigen Non-Profit-Organisation Rust Foundation betreut wird, wurde veröffentlicht. Die Sprache konzentriert sich auf sichere Speicherverwaltung und bietet Möglichkeiten zur hohen Parallelität bei der Ausführung von Aufgaben, während sie ohne Garbage Collector und eine umfangreiche Laufzeit auskommt (die Laufzeit beschränkt sich auf die grundlegende Initialisierung und die Bereitstellung der Standardbibliothek).

Die Speicherverwaltungsmethoden in Rust befreien Entwickler von Fehlern beim Umgang mit Zeigern und schützen vor Problemen, die durch die Programmierung auf niedriger Ebene entstehen, wie z.B. den Zugriff auf freigegebenen Speicher, Dereferenzierung von Nullzeigern, Pufferüberläufe usw. Zur Verteilung von Bibliotheken, zur Gewährleistung des Builds und zum Management von Abhängigkeiten wird der Paketmanager Cargo entwickelt. Für die Bereitstellung von Bibliotheken wird das Repository crates.io unterstützt.

Die sichere Handhabung von Speicher in Rust wird während der Kompilierung durch die Überprüfung von Referenzen, das Verfolgen des Besitztums von Objekten, das Management der Lebensdauer von Objekten (Sichtbarkeitsbereiche) und die Bewertung der Korrektheit des Zugriffs auf den Speicher zur Laufzeit sichergestellt. Rust bietet außerdem Mechanismen zum Schutz vor ganzzahligen Überläufen, erfordert die verpflichtende Initialisierung von Variablenwerten vor der Verwendung, behandelt Fehler in der Standardbibliothek effektiver, implementiert das Konzept der Unveränderlichkeit (immutable) von Referenzen und Variablen standardmäßig und bietet eine starke statische Typisierung zur Minimierung logischer Fehler.

Hauptneuheiten:

  • Die Möglichkeit zur Konfiguration von Lint-Überprüfungen über die Datei Cargo.toml wurde hinzugefügt, die das Manifest des Paketmanagers enthält. Neue Abschnitte „[lints]“ und „[workspace.lints]“ wurden eingeführt, um Lint-Einstellungen wie das Reaktionsniveau (forbid, deny, warn, allow) festzulegen, deren Änderungen bei der Entscheidung über einen Neuaufbau berücksichtigt werden. So können Sie anstelle von Compiler-Flags wie „-F“, „-D“, „-W“ und „-A“ oder der Hinzufügung von Attributen wie „#![forbid(unsafe_code)]“ und „#![deny(clippy::enum_glob_use)]“ nun im Cargo-Manifest Folgendes verwenden: [lints.rust] unsafe_code = „forbid“ [lints.clippy] enum_glob_use = „deny“
  • Im Paketmanager Crate wurde die Möglichkeit zur Authentifizierung beim Verbindungsaufbau zu einem Repository hinzugefügt. In der Grundausstattung wird die Unterstützung für die Speicherung von Authentifizierungsparametern in den Linux-Zugangsspeichern (basierend auf libsecret), macOS (Keychain) und Windows (Windows Credential Manager) bereitgestellt. Das System ist jedoch von Anfang an modular aufgebaut und ermöglicht die Zusammenarbeit mit verschiedenen Anbietern zur Speicherung und Generierung von Tokens. Beispielsweise wurde ein Plugin zur Verwendung des Passwortmanagers 1Password vorbereitet. Die Authentifizierung kann vom Repository für beliebige Operationen angefordert werden, nicht nur zur Bestätigung der Paketveröffentlichung. ~/.cargo/config.toml [registry] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Die Unterstützung für Projizierungen von Rückgabetypen (impl_trait_projections) wurde stabilisiert, sodass Self und T::Assoc in Rückgabetypen wie „async fn“ und „-> impl Trait“ erwähnt werden können. struct Wrapper<‘a, T>(&’a T); // Opaque Rückgabetypen, die `Self` erwähnen: impl Wrapper<‘_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } trait Trait<‘a> { type Assoc; fn new() -> Self::Assoc; } impl Trait<‘_> for () { type Assoc = (); fn new() {} } // Opaque Rückgabetypen, die einen assoziierten Typ erwähnen: impl<‘a, T: Trait<‘a>> Wrapper<‘a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator<Item = T::Assoc> { /* … */ } }
  • Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
  • Das „const“-Merkmal, das die Verwendung in jedem Kontext anstelle von Konstanten ermöglicht, wurde in den Funktionen angewendet:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • core::num::Saturating
    • impl From for std::process::Stdio
    • impl From for 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<char> for u16
    • impl<T: Clone, const N: usize> From<&[T; N]> for Vec<T>
    • impl<T: Clone, const N: usize> From<&mut [T; N]> for Vec<T>
    • impl<T, const N: usize> From<[T; N]> for Arc<[T]>
    • impl<T, const N: usize> From<[T; N]> for Rc<[T]>
  • In dem Compiler, den Werkzeugen, der Standardbibliothek und den generierten ausführbaren Dateien von Anwendungen wurden die Anforderungen an Apple-Plattformen erhöht: Es sind jetzt mindestens die Versionen macOS 10.12 Sierra, iOS 10 und tvOS 10 erforderlich, die 2016 veröffentlicht wurden.
  • Die dritte Unterstützungsebene für die Plattform i686-pc-windows-gnullvm wurde implementiert. Die dritte Ebene umfasst eine grundlegende Unterstützung, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds und Überprüfung der Möglichkeit, den Code zu kompilieren.
  • Die zweite Unterstützungsebene für die Zielplattform loongarch64-unknown-none wurde implementiert. Die zweite Unterstützungsebene garantiert die Möglichkeit der Kompilierung.

Zusätzlich können zwei Ereignisse im Zusammenhang mit der Programmiersprache Rust hervorgehoben werden:

  • Die OSTIF (Open Source Technology Improvement Fund), die gegründet wurde, um die Sicherheit offener Projekte zu erhöhen, hat die Ergebnisse eines Audits des RustVMM-Projekts veröffentlicht, das Komponenten zur Erstellung von aufgaben-spezifischen Hypervisoren und Monitoren bereitstellt. virtuellen Maschinen (VMM). An der Entwicklung des Projekts sind Unternehmen wie Intel, Alibaba, Amazon, Google, Linaro und Red Hat beteiligt. Auf Basis von RustVMM werden die Hypervisoren Intel Cloud Hypervisor und Dragonball entwickelt. Ein Audit hat die hohe Qualität des Codes sowie die Verwendung von Architekturen und Techniken bestätigt, die auf maximale Sicherheit abzielen. Im Rahmen des Audits wurden 6 Probleme identifiziert, die jedoch keine direkten Auswirkungen auf die Sicherheit haben.
  • Google hat in der Mailingliste für Entwickler des Linux-Kernels eine neue Implementierung des Interprozesskommunikationsmechanismus Binder vorgestellt, die in Rust neu geschrieben wurde. Diese Überarbeitung erfolgt im Rahmen eines Projekts zur Verbesserung der Sicherheit, zur Förderung sicherer Programmiertechniken und zur Effizienzsteigerung bei der Auffindung von Speicherproblemen in Android (etwa 70 % aller kritischen Sicherheitsanfälligkeiten, die in Android entdeckt wurden, sind auf Speicherfehler zurückzuführen). Die Binder-Implementierung in Rust erreicht funktionale Parität mit der ursprünglichen Version in C, besteht alle Tests des AOSP (Android Open-Source Project) und kann zur Erstellung von Arbeitsschaltungen für Firmware verwendet werden. Die Leistung beider Implementierungen liegt in einem ähnlichen Bereich (Abweichungen zwischen -1,96 % und +1,38 %).

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster