Programmiersprache Rust 1.62 kann Kernel für x86-64 bauen
![](https://heise.cloudimg.io/width/700/q75.png-lossy-75.webp-lossy-75.foil1/_www-heise-de_/imgs/18/3/5/6/8/8/2/1/Rust.jpg-7e8feee13c67deee.jpeg)
(Bild: Callum Bainbridge / Shutterstock.com)
Neben der Ergänzung für Bare-Metal-Systeme bietet das Release schlankere Mutexes unter Linux und erlaubt Standardvorgaben für Enums.
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.
Ohne Betriebssystem
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 [1]. 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
[2] 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.
Abhängigkeiten und Standards
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,
}
Schlankere Blockade
Unter Linux hat das Rust-Team die Implementierung für Mutexes und Konstrukte zum Verwalten von Locks bei der asynchronen Programmierung [3] 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.
Lesen Sie auch
Ferris Talk #4: Asynchrone Programmierung in Rust
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 [4], 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 [5] separat verfügbar.
(rme [6])
URL dieses Artikels:
https://www.heise.de/-7159459
Links in diesem Artikel:
[1] https://doc.rust-lang.org/rustc/platform-support.html
[2] https://docs.rust-embedded.org/book/intro/no-std.html
[3] https://www.heise.de/news/Programmiersprache-Rust-Arbeitsgruppe-zielt-auf-strahlende-asynchrone-Zukunft-5992475.html
[4] https://www.heise.de/news/Programmiersprache-Rust-verteidigt-seit-sechs-Jahren-die-Spitzenposition-7152483.html
[5] https://www.rust-lang.org/tools/install
[6] mailto:rme@ix.de
Copyright © 2022 Heise Medien