Veröffentlichung der Programmiersprache Rust 1.60

Die Veröffentlichung der universellen Programmiersprache Rust 1.60, 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 Rustc-Compiler verfügt über ein stabilisiertes LLVM-basiertes System zur Generierung von Abdeckungsdaten, die zur Bewertung der Codeabdeckung während des Tests verwendet werden. Um Abdeckungsdaten während der Montage zu aktivieren, müssen Sie das Flag „-Cinstrument-coverage“ verwenden, indem Sie beispielsweise die Montage mit dem Befehl „RUSTFLAGS=“-C instrument-coverage“ Cargo Build“ starten. Nach dem Ausführen der auf diese Weise kompilierten ausführbaren Datei wird die Datei default.profraw im aktuellen Verzeichnis gespeichert. Zur Verarbeitung können Sie das Dienstprogramm llvm-profdata aus der Komponente llvm-tools-preview verwenden. Die von llvm-profdata verarbeitete Ausgabe kann dann an llvm-cov übergeben werden, um einen kommentierten Codeabdeckungsbericht zu erstellen. Informationen über den Link zum Quellcode werden der untersuchten ausführbaren Datei entnommen, die die notwendigen Daten über die Verbindung zwischen Abdeckungszählern und dem Code enthält. 1| 1|fn main() { 2| 1| println!("Hallo Welt!"); 3| 1|}
  • Im Frachtpaketmanager wurde die Unterstützung für das „-timings“-Flag stabilisiert, was die Erstellung eines detaillierten Berichts über den Fortschritt des Builds und die Ausführungszeit jedes Schritts umfasst. Der Bericht kann hilfreich sein, um die Leistung des Montageprozesses zu optimieren.
  • Der Frachtpaketmanager bietet eine neue Syntax für den Mechanismus der bedingten Kompilierung und Auswahl optionaler Abhängigkeiten, die in der Datei Cargo.toml durch Auflisten einer Liste benannter Eigenschaften im Abschnitt [features] konfiguriert und durch Aktivieren der Eigenschaften während der Paketerstellung aktiviert wird mit dem Flag „--features“. Die neue Version bietet Unterstützung für Abhängigkeiten in separaten Namespaces und schwache Abhängigkeiten.

    Im ersten Fall ist es möglich, Elemente mit dem Präfix „dep:“ innerhalb des Abschnitts „[features]“ zu verwenden, um explizit auf eine optionale Abhängigkeit zu verlinken, ohne diese Abhängigkeit implizit als Feature darzustellen. Im zweiten Fall wurde die Unterstützung für die Markierung mit dem „?“-Zeichen hinzugefügt. („Paketname?/Feature-Name“) optionale Abhängigkeiten, die nur enthalten sein sollten, wenn eine andere Eigenschaft die angegebene optionale Abhängigkeit enthält. Im folgenden Beispiel wird beispielsweise durch die Aktivierung der Eigenschaft „serde“ die Abhängigkeit „serde“ sowie die Eigenschaft „serde“ für die Abhängigkeit „rgb“ aktiviert, jedoch nur, wenn die Abhängigkeit „rgb“ an anderer Stelle aktiviert ist: [Abhängigkeiten] serde = { version = " 1.0.133", optional = true } rgb = { version = "0.8.25", optional = true } [features] serde = ["dep:serde", "rgb?/serde"]

  • Die Unterstützung für die inkrementelle Kompilierung, die in der letzten Version deaktiviert war, wurde zurückgegeben. Der Compilerfehler, der zur Deaktivierung der Funktion führte, wurde behoben.
  • Es wurden einige Probleme behoben, die dazu führten, dass Instant-Timer eine Garantie für ein monotones Timing erhielten, das die Zeit berücksichtigt, die das System im Ruhemodus verbringt. Bisher wurde für den Betrieb des Timers nach Möglichkeit die OS-API genutzt, die problematische Situationen, die die Monotonie der Zeit durchbrechen, wie Hardwareprobleme, den Einsatz von Virtualisierung oder Fehler im Betriebssystem, nicht berücksichtigte.
  • Ein neuer Teil der API wurde in die Kategorie „stabil“ verschoben, einschließlich der Stabilisierung der Methoden und Implementierungen von Merkmalen:
    • Arc::new_symmetric
    • Rc::new_symmetric
    • Slice::EscapeAscii
    • <[u8]>::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
    • Anzeige für io::ErrorKind
    • Von für ExitCode
    • Nicht für ! (Geben Sie „nie“ ein)
    • _Op_Assign<$t>
    • 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 umfasst grundlegende Unterstützung, jedoch ohne automatisierte Tests, Veröffentlichung offizieller Builds oder Prüfung, ob der Code erstellt werden kann.
  • Der Compiler wurde auf die Verwendung von LLVM 14 umgestellt.

Darüber hinaus können Sie Folgendes beachten:

  • Unterstützung für das Bootstrapping des Rustc-Compilers mithilfe des Rustc_codegen_gcc-Backends hinzugefügt, wodurch Sie die libgccjit-Bibliothek aus dem GCC-Projekt als Codegenerator in Rustc verwenden können, wodurch Rustc Unterstützung für in GCC verfügbare Architekturen und Optimierungen bereitstellen kann. Compiler-Promotion bedeutet die Möglichkeit, einen GCC-basierten Codegenerator in rustc zu verwenden, um den rustc-Compiler selbst zu erstellen. Praktischerweise ermöglicht Ihnen diese Funktion die Erstellung von Rust-Programmen für Architekturen, die zuvor in rustc nicht unterstützt wurden.
  • Es ist die Veröffentlichung des Toolkits uutils coreutils 0.0.13 verfügbar, in der ein in der Rust-Sprache neu geschriebenes Analogon des GNU Coreutils-Pakets entwickelt wird. Coreutils enthält über hundert Dienstprogramme, darunter sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln und ls. Das Ziel des Projekts besteht darin, eine plattformübergreifende alternative Implementierung von Coreutils zu erstellen, die auf Windows-, Redox- und Fuchsia-Plattformen läuft und unter der freizügigen MIT-Lizenz anstelle der GPL-Copyleft-Lizenz vertrieben werden kann.

    Die neue Version verfügt über verbesserte Implementierungen vieler Dienstprogramme, einschließlich einer deutlich verbesserten Kompatibilität der Dienstprogramme cp, dd, df, split und tr mit ihren Gegenstücken aus dem GNU-Projekt. Online-Dokumentation bereitgestellt. Der Clap-Parser wird zum Parsen von Befehlszeilenargumenten verwendet, wodurch die Ausgabe für das Flag „--help“ verbessert und Unterstützung für Abkürzungen langer Befehle hinzugefügt wurde (Sie können beispielsweise „ls -col“ anstelle von „ls -color“ angeben “).

Source: opennet.ru

Kommentar hinzufügen