Das Rust-Entwicklungsteam freut sich, die Veröffentlichung einer neuen Version von Rust, 1.33.0, bekannt zu geben. Rust ist eine Programmiersprache, mit der jeder zuverlässige und effiziente Software erstellen kann.
Wenn Sie eine frühere Version von Rust mit rustup
installiert rustup
, müssen Sie nur Folgendes tun, um Rust auf Version 1.33.0 zu aktualisieren:
$ rustup update stable
Wenn Sie rustup
noch nicht installiert rustup
, können Sie es von der entsprechenden Seite unserer Website installieren . Detaillierte Versionshinweise für Rust 1.33.0 sind auf GitHub verfügbar.
Was ist in der stabilen Version 1.33.0 enthalten
Wesentliche Verbesserungen dieser Version: Deutliche Erweiterung der const fn
und Stabilisierung der neuen Pin-API.
Erweiterung der Funktionen von const fn
const fn
jetzt viel mehr , nämlich:
- bedingungsloser (unwiderlegbarer) Mustervergleich (zum Beispiel
const fn foo((x, y): (u8, u8)) { ... }
) let
Bindungen (z. B. let x = 1;
)- veränderbare
let
Bindungen (z. B. let mut x = 1;
) - Zuweisungsausdrücke (zum Beispiel
x = y
) und Zuweisungsoperatoren (zum Beispiel x += y
), einschließlich Zuweisung zu Projektionen (zum Beispiel ein Strukturfeld oder das Ergebnis eines Indexierungsoperators - x[3] = 42
) - Ausdrucksanweisungen (z. B.
3;
)
Jetzt können Sie "const unsafe fn" von "const fn" aus aufrufen , zum Beispiel:
const unsafe fn foo() -> i32 { 5 } const fn bar() -> i32 { unsafe { foo() } }
Dank dieser Verbesserungen wurde es möglich, eine Konstante einer großen Anzahl von Funktionen der Standardbibliothek zu deklarieren. Sie sind unten im Bibliotheksbereich aufgeführt.
Pin API
Diese Ausgabe führt einen neuen Mechanismus in die eingeführte Sprache ein Typ std :: pin :: Pin und Markertyp Unpin . Die Hauptidee ist in der Dokumentation "std :: pin" des Moduls ausführlich beschrieben:
Manchmal kann es nützlich sein, die Bewegung eines Objekts zu verbieten, d.h. garantieren die Unveränderlichkeit seiner Adresse im Speicher. Das Hauptszenario für die Verwendung dieser Funktion sind selbstreferenzierende Strukturen, da das Verschieben solcher Objekte zu ungültigen Zeigern führt, die zu undefiniertem Verhalten (UB) führen können.
Pin<P>
stellt sicher, dass das Objekt, auf das von einem Zeiger vom Typ P
verwiesen wird, eine feste Position im Speicher hat, d. H. Er kann nicht bewegt werden und sein Gedächtnis kann nicht befreit werden. Solche Werte werden als "fixiert" bezeichnet.
Es wird erwartet, dass dieser Mechanismus hauptsächlich von den Autoren der Bibliotheken verwendet wird, daher werden wir jetzt nicht näher auf die Details eingehen (die in der Dokumentation unter dem obigen Link zu finden sind). Die Stabilisierung dieser API ist jedoch ein wichtiges Ereignis für alle Rust-Benutzer, da dies ein wichtiger Schritt in Richtung des mit Spannung erwarteten async
/ await
. Der Status der verbleibenden Arbeit in dieser Richtung kann unter areweasyncyet.rs überwacht werden .
Importieren als "_"
Jetzt können Sie Entitäten als "_" importieren . Auf diese Weise können Sie die Typimplementierung importieren, ohne ihren Namen in den aktuellen Namespace einzugeben. Beispiel:
use std::io::Read as _;
Weitere Informationen finden Sie in den Versionshinweisen.
Stabilisierung der Standardbibliothek
Hier ist eine Liste von allem, was konstant geworden ist:
- Die Methoden overflowing_ {add, sub, mul, shl, shr} aller numerischen Typen sind jetzt konstant.
- Die Methoden rotate_left, rotate_right und wrapping_ {add, sub, mul, shl, shr} aller numerischen Typen sind jetzt konstant.
- Die Methoden is_positive und is_negative aller vorzeichenbehafteten numerischen Typen sind jetzt konstant.
- Die get-Methode aller NonZero-Typen ist jetzt konstant.
- Die Methoden count_ones, count_zeros, führenden_zeros, trailing_zeros, swap_bytes, from_be, from_le, to_be, to_le aller numerischen Typen sind jetzt konstant.
- Die Methode Ipv4Addr :: new ist jetzt konstant.
Darüber hinaus werden die folgenden APIs stabilisiert:
Weitere Informationen finden Sie in den Versionshinweisen.
Frachtverbesserungen
Cargo setzt die Kiste jetzt wieder zusammen, wenn eine ihrer Dateien während des ersten Builds geändert wurde.
Weitere Informationen finden Sie in den Versionshinweisen.
Crates.io
Wie bereits angekündigt , benötigt crates.io ab dieser Version eine Bestätigungs-E-Mail-Adresse, um Kisten zu veröffentlichen. Ab 2019-03-01 00:00 UTC schlägt die Implementierung der cargo publish
mit Konten ohne bestätigte E-Mail fehl.
Dies ist erforderlich, um die DMCA- Anforderungen zu erfüllen. Wenn Sie die Warnungen, die die Fracht in den letzten Versionen geschrieben hat, nicht bemerkt haben, gehen Sie zu crates.io/me , um Ihre E-Mail anzugeben und zu bestätigen. Diese Postanschrift wird niemals veröffentlicht und ausschließlich für die direkte Funktionalität von crates.io verwendet.
Entwickler 1.33.0
Viele Leute zusammen haben Rust 1.33 erstellt. Ohne jeden von Ihnen hätten wir die Arbeit nicht abschließen können. Vielen Dank!