Veröffentlichung der Programmiersprache Rust 1.65

Die Veröffentlichung der universellen Programmiersprache Rust 1.65, die vom Mozilla-Projekt gegründet wurde, jetzt aber unter der Schirmherrschaft der unabhängigen gemeinnützigen Organisation Rust Foundation entwickelt wird, wurde veröffentlicht. Die Sprache konzentriert sich auf die Speichersicherheit und bietet die Möglichkeit, eine hohe Jobparallelität zu erreichen und gleichzeitig die Verwendung eines Garbage Collectors und einer Laufzeit zu vermeiden (die Laufzeit beschränkt sich auf die grundlegende Initialisierung und Wartung der Standardbibliothek).

Die Speicherverarbeitungsmethoden von Rust bewahren den Entwickler vor Fehlern bei der Manipulation von Zeigern und schützen vor Problemen, die durch die Speicherverarbeitung auf niedriger Ebene entstehen, wie z. B. Zugriff auf einen Speicherbereich, nachdem dieser freigegeben wurde, Dereferenzierung von Nullzeigern, Pufferüberläufe usw. Um Bibliotheken zu verteilen, Builds bereitzustellen und Abhängigkeiten zu verwalten, entwickelt das Projekt den Cargo-Paketmanager. Das crates.io-Repository wird zum Hosten von Bibliotheken unterstützt.

Die Speichersicherheit wird in Rust zur Kompilierungszeit durch Referenzprüfung, Verfolgung des Objektbesitzes, Verfolgung der Objektlebensdauer (Umfänge) und Beurteilung der Korrektheit des Speicherzugriffs während der Codeausführung gewährleistet. Rust bietet außerdem Schutz vor Ganzzahlüberläufen, erfordert eine obligatorische Initialisierung von Variablenwerten vor der Verwendung, behandelt Fehler in der Standardbibliothek besser, wendet standardmäßig das Konzept unveränderlicher Referenzen und Variablen an und bietet starke statische Typisierung, um logische Fehler zu minimieren.

Wichtigste Neuerungen:

  • Unterstützung für generische zugeordnete Typen (GAT, Generic Associated Types) hinzugefügt, die es ermöglichen, mit einem anderen Typ verknüpfte Typaliase zu erstellen und Typkonstruktoren mit Merkmalen zu verknüpfen. trait Foo { type Bar<'x>; }
  • Der „let ... else“-Ausdruck wurde implementiert, sodass Sie die Musterübereinstimmungsbedingung direkt im „let“-Ausdruck überprüfen und beliebigen Code ausführen können, wenn das Muster nicht übereinstimmt. let Ok(count) = u64::from_str(count_str) else { panic!("Integer kann nicht analysiert werden: '{count_str}'"); };
  • Erlauben Sie die Verwendung einer Break-Anweisung zum vorzeitigen Beenden benannter Blöcke, indem Sie den Blocknamen (Label) verwenden, um den zu beendenden Block zu identifizieren. let result = 'block: { do_thing(); if condition_not_met() { break 'block 1; } do_next_thing(); if condition_not_met() { break 'block 2; } do_last_thing(); 3 };
  • Für Linux wurde die Möglichkeit hinzugefügt, Debugging-Informationen (split-debuginfo) separat zu speichern, die bisher nur für die macOS-Plattform verfügbar war. Bei Angabe der Option „-Csplit-debuginfo=unpacked“ werden Debuginfo-Daten im DWARF-Format in mehreren separaten Objektdateien mit der Erweiterung „.dwo“ gespeichert. Durch die Angabe von „-Csplit-debuginfo=packed“ wird ein einzelnes Paket im „.dwp“-Format erstellt, das alle Debuginfo-Daten für das Projekt enthält. Um debuginfo direkt in den .debug_*-Abschnitt von ELF-Objekten zu integrieren, können Sie die Option „-Csplit-debuginfo=off“ verwenden.
  • Ein neuer Teil der API wurde in die Kategorie „stabil“ verschoben, einschließlich der Stabilisierung der Methoden und Implementierungen von Merkmalen:
    • std::backtrace::Backtrace
    • Gebunden::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • Das Attribut „const“, das die Möglichkeit seiner Verwendung in jedem Kontext anstelle von Konstanten bestimmt, wird in den Funktionen <*const T&>::offset_from und <*mut T>::offset_from verwendet
  • Im Rahmen der letzten Phase der Übertragung der Implementierung des LSP-Protokolls (Language Server Protocol) an Rust-Analyzer wurde die veraltete Implementierung des Rust Language Server (RLS) durch einen Stub-Server ersetzt, der eine Warnung mit einem Vorschlag zum Wechsel ausgibt mit Rostanalysator.
  • Während der Kompilierung wird die Unterstützung für die Inline-Bereitstellung von MIR-Zwischencode aktiviert, was die Kompilierung typischer Crate-Pakete um 3–10 % beschleunigt.
  • Um geplante Builds zu beschleunigen, bietet der Cargo-Paketmanager eine Sortierung der Jobs, die in der Warteschlange auf ihre Ausführung warten.

Darüber hinaus können Sie sich das Interview über die Verwendung der Rust-Sprache bei Volvo zur Entwicklung von Komponenten für Automobilinformationssysteme ansehen. Es gibt keine Pläne, vorhandenen und getesteten Code in Rust neu zu schreiben, aber für neuen Code ist Rust eine der bevorzugten Optionen zur Qualitätsverbesserung bei geringeren Kosten. Auch in den Automobilverbänden AUTOSAR (AUTomotive Open System ARchitecture) und SAE (Society of Automotive Engineers) wurden Arbeitsgruppen zum Einsatz der Rust-Sprache gegründet.

Darüber hinaus sprach David Kleidermacher, Vice President of Engineering bei Google, über die Übersetzung des in der Android-Plattform zur Verwaltung von Verschlüsselungsschlüsseln verwendeten Codes in Rust sowie über die Verwendung von Rust bei der Implementierung des DNS-über-HTTPS-Protokolls im Stack für UWB-Chips (Ultra-Wideband) und im Virtualisierungs-Framework (Android Virtualization Framework), das mit dem Tensor G2-Chip verbunden ist. Auch für Android werden neue Stacks für Bluetooth und Wi-Fi entwickelt, die in Rust neu geschrieben wurden. Die allgemeine Strategie besteht darin, die Sicherheit schrittweise zu stärken, indem zunächst die anfälligsten und wichtigsten Softwarekomponenten in Rust konvertiert und dann auf andere verwandte Subsysteme ausgeweitet werden. Letztes Jahr wurde die Sprache Rust in die Liste der für die Entwicklung der Android-Plattform zugelassenen Sprachen aufgenommen.

Source: opennet.ru

Kommentar hinzufügen