Veröffentlichung von Rust 1.99.0. Microsoft hat Rust zu einer der primären Sprachen erhoben.

Die Veröffentlichung der Programmiersprache Rust 1.99 wurde bekannt gegeben, die ursprünglich von Mozilla entwickelt wurde, nun aber von der unabhängigen Non-Profit-Organisation Rust Foundation weitergeführt wird. Die Sprache konzentriert sich auf sicheres Arbeiten mit Speicher und bietet Werkzeuge zur Erreichung hohen parallelen Aufgabenausführung, ohne dabei einen Garbage Collector oder Runtime (Runtime beschränkt sich auf die grundlegende Initialisierung und Wartung der Standardbibliothek) zu verwenden.

Die Methoden zur Arbeit mit Speicher in Rust zielen darauf ab, Fehler beim Umgang mit Zeigern zu vermeiden und Probleme zu verhindern, die durch die Low-Level-Arbeit mit Speicher entstehen, wie den Zugriff auf freigegebenen Speicher, Dereferenzierung nuller Zeiger, Pufferüberläufe usw. Zur Verbreitung von Bibliotheken, zur Sicherstellung der Kompilierung und zum Management von Abhängigkeiten wird der Paketmanager Cargo weiterentwickelt. Für die Bereitstellung von Bibliotheken wird das Repository crates.io unterstützt.

Sichere Speicherverwaltung wird in Rust während der Kompilierung durch Überprüfung von Referenzen, Nachverfolgung des Eigentums an Objekten, Berücksichtigung der Lebensdauer von Objekten (Sichtbarkeitsbereiche) und Bewertung der Korrektheit des Zugriffs auf den Speicher während der Ausführung des Codes gewährleistet. Rust bietet ebenfalls Mittel zum Schutz vor Überläufen bei Ganzzahlen, fordert die zwingende Initialisierung von Variablenwerten vor deren Verwendung und behandelt Fehler in der Standardbibliothek besser. Außerdem wird das Konzept der Unveränderlichkeit (immutable) von Referenzen und Variablen standardmäßig angewendet, und es bietet eine starke statische Typisierung zur Minimierung logischer Fehler.

Hauptneuheiten:

  • Es wurde die Möglichkeit geschaffen, in Rust Funktionen mit variabler Anzahl an Argumenten (variadic) zu erstellen, die für den Aufruf aus C-Projekten exportiert werden können (C ABI). Als letztes Element der Parameterliste in solchen Funktionen kann die Konstruktion „…“ angegeben werden, die in Rust mit einem speziellen Typ VaList verarbeitet wird, der ähnlich wie va_list in C arbeitet. unsafe extern «C» fn sum(mut args: …) -> i32 { let a = unsafe { args.next_arg::<i32>() }; let b = unsafe { args.next_arg::<i32>() }; a + b } fn foo() -> i32 { unsafe { sum(0i32, 2i32) } }
  • Die Funktionen Layout::for_value_raw, mem::size_of_val_raw und mem::align_of_val_raw wurden stabilisiert, um sicher die Größe und Ausrichtung anhand von rohen Zeigern (raw pointers) zu bestimmen, einschließlich der Verwendung von Typen mit dynamischer Größe wie Slices, ohne dass es erforderlich ist, Referenzen auf die Daten zu erstellen.
  • Die Dokumentation wurde um die Empfehlung ergänzt, die Freigabe von Speicher zu vermeiden, auf den eine statische Referenz mit unbegrenzter Lebensdauer (&’static) durch den Aufruf von Box::leak (round-trip unleaking) erhalten wurde, da eine solche Aktion potenziell Probleme aufgrund von Inkompatibilitäten mit zukünftigen Compileroptimierungen und eingebundenen Speicherallokationsmechanismen verursachen kann. Anstelle der Erstellung einer statischen Referenz für die vorübergehende Übergabe des Eigentums wird empfohlen, rohe Zeiger zu verwenden, beispielsweise durch den Aufruf von Box::into_non_null.
  • Eine neue Charge von APIs wurde in den stabilen Bereich überführt, darunter wurden Methoden und Implementierungen von Traits stabilisiert:
    • IntoIterator für Box<[T; N]>
    • IntoIterator für &Box<[T; N]>
    • IntoIterator für &mut Box<[T; N]>
    • VecDeque::retain_back
    • core::ffi::VaList
    • Box::into_non_null
    • Box::from_non_null
    • Vec::into_parts
    • Vec::from_parts
    • core::mem::size_of_val_raw
    • core::mem::align_of_val_raw
    • core::alloc::Layout::for_value_raw
    • String::from_utf8_lossy_owned
    • string::FromUtf8Error::into_utf8_lossy
    • FusedIterator für StepBy<I>
    • std::fs::set_times
    • std::fs::set_times_nofollow
  • Im Paketmanager Cargo wurde ein neues integriertes Profil „debug“ implementiert, das dem Profil „dev“ ähnelt (zukünftig soll die Möglichkeit zum Debuggen und Entwickeln getrennt werden). Bei der CI-Build wird standardmäßig die inkrementelle Kompilierung deaktiviert.
  • Die Zielplattform riscv64-unknown-linux-musl hat die zweite Unterstützungsebene erreicht, die eine Build-Garantie, jedoch keine Garantien für das Bestehen des Testsets beinhaltet.

