Veröffentlichung der Programmiersprache Rust 1.34

fand statt Veröffentlichung der Systemprogrammiersprache Rost 1.34, entwickelt vom Mozilla-Projekt. Die Sprache konzentriert sich auf die Speichersicherheit, bietet eine automatische Speicherverwaltung und bietet eine Möglichkeit, eine hohe Aufgabenparallelität zu erreichen, ohne einen Garbage Collector oder eine Laufzeit zu verwenden.

Die automatische Speicherverwaltung von Rust befreit den Entwickler von Zeigermanipulationen und schützt vor Problemen, die durch Speichermanipulation auf niedriger Ebene entstehen, wie z. B. After-Free-Speicherzugriffe, Nullzeiger-Dereferenzierungen, Pufferüberläufe und dergleichen. Es wird ein Paketmanager entwickelt, um Bibliotheken zu verteilen, die Assemblierung sicherzustellen und Abhängigkeiten durch das Projekt zu verwalten. 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.

Haupt- Innovationen:

  • Der Cargo-Paketmanager hat Tools hinzugefügt, um mit alternativen Paketregistern zu arbeiten, die mit der öffentlichen Registry von crates.io koexistieren können. Beispielsweise können Entwickler proprietärer Anwendungen jetzt ihre eigene private Registry verwenden, die beim Auflisten von Abhängigkeiten in Cargo.toml verwendet werden kann, und für ihre Produkte ein Versionsmodell ähnlich wie crates.io anwenden und Abhängigkeiten auf beide Crates verweisen. io und in Ihre eigene Registry.

    So fügen Sie externe Registrierungen zu .cargo/config hinzu (befindet sich in $HOME oder im Paketverzeichnis)
    vorgesehen für Abschnitt „[Registrierungen]“ und um eine externe Registrierung zu verwenden, wurde die Option „Registrierung“ in der Beschreibung jeder Abhängigkeit in Cargo.toml angezeigt. Um eine Verbindung zu einer zusätzlichen Registrierung herzustellen, platzieren Sie einfach das Authentifizierungstoken in der Datei ~/.cargo/credentials und führen Sie den Befehl aus
    „cargo login --registry=my-registry“ und um ein Paket zu veröffentlichen –
    „cargo Publish -registry=my-registry“;

  • Vollständige Unterstützung für die Verwendung des „?“-Operators hinzugefügt. bei Tests Ärzte, sodass Sie Beispielcode aus der Dokumentation als Tests verwenden können. Zuvor Betreiber
    „?“ kann zur Behandlung von Fehlern während der Testausführung nur in Gegenwart der Funktion „fn main()“ oder in den Funktionen „#[test]“ verwendet werden;

  • In benutzerdefinierten Attributen, die mithilfe prozeduraler Makros definiert werden zur Verfügung gestellt die Möglichkeit, beliebige Token-Sätze zu verwenden („#[attr($tokens)]“, „#[attr[$tokens]] und #[attr{$tokens}]“). Bisher konnten Elemente nur in einer Baum-/rekursiven Form mit String-Literalen angegeben werden, zum Beispiel „#[foo(bar, baz(quux, foo = „bar“))]“, aber jetzt ist es möglich, Aufzählungen zu verwenden (' #[range(0. .10)]') und Konstruktionen wie „#[bound(T: MyTrait)]“;
  • Stabilisierte Typen (Merkmal) TryFrom и Versuchen Sie es, was Typkonvertierungen mit Fehlerbehandlung ermöglicht. Beispielsweise verwenden Methoden wie from_be_bytes mit Integer-Typen Arrays als Eingabe, aber die Daten liegen häufig im Slice-Typ vor, und die manuelle Konvertierung zwischen Arrays und Slices ist problematisch. Mit Hilfe neuer Merkmale kann die angegebene Operation im laufenden Betrieb durch einen Aufruf von .try_into() ausgeführt werden, zum Beispiel „let num = u32::from_be_bytes(slice.try_into()?)“. Für Konvertierungen, die immer erfolgreich sind (z. B. vom Typ u8 in u32), wurde ein Fehlertyp hinzugefügt Unfehlbar, was eine transparente Nutzung ermöglicht
    TryFrom für alle vorhandenen Implementierungen von „From“;

  • Funktion ist veraltet CommandExt::before_exec, was die Ausführung eines Handlers vor der Ausführung von exec ermöglichte, das im Kontext eines untergeordneten Prozesses ausgeführt wurde, der nach dem fork()-Aufruf geforkt wurde. Unter solchen Bedingungen könnten einige Ressourcen des übergeordneten Prozesses, wie z. B. Dateideskriptoren und zugeordnete Speicherbereiche, dupliziert werden, was zu undefiniertem Verhalten und fehlerhaftem Betrieb von Bibliotheken führen könnte.
    Es wird empfohlen, anstelle von before_exec eine unsichere Funktion zu verwenden CommandExt::pre_exec.

  • Stabilisierte vorzeichenbehaftete und vorzeichenlose atomare Ganzzahltypen mit einer Größe von 8 bis 64 Bit (z. B. AtomicU8) sowie signierte Typen Nicht NullI[8|16|32|64|128].
  • Ein neuer Teil der API wurde in die stabile Kategorie verschoben, einschließlich Any::type_id, Error::type_id, Slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] und SystemTime-Methoden wurden stabilisiert ::checked_[add|sub]. Die Funktionen iter::from_fn und iter::successors wurden stabilisiert;
  • Für alle Integer-Typen sind die Methoden „checked_pow“, „saturating_pow“, „wrapping_pow“ und „overflowing_pow“ implementiert;
  • Es wurde die Möglichkeit hinzugefügt, Optimierungen in der Verknüpfungsphase zu aktivieren, indem die Build-Option „-C linker-plugin-lto“ angegeben wird.

Source: opennet.ru

Kommentar hinzufügen