Veröffentlichung der Programmiersprache Rust 1.40

Veröffentlicht Veröffentlichung der Systemprogrammiersprache Rost 1.40gegrü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 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:

  • Es wurde die Möglichkeit hinzugefügt, Strukturen (Struct) und Aufzählungen (Enum mit Variant-Block) mithilfe des Attributs zu markieren.#[non_exhaustive]", welche ermöglicht Fügen Sie in Zukunft neue Felder und Optionen zu deklarierten Strukturen und Aufzählungen hinzu. Beispielsweise können Entwickler von Modulen, die über Strukturen mit öffentlich deklarierten Feldern verfügen, „#[non_exhaustive]“ verwenden, um Strukturen zu markieren, denen möglicherweise in Zukunft neue Felder hinzugefügt werden. Bisher war der Entwickler in dieser Situation gezwungen, zwischen der privaten Deklaration von Feldern und der Bindung an eine unveränderliche Liste von Feldern zu wählen. Das neue Attribut hebt diese Einschränkung auf und ermöglicht Ihnen das zukünftige Hinzufügen neuer Felder, ohne dass das Risiko besteht, dass zuvor kompilierter externer Code beschädigt wird. In Crate-Paketen ist beim Abgleichen von Optionen im Abschnitt „match“ eine explizite Definition der Maske „_ => {...}“ erforderlich, die mögliche zukünftige Felder abdeckt, andernfalls wird beim Hinzufügen neuer Felder ein Fehler angezeigt.
  • Hinzugefügt von die Möglichkeit, das prozedurale Makro mac!() in einem Typkontext aufzurufen. Beispielsweise können Sie jetzt „type Foo = expand_to_type!(bar);“ schreiben, wenn „expand_to_type“ ein prozedurales Makro ist.
  • In „extern { ... }“-Blöcken hinzugefügt die Möglichkeit, prozedurale und Attributmakros zu verwenden, einschließlich „bang!()“-Makros, zum Beispiel:

    Makroregeln! make_item { ($name:ident) => { fn $name(); } }

    extern {
    make_item!(alpha);
    make_item!(beta);
    }

    externes „C“ {
    #[my_identity_macro] fn foo();
    }

  • In Makros umgesetzt Möglichkeit, „macro_rules!“-Elemente zu generieren. Generieren von „macro_rules!“ sowohl in funktionsähnlichen Makros („mac!()“) als auch in Makros in Form von Attributen („#[mac]“) möglich.
  • Im $m:meta-Mapping-Element hinzugefügt Unterstützung für beliebige Token-Aufzählungswerte („[TOKEN_STREAM]“, „{TOKEN_STREAM}“ und „(TOKEN_STREAM)“), zum Beispiel:

    Makroregeln! Accept_meta { ($m:meta) => {} }
    Accept_meta!( my::path );
    Accept_meta!( my::path = "lit" );
    Accept_meta!( my::path ( abc ) );
    Accept_meta!( my::path [ abc ] );
    Accept_meta!( my::path { abc } );

  • Im Rust 2015-Modus ist die Fehlerausgabe für Probleme aktiviert, die bei der Überprüfung der Ausleihe von Variablen (Borrow Checker) mithilfe der NLL-Technik (Non-Lexical Lifetimes) festgestellt wurden. Bisher wurden Warnungen bei der Ausführung im Rust 2018-Modus durch Fehler ersetzt.
    Nachdem die Änderung auf den Rust 2015-Modus ausgeweitet wurde, konnten Entwickler dies endlich tun Flucht vom alten Kreditprüfer.

    Erinnern wir uns daran, dass das Verifizierungssystem, das auf einem neuen Mechanismus zur Berücksichtigung der Lebensdauer geliehener Variablen basiert, es ermöglichte, einige Probleme zu identifizieren, die vom alten Verifizierungscode unbemerkt blieben. Da Fehlerausgaben bei solchen Prüfungen die Kompatibilität mit zuvor funktionierendem Code beeinträchtigen könnten, wurden zunächst Warnungen anstelle von Fehlern ausgegeben.

  • Für die Funktion is_power_of_two (für vorzeichenlose Ganzzahlen) wird das Attribut „const“ verwendet, das die Möglichkeit der Verwendung in jedem Kontext anstelle von Konstanten festlegt.
  • Ein neuer Teil der API wurde in die stabile Kategorie verschoben, einschließlich des todo!()-Makros und der Methoden „slice::repeat“, „mem::take“, „BTreeMap::get_key_value“, „HashMap::get_key_value“ wurden stabilisiert.
    Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32, f64}::from_be_bytes, {f32,f64}::from_le_bytes und {f32,f64}::from_ne_bytes.

  • Im Paketmanager Fracht
    umgesetzt Zwischenspeichern von Compiler-Warnungen auf der Festplatte. Die Option „Frachtmetadaten“ wurde zum Befehl „Frachtmetadaten“ hinzugefügt--filter-plattform„, um in der Spalte „Abhängigkeitsauflösung“ nur Pakete anzuzeigen, die an die angegebene Zielplattform gebunden sind. Konfigurationsoption http.ssl-version hinzugefügt, um gültige TLS-Versionen zu definieren.
    Möglichkeit hinzugefügt, den Abschnitt zu veröffentlichen „Entwicklungsabhängigkeiten" ohne Angabe des Schlüssels „version“.

  • Der Rustc-Compiler bietet Unterstützung der dritten Ebene für die Zielplattformen thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 und mips64el-unknown-linux-muslabi64. Die dritte Ebene umfasst Basisunterstützung, jedoch ohne automatisierte Tests und Veröffentlichung offizieller Builds.

Source: opennet.ru

Kommentar hinzufügen