Rust 1.84 veröffentlicht. In Rust geschriebene Tock- und Vekos-Kerne. Mini-C-Dialekt

Die Veröffentlichung der universellen Programmiersprache Rust 1.84, 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:

  • Der Cargo-Paketmanager verfügt über einen stabilisierten Abhängigkeitsverarbeitungsmechanismus, der Versionen abhängiger Komponenten unter Berücksichtigung der Kompatibilität mit Versionen des Rust-Compilers auswählt, die vom Projekt als minimal unterstützt erklärt werden (MSRV, Minimum Supported Rust Version). Die neue Funktion macht es für Betreuer überflüssig, ältere Versionen jeder Abhängigkeit in Projekten manuell auszuwählen, die mit älteren Versionen des Rust-Toolkits kompatibel bleiben. Der neue Abhängigkeitsauflösungsmodus wird standardmäßig in der Rust-Version 1.85 aktiviert, ist jedoch vorerst als Option verfügbar, die durch Angabe von „inkompatible-rust-versions =“ im Abschnitt „[resolver]“ des „aktiviert werden kann. „cargo/config.toml“-Datei. fallback“‘.
  • Wir haben damit begonnen, den Compiler in einen neuen Typlöser umzuwandeln, der darauf ausgelegt ist, die Grenzen der Anwendbarkeit von Merkmalen zu testen, Typen zu normalisieren und die Typkompatibilität zu bewerten. In Version 1.84 wird ein neuer Handler verwendet, um die Konsistenz von Trait-Implementierungen zu überprüfen, d. h. Beurteilung der Existenz von höchstens einem Merkmal für den betreffenden Typ unter Berücksichtigung von Code aus anderen Crate-Paketen. Durch diese Überprüfung konnten wir Probleme in der alten Typ-Handler-Implementierung beseitigen, die möglicherweise zu Konflikten aufgrund der Überschneidung verschiedener Typ-Implementierungen führen könnten.
  • Es wurde eine neue API „Strict Provenance“ vorgeschlagen, mit der ein Zeiger in eine Ganzzahl und zurück konvertiert werden kann, wobei an den Zeiger angehängte Metadaten mit Informationen zu seiner Herkunft und seinem Verwendungsbereich (zusätzlich zu) berücksichtigt werden die Adresse, der Wert „Herkunft“, wird an den Zeiger mit Informationen über Verbindungen mit anderen Zeigern angehängt, wodurch Sie bestimmen können, wo und wann der Zeiger auf den Speicher zugreifen kann. Beim Umwandeln eines Zeigers in eine ganze Zahl und zurück kommt es zu undefiniertem Verhalten, da es schwierig ist, den Ursprung des resultierenden Zeigers zu ermitteln. Mit der neuen API können Sie Zeigeroperationen auf niedriger Ebene ausführen, z. B. das Speichern zusätzlicher Informationen in den niederwertigen Bits des Zeigers, ohne den Zeiger in eine Ganzzahl umzuwandeln.
  • Ein neuer Teil der API wurde in die Kategorie „stabil“ verschoben, einschließlich der Stabilisierung der Methoden und Implementierungen von Merkmalen:
    • Ipv6Addr::is_unique_local
    • Ipv6Addr::is_unicast_link_local
    • core::ptr::with_exposed_provenance
    • core::ptr::with_exposed_provenance_mut
    • ::addr
    • ::expose_provenance
    • ::with_addr
    • ::map_addr
    • ::isqrt
    • ::checked_isqrt
    • ::isqrt
    • NonZero::isqrt
    • core::ptr::without_provenance
    • core::ptr::without_provenance_mut
    • core::ptr::dangling
    • core::ptr::dangling_mut
    • Pin::as_deref_mut
  • Das „const“-Zeichen wird in Funktionen verwendet:
    • AtomicBool::from_ptr
    • AtomicPtr::from_ptr
    • AtomicU8::from_ptr
    • AtomicU16::from_ptr
    • AtomicU32::from_ptr
    • AtomicU64::from_ptr
    • AtomicUsize::from_ptr
    • AtomicI8::from_ptr
    • AtomicI16::from_ptr
    • AtomicI32::from_ptr
    • AtomicI64::from_ptr
    • AtomicIsize::from_ptr
    • ::is_null
    • ::as_ref
    • ::as_mut
    • Pin::neu
    • Pin::new_unchecked
    • Pin::get_ref
    • Pin::into_ref
    • Pin::get_mut
    • Pin::get_unchecked_mut
    • Pin::static_ref
    • Pin::static_mut
  • Die Unterstützung für Assembler-Inline-Einfügungen für s390x- und Arm64EC-Architekturen wurde stabilisiert.
  • Die Unterstützung für Mehrwert-, Referenztypen- und Tail-Call-Funktionen wurde für die WebAssembly-Zielplattform stabilisiert.
  • Die zweite Unterstützungsstufe für die Plattform wasm32v1-none wurde implementiert. Bei der zweiten Supportstufe handelt es sich um eine Montagegarantie.

Darüber hinaus sind mehrere Projekte mit Bezug zu Rust zu nennen:

  • Die Veröffentlichung des Betriebssystems Tock 2.2, das in der Sprache Rust geschrieben ist und auf den Einsatz in Mikrocontrollern abzielt, wurde veröffentlicht. Das System ermöglicht die gleichzeitige Ausführung mehrerer nicht vertrauenswürdiger Anwendungen auf eingebetteten Geräten mit begrenzter RAM-Größe, wie z. B. Sensoren, TPM (Trusted Platform Module), Authentifizierungsschlüsselanhängern und tragbaren Geräten. Unterstützt werden Plattformen mit Mikrocontrollern auf Basis der ARM Cortex-M- und RISC-V-Architekturen. Ein Hauptmerkmal von Tock ist die Isolierung der Anwendungs-, Kernel- und Treiberebenen sowie die separate Isolierung jeder Anwendung und jedes Treibers. Isolation nutzt sowohl die Fähigkeiten der Rust-Sprache als auch die Trennung auf der Speicherschutzebene.
  • Das VEKOS-Projekt (Verified Experimental Kernel OS) entwickelt einen Betriebssystemkernel in der Rust-Sprache, der eine Verifizierung ausführbarer Komponenten ermöglicht. Für jede Dateisystemoperation, Prozesserstellung und Speicherzuweisung wird ein kryptografischer Beweis erstellt, der die Überprüfung der Operation während der Ausführung ermöglicht (die Implementierung wird mit der Verwendung einer Blockchain zur Überprüfung von Aktionen im Betriebssystem verglichen). Um die Integrität und den Schutz vor rückwirkender Verzerrung zu gewährleisten, wird im VKFS-Dateisystem die Merkle-Tree-Struktur verwendet, wobei jeder Zweig dank Baum-Hashing alle zugrunde liegenden Zweige und Knoten überprüft. Die Speicherzuweisung erfolgt im COW-Modus (Copy-On-Write).
  • Eine Gruppe von Forschern von Microsoft und Inria entwickelt eine Teilmenge der C-Sprache, Mini-C, die darauf ausgelegt ist, C-Programme automatisch in eine Rust-Darstellung zu übersetzen. Im Gegensatz zum c2rust-Compiler ermöglicht das neue Projekt die Generierung von Rust-Code ohne unsichere Verwendung, zielt jedoch in erster Linie auf die Konvertierung von C-Projekten ab, die über einen formalen Zuverlässigkeitsnachweis verfügen. Die Implikation ist, dass es einfacher ist, ein C-Projekt zunächst in eine Mini-C-Darstellung zu konvertieren, die keine Zeigerarithmetik zulässt, als unsichere Blöcke nach der direkten Kompilierung von C nach Rust neu zu schreiben.

    Die Compiler-Implementierung basiert auf dem KaRaMeL-Toolkit. Mini-C wurde im Rahmen eines Projekts zum Neuschreiben der kryptografischen HACL*-Bibliothek in Rust entwickelt und getestet, für das ein formeller Zuverlässigkeitsnachweis erbracht wurde. Ein ähnlicher Beweis wurde verwendet, um die Fähigkeit zu demonstrieren, sicheren Rust-Code aus Mini-C zu generieren.

  • Daniel Stenberg, der Autor des Curl-Dienstprogramms, gab bekannt, dass das Curl-Projekt kein alternatives HTTP-Backend mehr entwickeln und pflegen wird, das in Rust unter Verwendung der Hyper-Bibliothek geschrieben wurde. Als Grund wird mangelndes Interesse seitens der Entwickler und Nutzer genannt.
  • Die Beta-Version der in Rust neu geschriebenen Fish 4.0-Befehlsshell wurde angekündigt. Es wird darauf hingewiesen, dass die Fish-Codebasis nach zweijähriger Entwicklungszeit vollständig von C++ auf Rust übertragen wurde. Der Übergang zu Rust ermöglichte es uns, Probleme mit Multithreading zu lösen, moderne Tools zu erhalten, die Fehler in der Kompilierungsphase erkennen, die Speichersicherheit zu verbessern und das Projekt für neue Entwickler attraktiver zu machen.
  • Das Tor-Projekt hat die Veröffentlichung von Arti 1.3.2 veröffentlicht, einer alternativen Implementierung des Tor-Clients in Rust. Arti bietet eine einbettbare Bibliothek, die von verschiedenen Anwendungen verwendet werden kann. Bei der Erstellung von Arti wurden frühere Erfahrungen bei der Entwicklung von Tor berücksichtigt, um bekannte Architekturprobleme zu vermeiden und das Projekt modularer und effizienter zu gestalten. Der 1.x-Zweig ist als für die Verwendung durch allgemeine Benutzer geeignet markiert und bietet das gleiche Maß an Datenschutz, Benutzerfreundlichkeit und Stabilität wie die Haupt-C-Implementierung. Die neue Version setzt die Weiterentwicklung von RPC fort, es wurden Vorbereitungen für die Implementierung der Relay-Unterstützung getroffen und ein Schutz vor DoS-Angriffen auf Onion-Dienste wurde hinzugefügt.
  • Die Veröffentlichung der in Rust geschriebenen Spiel-Engine Bevy 0.15 wurde veröffentlicht. Die Engine verwendet ein datengesteuertes Modell zur Definition der Spiellogik, das auf einer Reihe vorgefertigter Bevy ECS-Komponenten (Entity Component System) aufbaut, die parallel ausgeführt werden können. Unterstützt 2D- und 3D-Rendering, Skelettanimation, Rendering-Graph-Definition, Szenengenerierungssystem, Benutzeroberflächen-Framework und nimmt Änderungen an Szenen und Ressourcen vor, ohne dass ein Neustart erforderlich ist.
  • Der Konsolentexteditor Helix 25.01 wurde veröffentlicht, ist in Rust geschrieben und erweitert die Ideen von vim und neovim. Unterstützt die Integration mit LSP-Servern und Tree-Sitter, die gleichzeitige Auswahl mehrerer Blöcke, die Verwendung mehrerer Cursor beim Bearbeiten, Themen und das Debugging-Protokoll DAP (Debug Adapter Protocol).
  • Die in Rust geschriebene Servo-Browser-Engine hat Unterstützung für einen dunklen Designmodus hinzugefügt. Die Größe des ServoShell-Browsers wurde um 20 % reduziert. Die Unterstützung für Web-Spezifikationen wurde auf die Möglichkeit ausgeweitet, sich in Discord anzumelden und Nachrichten zu lesen (das Versenden von Nachrichten ist noch nicht möglich).
  • Mozilla hat das Uniffi for React Native-Toolkit zum Erstellen von Modulen für React Native in der Rust-Sprache eingeführt.
  • Die Leistung von PNG-Bildkodierern wurde getestet. Rust-Decoder (png, zune-png, wuffs) erwiesen sich als schneller als C-Decoder (libpng, spng, stb_image). Beispielsweise übertraf das Crate-PNG-Paket (image-rs) libpng auf einem x1.8-System um das 86-fache und auf einem ARM-System um das 1.5-fache. image-rs: 375.401 MP/s (Durchschnitt) 318.632 MP/s (Geomean) zune-png: 376.649 MP/s (Durchschnitt) 302.529 MP/s (Geomean) Wuffs: 376.205 MP/s (Durchschnitt) 287.181 MP/s ( geomean) libpng: 208.906 MP/s (Durchschnitt) 173.034 MP/s (Geomean) spng: 299.515 MP/s (Durchschnitt) 235.495 MP/s (Geomean) stb_image: 234.353 MP/s (Durchschnitt) 171.505 MP/s (Geomean)

Source: opennet.ru

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