Programmiersprache Rust 1.62 kann Kernel für x86-64 bauen

Neben der Ergänzung für Bare-Metal-Systeme bietet das Release schlankere Mutexes unter Linux und erlaubt Standardvorgaben für Enums.

Lesezeit: 3 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 5 Beiträge

(Bild: Callum Bainbridge / Shutterstock.com)

Von
  • Rainald Menge-Sonnentag

Planmäßig im Sechswochentakt ist Rust 1.62 erschienen. Das Release bringt einen neuen Kommandozeilenbefehl, der Pakete um Dependencies erweitert. Die Umstellung der Locks für asynchrone Programme unter Linux spart Speicher, und eine kleine Erweiterung in der Syntax erlaubt die Angabe von Standardwerten für Enums.

Bei den Plattformen hebt das Release das Target x86_64-unknown-none von Tier 3 auf Tier 2. Rust kennt für den Plattform-Support drei Ebenen. Tier 1 beschreibt die vollständige Anbindung und garantiert, dass die Rust-Programme laufen (Guaranteed to Work). Auf der obersten Ebene finden sich Windows, macOS und Linux. Tier 2 bedeutet, dass sich die Binaries erstellen lassen (Guaranteed to Build), aber mangels umfangreicher automatisierter Tests fehlt die Garantie, dass die Binaries vollständig funktionsfähig sind. Für Tier-3-Ziele existiert zwar eine Codebasis, aber es gibt keine offiziellen Builds.

Das Target x86_64-unknown-none ist für x86-64-Anwendungen auf Bare-Metal-Systemen ausgelegt, also beispielsweise zum Entwickeln von Kernels oder Firmware. Es lässt sich nur mit der Konfiguration no_std verwenden, um statt der std-crate nur das Kernpaket core-crate zu verwenden. Letztere verzichtet unter anderem auf alle APIs, die eine Anbindung an ein Betriebssystem voraussetzen.

Pakete, die bei Rust Crates heißen, kennen nun einen neuen Kommandozeilenbefehl: cargo add fügt einer Crate manuell eine Dependency hinzu. Cargo ist der Paketmanager von Rust. Der Befehl ermöglicht die Angabe spezifischer Features über --feature und das Festlegen einer Version, wie folgende Beispiele aus dem Rust-Blog zeigen:

cargo add log
cargo add serde --features derive
cargo add nom@5

Ebenfalls neu ist, dass sich für Enums nun mit #[derive(Default)] eine Standardvariante festlegen lässt. Zum Start dürfen nur Unit-Varianten, die keine Felder haben, als #[default] in den Aufzählungstypen dienen.

#[derive(Default)]
enum HeiseChannel {
    Newsticker,
    Security,
    OpenSource,
    Netze,
    #[default]
    Developer,
}

Unter Linux hat das Rust-Team die Implementierung für Mutexes und Konstrukte zum Verwalten von Locks bei der asynchronen Programmierung umgebaut. Mutex, Condvar und RwLock setzen ab der aktuellen Version unter Linux auf eine futex-basierte Implementierung statt wie bisher auf POSIX Threads in der pthreads-Library. Letztere bieten erweiterte Funktionen, die Rust nicht benötigt, und belegen daher mehr Speicher.

Die neue Implementierung benötigt zum Verwalten des Status eines Mutex mit fünf Byte lediglich ein Achtel der Umsetzung mit pthreads.

Weiterer Neuerungen zur aktuellen Version von Rust, das Stack-Overflow-Nutzer Mitte Juni zum siebten Mal in Folge zur beliebtesten Programmiersprache gekürt haben, lassen sich dem Rust-Blog entnehmen. Wie üblich können Entwicklerinnen und Entwickler, die Rust bereits installiert haben, das aktuelle Release über rustup update stable herunterladen. Für diejenigen, die noch kein Rust verwenden, ist das rustup-Tool auf der Download-Seite separat verfügbar.

(rme)