Veröffentlichung der Programmiersprache Rust 1.47

Veröffentlicht Version 1.47 der Systemprogrammiersprache Rust, gegründet vom Mozilla-Projekt. Die Sprache konzentriert sich auf die Speichersicherheit, bietet eine automatische Speicherverwaltung und bietet eine Möglichkeit, eine hohe Aufgabenparallelität ohne Verwendung zu erreichen Müllsammler и Laufzeit (Die Laufzeit läuft auf die grundlegende Initialisierung und Wartung der Standardbibliothek hinaus).

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. Ein Repository wird zum Hosten von Bibliotheken unterstützt Kisten.io.

Haupt- Innovationen:

  • Unterstützung für Typen implementiert Arrays alle Größen. Da bisher keine generischen Funktionen für alle ganzzahligen Werte definiert werden konnten, bot die Standardbibliothek integrierte Merkmalsunterstützung nur für Arrays mit einer Größe von bis zu 32 Elementen (die Merkmale für jede Größe wurden statisch definiert). Dank der Schaffung der Funktionalität konstanter Generika („const generics“) wurde es möglich, generische Funktionen für jede Array-Größe zu definieren, sie sind jedoch noch nicht in den stabilen Sprachfunktionen enthalten, obwohl sie im Compiler implementiert sind und sind Jetzt beteiligt in der Standardbibliothek für Array-Merkmale beliebiger Größe.

    Das folgende Konstrukt in Rust 1.47 gibt beispielsweise den Inhalt eines Arrays aus, obwohl es zuvor zu einem Fehler geführt hätte:

    fn main() {
    sei xs = [0; 34];

    println!("{:?}", xs);
    }

  • Bereitstellung der Ausgabe kürzerer Spuren (Backtrace), Ausgabe in Notsituationen. Elemente, die in den meisten Situationen nicht von Interesse sind, aber die Ausgabe überladen und die Aufmerksamkeit von den Hauptursachen des Problems ablenken, werden aus der Verfolgung ausgeschlossen. Um einen vollständigen Trace zurückzugeben, können Sie die Umgebungsvariable „RUST_BACKTRACE=full“ verwenden. Zum Beispiel für den Code

    fn main() {
    Panik!();
    }

    Bisher wurde der Trace in 23 Stufen ausgegeben, jetzt wird er auf reduziert
    3 Schritte, die es Ihnen ermöglichen, das Wesentliche sofort zu erfassen:

    Thread „main“ geriet bei „explizite Panik“ in Panik, src/main.rs:2:5
    Stack-Backtrace:
    0: std::panicking::begin_panic
    unter /rustc/d…d75a/library/std/src/panicking.rs:497
    1: Spielplatz::main
    unter ./src/main.rs:2
    2: core::ops::function::FnOnce::call_once
    unter /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Der Rustc-Compiler wurde für die Erstellung mit aktualisiert LLVM 11 (Rost verwendet LLVM als Backend für Codegenerierung). Gleichzeitig bleibt die Fähigkeit zum Erstellen mit älteren LLVMs bis Version 8 erhalten, jedoch standardmäßig (in rust-lang/llvm-project) verwendet jetzt LLVM 11. LLVM 11 wird voraussichtlich in den kommenden Tagen veröffentlicht.
  • Auf der Windows-Plattform bietet der Rustc-Compiler Unterstützung für die Aktivierung von Kontrollfluss-Integritätsprüfungen (Control Flow Guard), die mit dem Flag „-C control-flow-guard“ aktiviert werden. Auf anderen Plattformen wird dieses Flag vorerst ignoriert.
  • Ein neuer Teil der API wurde in die Kategorie „stabil“, einschließlich stabilisiert, überführt
    Ident::new_raw,
    Range::is_empty,
    RangeInclusive::is_empty,
    Ergebnis::as_deref,
    Ergebnis::as_deref_mut,
    Vec::leck,
    pointer::offset_from,
    f32::TAU und
    f64::TAU.

  • Das Attribut „const“, das die Möglichkeit seiner Verwendung in jedem Kontext anstelle von Konstanten bestimmt, wird in den Methoden verwendet:
    • neu für alle ganzen Zahlen außer Null;
    • geprüfte_add, geprüfte_sub, geprüfte_mul, geprüfte_neg, geprüfte_shl, geprüfte_shr, saturating_add, saturating_sub und saturating_mul für alle ganzen Zahlen;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace und is_ascii_control für die Typen char und u8.
  • Für FreeBSD beteiligt Toolkit von FreeBSD 11.4 (FreeBSD 10 unterstützt LLVM 11 nicht).

Source: opennet.ru

Kommentar hinzufügen