Veröffentlichung der Programmiersprache Rust 1.47

Release 1.47 der vom Mozilla-Projekt gegründeten Systemprogrammiersprache Rust wurde veröffentlicht. Die Sprache konzentriert sich auf Speichersicherheit, bietet automatische Speicherverwaltung und bietet die Möglichkeit, eine hohe Aufgabenparallelität zu erreichen, ohne einen Garbage Collector oder eine Laufzeit zu verwenden (die Laufzeit beschränkt sich auf die grundlegende Initialisierung und Wartung der Standardbibliothek).

Die automatische Speicherverwaltung von Rust eliminiert Fehler 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, Nullzeiger-Dereferenzierungen, Pufferüberläufe usw. Um Bibliotheken zu verteilen, die Assemblierung sicherzustellen und Abhängigkeiten zu verwalten, entwickelt das Projekt den Cargo-Paketmanager. Das crates.io-Repository wird zum Hosten von Bibliotheken unterstützt.

Wichtigste Neuerungen:

  • Unterstützung für Merkmale für Arrays beliebiger Größe implementiert. 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 const generics-Funktionalität wurde es möglich, generische Funktionen für jede Array-Größe zu definieren, sie sind jedoch noch nicht in den stabilen Funktionen der Sprache enthalten, obwohl sie im Compiler implementiert sind und jetzt in der Standardbibliothek verwendet werden für Array-Typen 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, nun wird er auf 3 Stufen reduziert, sodass Sie das Wesentliche sofort erfassen können:

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 aktualisiert, um mit LLVM 11 zu erstellen (Rust verwendet LLVM als Backend für die Codegenerierung). Gleichzeitig bleibt die Fähigkeit zum Erstellen mit altem LLVM bis Version 8 erhalten, standardmäßig wird jedoch (in rust-lang/llvm-project) LLVM 11 verwendet. Die Veröffentlichung von LLVM 11 wird in Kürze erwartet Tage.
  • 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 stabile Kategorie übertragen, einschließlich stabilisierter 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 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 wird das Toolkit von FreeBSD 11.4 verwendet (FreeBSD 10 unterstützt LLVM 11 nicht).

Entnommen aus opennet.ru

Source: linux.org.ru

Kommentar hinzufügen