Veröffentlichung der Programmiersprache Rust 1.44

Veröffentlicht Veröffentlichung der Systemprogrammiersprache Rost 1.44gegründet vom Mozilla-Projekt. Die Sprache konzentriert sich auf eine sichere Speicherverwaltung, bietet eine automatische Speicherverwaltung und bietet die Möglichkeit, eine hohe Jobparallelität zu erreichen und gleichzeitig die Verwendung eines Garbage Collectors zu vermeiden Laufzeit.

Die automatische Speicherverwaltung von Rust bewahrt den Entwickler vor Fehlern bei der Manipulation von Zeigern und schützt vor Problemen, die durch Speichermanipulation 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, die Assemblierung sicherzustellen und Abhängigkeiten zu verwalten, entwickelt das Projekt einen Paketmanager Kastenwagen, wodurch Sie mit einem Klick auf die Bibliotheken zugreifen können, die Sie für das Programm benötigen. Ein Repository wird zum Hosten von Bibliotheken unterstützt Kisten.io.

Im Text der Ankündigung der neuen Version mischten sich die Rust-Entwickler in die Politik ein und weigerten sich aus Solidarität mit den Demonstranten gegen Polizeigewalt trotzig, eine vollständige Rezension der Änderungen in Rust 1.44 zu veröffentlichen, was darauf hindeutete, dass dieses Thema wichtiger sei als die Austausch von technischem Wissen. Hauptsächlich Innovationen:

  • Der Befehl „Cargo Tree“ ist in den Cargo-Paketmanager integriert, der ein baumartiges Abhängigkeitsdiagramm anzeigt. Außerdem wurde die Option „--duplicates“ („cargo tree -d“) hinzugefügt, mit der Sie Abhängigkeiten in verschiedenen Versionen desselben Pakets auswerten können.

    mdbook v0.3.2 (/Users/src/rust/mdbook)
    ├── Ammoniak v3.0.0
    │ ├── html5ever v0.24.0
    │ │ ├── log v0.4.8
    │ │ │ └── cfg-if v0.1.9
    │ │ ├── mac v0.1.1
    │ │ └── markup5ever v0.9.0
    │ │ ├── log v0.4.8 (*)
    │ │ ├── phf v0.7.24
    │ │ │ └── phf_shared v0.7.24
    │ │ │ ├── Siphasher v0.2.3
    │ │ │ └── Unicase v1.4.2
    │ │ │ [Build-Abhängigkeiten] │ │ │ └── version_check v0.1.5
    ...

  • Für Anwendungen, die nicht an std ("#![no_std]") gebunden sind, ist Unterstützung für asynchrone Programmiermethoden implementiert, die auf der Funktion "async", dem Block async move { ... } und dem Operator ".await" basieren Erleichtert das Schreiben des Hauptbefehlsstroms für nicht blockierende Handler.
  • Dem Parser wurde Unterstützung für ein erweiterbares Modulhierarchie-Definitionsschema hinzugefügt. Das folgende Konstrukt erzeugt beispielsweise keinen Fehler, obwohl das Modul „foo/bar/baz.rs“ tatsächlich fehlt (semantisch ist das Konstrukt immer noch ungültig und kann einen Fehler verursachen, aber die Änderungen können gesehen und analysiert werden auf Makroebene und bedingter Kompilierung):

    #[cfg(FALSE)] mod foo {
    Mod-Leiste {
    modbaz;
    }
    }

  • Der Rustc-Compiler hat die Möglichkeit hinzugefügt, das Flag „-C codegen-units“ im inkrementellen Modus zu verwenden. Die Implementierung von Catch_unwind wurde neu gestaltet, was sich nun nicht auf die Leistung auswirkt, wenn der Abwickelvorgang deaktiviert ist und keine Ausnahmen ausgelöst werden.
  • Bietet Unterstützung der dritten Ebene für die Plattformen aarch64-unknown-none, aarch64-unknown-none-softfloat, arm64-apple-tvos und x86_64-apple-tvos. Die dritte Ebene beinhaltet Basisunterstützung, jedoch ohne automatisierte Tests und Veröffentlichung offizieller Builds.
  • Ein neuer Teil der API wurde in die Kategorie „stabil“, einschließlich stabilisiert, überführt
    PathBuf::with_capacity,
    PathBuf::capacity,
    PathBuf::clear,
    PathBuf::reserve,
    PathBuf::reserve_exact,
    PathBuf::shrink_to_fit,
    {f32|f64}::to_int_unchecked,
    Layout::align_to
    Layout::pad_to_align,
    Layout::array und
    layout::extend.

  • Erweiterte Funktionen der Standardbibliothek:
    • Es wurde eine spezielle Variante von „vec![]“ hinzugefügt, die sich direkt in Vec::new() widerspiegelt und die die Verwendung von „vec![]“ im Kontext anstelle von Konstanten ermöglicht.
    • Trait-Implementierung (impl) zu „convert::Infallible“ hinzugefügt Hasch.
    • OsString implementiert intelligente Zeiger DerefMut и IndexMut, gibt „&mut OsStr“ zurück.
    • Unterstützung für Unicode 13 hinzugefügt.
    • In String implementiert Von<&mutstr>.
    • In IoSlice implementiertes Merkmal Kopieren.
    • Vec implementiert From<[T; N]>.
    • proc_macro::LexError implementiert fmt::Display und Error.
  • Das Attribut „const“, das die Möglichkeit der Verwendung in jedem Kontext anstelle von Konstanten bestimmt, wird in den Methoden from_le_bytes, to_le_bytes, from_be_bytes, to_be_bytes, from_ne_bytes und to_ne_bytes für alle Integer-Typen verwendet.
  • Unterstützung für die Generierung statischer Bibliotheken im „.a“-Format anstelle von „.lib“ für GNU-Plattformen für Windows hinzugefügt.
  • Die Mindestanforderungen für LLVM wurden auf LLVM 8 angehoben.

Source: opennet.ru

Kommentar hinzufügen