Veröffentlichung der Programmiersprache Rust 1.47

Veröffentlicht Release 1.47 der Programmiersprache Rust, entwickelt von Mozilla. Die Sprache konzentriert sich auf sichere Speicherverwaltung, bietet automatisches Speichermanagement und ermöglicht ein hohes Maß an Parallelität bei der Ausführung von Aufgaben, ohne auf Garbage Collector und Laufzeit zurückgreifen zu müssen (das Runtime reduziert sich auf die grundlegende Initialisierung und die Begleitung der Standardbibliothek).

Die automatische Speicherverwaltung in Rust befreit Entwickler von Fehlern bei der Pointer-Manipulation und schützt vor Problemen, die aus der niedrig-leveligen Speicherbearbeitung entstehen, wie beispielsweise der Zugriff auf den Speicher nach dessen Freigabe, das Dereferenzieren von Nullzeigern, Bufferüberläufe und ähnliches. Zur Verbreitung von Bibliotheken, zur Sicherstellung des Builds und zur Verwaltung der Projektabhängigkeiten wird ein Paketmanager entwickelt. Cargo. Für die Bereitstellung von Bibliotheken wird ein Repository unterstützt. crates.io.

Haupt Neuheiten:

  • Die Unterstützung von Traits für Arrays beliebiger Größe wurde implementiert. Zuvor bot die Standardbibliothek aufgrund der Unmöglichkeit, generische Funktionen für alle Ganzzahlen zu definieren, eingebaute Unterstützung für Traits nur für Arrays an, deren Größe 32 Elemente nicht überschritt (Traits für jede Größe wurden statisch definiert). Durch die Einführung von konstanten Generics („const generics“) wurde es möglich, generische Funktionen für Arrays beliebiger Größe zu definieren, obwohl sie noch nicht Bestandteil der stabilen Sprachfunktionen sind, aber bereits im Compiler implementiert sind und nun eingesetzt in der Standardbibliothek für Traits von Arrays beliebiger Größe verfügbar sind.

    Zum Beispiel führt die folgende Konstruktion in Rust 1.47 zur Ausgabe des Inhalts des Arrays, während sie zuvor zu einem Fehler geführt hätte:

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

    println!(«{:?}», xs);
    }

  • Es wird nun eine kürzere Rückverfolgen (Backtrace) bei Ausnahmen ausgegeben. Elemente, die in den meisten Situationen nicht von Interesse sind und die Ausgabe überladen sowie von den Hauptursachen des Problems ablenken, werden aus der Rückverfolgung ausgeschlossen. Für eine vollständige Rückverfolgung kann die Umgebungsvariable „RUST_BACKTRACE=full“ verwendet werden. Zum Beispiel für den Code

    fn main() {
    panic!();
    }

    früher wurden 23 Schritte für die Rückverfolgung ausgegeben, nun wird sie auf
    3 Schritte reduziert, die die Essenz sofort erfassen:

    thread ‘main’ panicked at ‘explicit panic’, src/main.rs:2:5
    stack backtrace:
    0: std::panicking::begin_panic
    at /rustc/d…d75a/library/std/src/panicking.rs:497
    1: playground::main
    at ./src/main.rs:2
    2: core::ops::function::FnOnce::call_once
    at /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Der Compiler rustc wurde auf eine Version aktualisiert, die LLVM 11 (Rust nutzt LLVM als Backend für Code-Generierung). Dabei bleibt die Möglichkeit, mit älteren LLVM-Versionen bis einschließlich Version 8 zu kompilieren, aber standardmäßig (in rust-lang/llvm-project) wird jetzt LLVM 11 verwendet. Die Veröffentlichung von LLVM 11 wird in den nächsten Tagen erwartet.
  • Auf der Windows-Plattform unterstützt der Compiler rustc die Aktivierung von Kontrollflussüberprüfungen (Control Flow Guard) mit dem Flag „-C control-flow-guard“. Auf anderen Plattformen wird dieses Flag derzeit ignoriert.
  • Eine neue Charge von APIs wurde in die stabile Version überführt, einschließlich der Stabilisierung von
    Ident::new_raw,
    Range::is_empty,
    RangeInclusive::is_empty,
    Result::as_deref,
    Result::as_deref_mut,
    Vec::leak,
    pointer::offset_from,
    f32::TAU und
    f64::TAU.
  • Das Kennzeichen „const“, welches die Verwendung in jedem Kontext anstelle von Konstanten ermöglicht, wurde in den folgenden Methoden implementiert:
    • neu für alle nicht-null Ganzzahlen;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub und saturating_mul für alle Ganzzahlen;
    • 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 wurde Werkzeugset von FreeBSD 11.4 (FreeBSD 10 unterstützt LLVM 11 nicht).

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern | ProHoster