Veröffentlichung der Programmiersprache Rust 1.60

Die Veröffentlichung der Programmiersprache Rust 1.60, die ursprünglich von Mozilla entwickelt wurde und nun unter der Schirmherrschaft der unabhängigen Non-Profit-Organisation Rust Foundation weiterentwickelt wird, ist erfolgt. Die Sprache konzentriert sich auf sichere Speicherverwaltung und bietet Werkzeuge für hohen parallelen Aufgabenlauf, ohne dabei auf einen Garbage Collector und eine umfangreiche Runtime angewiesen zu sein (die Runtime beschränkt sich auf die grundlegende Initialisierung und Wartung 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:

  • Im Rust-Compiler rustc wurde das auf LLVM basierende System zur Generierung von Coverage-Daten stabilisiert, welches zur Bewertung der Codeabdeckung während der Tests verwendet wird. Um Coverage-Daten bei der Kompilierung zu aktivieren, muss das Flag „-Cinstrument-coverage“ verwendet werden. Zum Beispiel kann dies mit dem Befehl „RUSTFLAGS=“-C instrument-coverage“ cargo build“ ausgeführt werden. Nach dem Start der auf diese Weise kompilierte ausführbaren Datei wird im aktuellen Verzeichnis eine Datei namens default.profraw gespeichert, die mit dem Tool llvm-profdata aus dem llvm-tools-preview Paket verarbeitet werden kann. Die von llvm-profdata erzeugte Ausgabe kann anschließend an das Programm llvm-cov übergeben werden, um einen annotierten Bericht über die Codeabdeckung zu generieren. Informationen über die Zuordnung zu den Quelltexten stammen aus der untersuchten ausführbaren Datei, die notwendige Daten zur Verknüpfung der Coverage-Zähler mit dem Code enthält.
  • Im Paketmanager Cargo wurde die Unterstützung des Flags „—timings“ stabilisiert, das die Erstellung eines detaillierten Berichts über den Fortschritt der Kompilierung sowie die Ausführungszeit jedes Schrittes umfasst. Dieser Bericht kann hilfreich sein, um die Leistung des Kompilierungsprozesses zu optimieren.
  • Im Paket-Manager Cargo wurde eine neue Syntax für den Mechanismus der bedingten Kompilierung und die Auswahl optionaler Abhängigkeiten eingeführt. Diese kann in der Datei Cargo.toml über eine Aufzählung benannter Eigenschaften im Abschnitt [features] konfiguriert und während des Paketbaus durch Aktivierung der Features mit dem Flag "--features" aktiviert werden. Die neue Version unterstützt nun Abhängigkeiten in separaten Namensräumen sowie schwache (weak) Abhängigkeiten.

    Im ersten Fall wurde die Möglichkeit implementiert, in der Sektion „[features]“ Elemente mit dem Präfix „dep:“ zu verwenden, um eine explizite Bindung an eine optionale Abhängigkeit herzustellen, ohne diese Abhängigkeit implizit als Eigenschaft (feature) darzustellen. Im zweiten Fall wurde die Unterstützung des Markierens mit einem „?“ („package-name?/feature-name“) für optionale Abhängigkeiten hinzugefügt, die nur eingeschlossen werden sollten, wenn eine andere Eigenschaft diese optionale Abhängigkeit umfasst. Zum Beispiel führt das Einschließen der Eigenschaft serde im folgenden Beispiel zu einer Einbeziehung der Abhängigkeit „serde“ sowie der Eigenschaft „serde“ für die Abhängigkeit „rgb“, jedoch nur, wenn irgendwo anders die Abhängigkeit „rgb“ eingeschlossen ist: [dependencies] serde = { version = "1.0.133", optional = true } rgb = { version = "0.8.25", optional = true } [features] serde = ["dep:serde", "rgb?/serde"]

  • Die in der vorherigen Version deaktivierte Unterstützung für inkrementales Kompilieren wurde zurückgegeben. Der Compilerfehler, der die Funktion deaktiviert hat, wurde behoben.
  • Einige Probleme bei der Bereitstellung von Instant-Timern wurden behoben, die eine monotone Zeitberechnung berücksichtigen, bei der die Zeit im Ruhezustand des Systems einbezogen wird. Zuvor wurde für den Timer nach Möglichkeit die OS-API verwendet, die problematische Situationen, die die Monotonie der Zeit beeinträchtigen, wie Hardware-Probleme, Virtualisierung oder Fehler im Betriebssystem, nicht berücksichtigte.
  • Eine neue Reihe von APIs wurde stabilisiert und in die stabile Version überführt, einschließlich stabilisierter Methoden und Implementierungen von Traits:
    • Arc::new_cyclic
    • Rc::new_cyclic
    • slice::EscapeAscii
    • ::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MaybeUninit::assume_init_drop
    • MaybeUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • usize::abs_diff
    • Display für io::ErrorKind
    • From für ExitCode
    • Not für ! (Typ „never“)
    • _Op_Assign
    • arch::is_aarch64_feature_detected!
  • Die dritte Unterstützungsebene wurde für die Plattformen mips64-openwrt-linux-musl* und armv7-unknown-linux-uclibceabi (softfloat) implementiert. Die dritte Ebene bedeutet grundlegende Unterstützung, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds und Überprüfung der Möglichkeit der Codekompilierung.
  • Der Compiler wurde auf die Verwendung von LLVM 14 umgestellt.

Darüber hinaus kann Folgendes erwähnt werden:

  • Die Unterstützung für das Bootstrapping des Compilers rustc wurde hinzugefügt, indem der Backend rustc_codegen_gcc verwendet wird, der die Bibliothek libgccjit aus dem GCC-Projekt als Code-Generator in rustc nutzt. Dies ermöglicht rustc, die in GCC verfügbaren Architekturen und Optimierungen zu unterstützen. Unter Bootstrapping des Compilers versteht man die Fähigkeit, rustc einen Code-Generator basierend auf GCC zur Verfügung zu stellen, um den Compiler rustc selbst zu erstellen. Praktisch gesehen ermöglicht diese Funktion das Kompilieren von Rust-Programmen für Architekturen, die zuvor nicht in rustc unterstützt wurden.
  • Die Version des Tools uutils coreutils 0.0.13 ist jetzt verfügbar. In diesem Rahmen wird eine Alternative zu dem GNU Coreutils-Paket entwickelt, die in Rust neu geschrieben wurde. Das Paket coreutils umfasst über hundert Utilities, darunter sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln und ls. Ziel des Projekts ist die Schaffung einer plattformübergreifenden alternativen Implementierung von Coreutils, die auch auf Windows-, Redox- und Fuchsia-Plattformen funktionieren kann, und die Verbreitung unter der permissiven MIT-Lizenz anstelle der Copyleft-Lizenz GPL.

    In der neuen Version wurden die Implementierungen vieler Tools verbessert, insbesondere die Kompatibilität der Tools cp, dd, df, split und tr mit den Entsprechungen aus dem GNU-Projekt. Es steht eine Online-Dokumentation zur Verfügung. Für die Analyse der Kommandozeilenargumente wird der Parser clap verwendet, was die Ausgabe des Flags „—help“ verbessert und die Unterstützung von Abkürzungen für lange Befehle ermöglicht (z. B. kann „ls —col“ anstelle von „ls —color“ verwendet werden).

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