Veröffentlichung der Programmiersprache Rust 1.45

Veröffentlicht Release 1.45 der Systemprogrammiersprache Rust, entwickelt von Mozilla. Die Sprache konzentriert sich auf sichere Speicherverwaltung, bietet automatisches Speichermanagement und stellt Mittel zur Verfügung, um hohen Parallelismus bei der Aufgabenbearbeitung zu erreichen, ohne einen Garbage Collector verwenden zu müssen und Laufzeit.

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, der es ermöglicht, die benötigten Bibliotheken für das Programm mit einem Klick zu erhalten. Für die Bereitstellung von Bibliotheken wird das Repository crates.io.

Haupt Neuheiten:

  • Ein langjähriges Problem wurde behoben bei der Ausführung von Typumwandlungen zwischen Ganzzahlen und Fließkommazahlen. Da der Rust-Compiler LLVM als Backend verwendet, wurden Typumwandlungsoperationen über LLVM-Intermediate-Code-Anweisungen wie fptoui, das eine wesentliche Eigenschaft aufweist — unbestimmtes Verhalten, wenn der resultierende Wert nicht in den Zieltyp passt. Zum Beispiel führt die Umwandlung eines Gleitkommawerts von 300 mit dem Typ f32 in einen ganzzahligen Typ u8 zu einem unvorhersehbaren Ergebnis, das auf verschiedenen Systemen variieren kann. Das Problem ist, dass eine solche Eigenschaft in nicht als „unsafe“ gekennzeichnetem Code auftritt.

    Seit Rust 1.45 ist das Verhalten bei Überlauf des Typs streng geregelt, und die Umwandlungsoperation „as“ führt eine Überlaufprüfung durch und wandelt den zu konvertierenden Wert in den maximalen oder minimalen Wert des Zieltyps um (für das oben genannte Beispiel wird der Wert 300 in 255 umgewandelt). Um solche Überprüfungen zu deaktivieren, gibt es zusätzliche API-Aufrufe „{f64, f32}::to_int_unchecked“, die im unsafe-Modus arbeiten.

    fn cast(x: f32) -> u8 {
    x as u8
    }

    fn main() {
    let too_big = 300.0;
    let too_small = -100.0;
    let nan = f32::NAN;

    let x: f32 = 1.0;
    let y: u8 = unsafe { x.to_int_unchecked() };

    println!("too_big_casted = {}", cast(too_big)); // Ausgabe 255
    println!("too_small_casted = {}", cast(too_small)); // Ausgabe 0
    println!("not_a_number_casted = {}", cast(nan)); // Ausgabe 0
    }

  • Stabilisierte Nutzung prozeduraler Makros, ähnlich wie Funktionen in Ausdrücken, Vorlagen und Anweisungen. Früher konnten solche Makros nur an bestimmten Stellen im Code (als separater Aufruf, der sich nicht mit anderem Code vermischte) aufgerufen werden. Die Erweiterung der Möglichkeiten zum Aufrufen von funktionsähnlichen Makros war erforderlich, um die Funktionsfähigkeit des Web-Frameworks zu gewährleisten. Rocket in stabilen Versionen von Rust. Zuvor war es notwendig, die experimentelle Funktion „proc_macro_hygiene“, die in stabilen Versionen von Rust nicht verfügbar war, zu aktivieren, um eine zusätzliche Flexibilität bei der Zuordnung von Handlern in Rocket zu erreichen. Nun ist diese Funktionalität in die stabilen Versionen der Sprache eingebaut.
  • Die Verwendung von Bereichen mit dem Typ „char“ zum Durchlaufen von Wertebereichen ist erlaubt (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    for ch in 'a'..='z' {
    print!("{}", ch);
    }
    println!(); // Es wird „abcdefghijklmnopqrstuvwxyz“ ausgegeben

  • Eine neue Charge von APIs wurde in die stabile Version überführt, einschließlich der Stabilisierung von
    Arc::as_ptr,
    BTreeMap::remove_entry,
    Rc::as_ptr,
    rc::Weak::as_ptr,
    rc::Weak::from_raw,
    rc::Weak::into_raw,
    str::strip_prefix,
    str::strip_suffix,
    sync::Weak::as_ptr,
    sync::Weak::from_raw,
    sync::Weak::into_raw,
    char::UNICODE_VERSION,
    Span::resolved_at,
    Span::located_at,
    Span::mixed_site,
    unix::process::CommandExt::arg0.
  • Im Compiler rustc wurde die Unterstützung zur Überschreibung verschiedener Funktionen der Zielplattform durch das Flag „target-feature“ hinzugefügt, zum Beispiel „-C target-feature=+avx2,+fma“. Es wurden auch neue Flags hinzugefügt:
    „force-unwind-tables“ zur Erzeugung von „aufgerollten“ (unwind) Rückruftabellen, unabhängig von der Strategie zur Behandlung von Abstürzen; „embed-bitcode“ zur Steuerung der Einbindung von LLVM-Bitcode in die generierten rlibs. Das Flag „embed-bitcode“ ist standardmäßig in Cargo aktiviert, um die Build-Zeit und den Speicherplatzverbrauch zu optimieren.
  • Der dritte Unterstützungsgrad für die Plattformen mipsel-sony-psp und thumbv7a-uwp-windows-msvc wurde gewährleistet. Der dritte Grad umfasst grundlegende Unterstützung, jedoch ohne automatisierte Tests und die Veröffentlichung offizieller Builds.

speziellen Distribution die Geschichte zum Erstellen eines einfachsten der Anwendung Programms in der Sprache Rust, das über den System-Bootloader startet und bereit ist, selbstständig zu booten anstelle eines Betriebssystems.
Dieser Artikel ist der erste in einer Serie, die die Techniken demonstriert, die bei der Low-Level-Programmierung und der Betriebssystementwicklung gefragt sind.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster