Programmiersprache: Rust 1.34 erlaubt Alternativen zu crates.io

Entwickler sind im aktuellen Rust-Release nicht mehr an die zentrale Cargo-Registry gebunden.

In Pocket speichern vorlesen Druckansicht 1 Kommentar lesen
Programmiersprache: Rust 1.34 erlaubt Alternativen zu crates.io
Lesezeit: 3 Min.

Mozilla hat Rust 1.34 veröffentlicht und sich dabei weniger auf sprachliche Neuerungen konzentriert. Dafür lassen sich mit dem Paketmanager Cargo nun auch Module verwalten, die nicht öffentlich auf crate.io abgelegt sind. Außerdem gelten die Traits TryFrom und TryInto nun als stabil.

Für viele Entwickler ist die augenscheinlichste Neuerung, dass sie ihre Module, die in Rust Crates heißen, mit Hausmitteln von Rust auf anderen Registrys als crates.io verwalten können. Das ist vor allem für diejenigen interessant, die proprietären Code in Modulen ablegen wollen, die nicht öffentlich zugänglich sein sollen. Eigene Registries lassen sich mit der offiziellen kombinieren, wobei in crates.io abgelegte Module freilich keine Dependencies zu Crates in privaten Registries aufweisen dürfen.

Entwickler definieren den Ort zur Ablage der Module jenseits von crates.io in der Cargo-Konfiguration innerhalb einer [registries]-Sektion. Abhängigkeiten von dort abgelegten Modulen legen sie in der [dependencies]-Sektion der Cargo.toml-Datei folgendermaßen fest:

other-crate = { version = "1.0", registry = "my-registry" }

Die meisten Ergänzungen an der Programmiersprache im aktuellen Release werden viele Entwickler kaum wahrnehmen. So ist der ?-Operator nun für alle Dokumentationstest erlaubt, also das testweise Ausführen von Beispielen aus der Dokumentation, auch wenn sie keine explizite Hauptfunktion fn main() aufweisen.

Eine weitere Neuerung betrifft Makros oder genauer die dafür definierten Helferattribute. Diese dürfen nun wie Makros selbst eine Aneinanderreihung von Tokens aufweisen. Bis zum vorherigen Release waren Token-Streams nicht erlaubt und mussten als Strings definiert sein. In Rust 1.34 dürfen Attribute statt wie bisher beispielsweise als #[range("0..10")] schlicht als #[range(0..10)] definiert sein. Im Interesse einer konsistenten Handhabung sollten Entwickler ihre Crates darauf überprüfen, ob sie entsprechende Zeichenketten definieren, die sie nun zu Token-Streams umformen können.

Schließlich sind die beiden Traits std::convert::TryFrom und std::convert::TryInto nun stabilisiert. Beide sind für Typumwandlungen gedacht, die potenziell Fehler oder Probleme verursachen können. Beispielsweise läuft die Umwandlung von i64 in i32, solange glatt, wie der 64-Bit-Integer-Wert zwischen -2_147_483_648 und 2_147_483_647 liegt, erfordert aber ansonsten eine Fehlerbehandlung.

Weitere Details zu Rust 1.34 wie die nun als überholt (deprecated) geltende fn before_exec lassen sich dem Rust-Blog entnehmen. Eine vollständige Übersicht der Änderungen und Stabilisierungsmaßnahmen sind in den Release Notes aufgeführt. Auf der Tools-Seite findet sich ein Installationswerkzeug für Mozillas Rust. Das Repository auf GitHub enthält zudem unter anderem den Sourcecode für den Compiler und die Standardbibliothek sowie eine Dokumentation. (rme)