Zusätzlich können die kürzlich angekündigten Projekte und Veranstaltungen in Verbindung mit Rust hervorgehoben werden:

  • Microsoft hat Rust zu einer Sprache der ersten Stufe erhoben und wird vollständige Unterstützung für alle Entwicklungsphasen innerhalb des Unternehmens bieten. Zuvor gab es die erste Unterstützungsebene im Unternehmen für die Sprachen C++, C# und TypeScript. Es wird berichtet, dass Rust bereits in mehr als 100 Microsoft-Repositories verwendet wird. Unter anderem werden Rust-Komponenten bereits in Produkten wie Microsoft 365 und Copilot eingesetzt, und für den MSVC-Compiler wurde ein separater Backend rustc_codegen_utc für Rust, basierend auf dem rustc-Compiler, vorbereitet.

    Das Hauptziel der Anwendung von Rust bei Microsoft wird die Erhöhung der Sicherheit des Codes genannt, der aus sicherheitstechnischer Sicht kritisch ist. Laut dem technischen Direktor von Microsoft Azure werden etwa 70 % aller Sicherheitsanfälligkeiten in Windows durch Probleme im Zusammenhang mit Speicher verursacht, die durch die Verwendung von Rust vermieden werden können.

  • Google hat die alte Implementierung des Interprozesskommunikationsmechanismus Binder, die in C geschrieben wurde, aus dem Linux-Kernel entfernt, zugunsten des neuen Binder IPC-Treibers, der in Rust neu geschrieben wurde. Es wird festgestellt, dass sich über 15 Jahre der alten Treiber signifikante technische Schulden und eine Vielzahl von Komplikationen angesammelt haben, die das Auffinden von Fehlern, die Wartung und die Hinzufügung neuer Funktionen erschwerten. Der Binder IPC-Treiber in Rust wird als primär anerkannt und nicht mehr als experimentelle Entwicklung angesehen.
  • Die Version 2.7.0 von Arti, einer Implementierung des Tor-Toolkits, das in Rust geschrieben wurde, wurde veröffentlicht. Wenn der Arti-Code ein Niveau erreicht, das den C-Variant vollständig ersetzen kann, beabsichtigen die Tor-Entwickler, Arti den Status der Hauptimplementierung von Tor zu verleihen und die Unterstützung der Implementierung in C schrittweise einzustellen. In der neuen Version wurde die Funktionalität für Relais weiterentwickelt. Server Verzeichnis (Directory Authority), das mit dem Parsen von Dokumenten, der Unterstützung der Spiegelung von Verzeichnisservern und der Verarbeitung von DNS-Verkehr verbunden ist. Eine RPC-Implementierung wurde hinzugefügt, um die Konfiguration zu ändern und zu überprüfen. Mehrere Sicherheitsanfälligkeiten wurden behoben — Administratoren von Onion-Diensten wird dringend empfohlen, ihre Systeme umgehend zu aktualisieren.

Quelle: opennet.ru

Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server 🔥 Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster