Das Rust-Entwicklungsteam freut sich, die Veröffentlichung einer neuen Version von Rust: 1.28.0 bekannt zu geben. Rust ist eine Systemprogrammiersprache, die auf Sicherheit, Geschwindigkeit und parallele Codeausführung abzielt.
Wenn Sie eine frühere Version von Rust mit rustup installiert haben, müssen Sie nur Folgendes tun, um Rust auf Version 1.28.0 zu aktualisieren:
$ rustup update stable
Wenn Sie rustup noch nicht installiert haben, können Sie es von der entsprechenden Seite unserer Website installieren . Detaillierte Versionshinweise für Rust 1.28.0 sind auf GitHub verfügbar.
Was ist in der stabilen Version 1.28.0 enthalten
Globale Allokatoren
Mithilfe von Allokatoren erhalten Rust-Programme zur Laufzeit Speicher. Zuvor erlaubte Rust nicht, die Art und Weise der Speicherzuweisung zu ändern, was in einigen Fällen die Verwendung einschränkte. Auf einigen Plattformen wurde jemalloc verwendet, auf anderen ein Systemzuweiser, der jedoch von den Benutzern nicht gesteuert werden konnte. In Release 1.28.0 wird das Attribut #[global_allocator]
stabilisiert, wodurch Rust-Programme einen Systemzuweiser auswählen sowie neue Zuweiser definieren und das GlobalAlloc
implementieren GlobalAlloc
.
Der Standardzuweiser für Rust-Programme auf einigen Plattformen ist jemalloc. Die Standardbibliothek bietet jetzt ein Systemzuordnungshandle, mit dem Sie bei Bedarf durch statische Deklaration mit dem Attribut #[global_allocator]
zur Verwendung des Systemzuordners wechseln können.
use std::alloc::System; #[global_allocator] static GLOBAL: System = System; fn main() { let mut v = Vec::new();
Manchmal müssen Sie jedoch Ihren eigenen Allokator für einen bestimmten Funktionsbereich Ihrer Anwendung definieren. Dies ist auch relativ einfach, wenn das GlobalAlloc
implementiert GlobalAlloc
. Weitere Informationen hierzu finden Sie in der Dokumentation .
Die Arbeiten zur Verbesserung der Diagnose werden fortgesetzt, diesmal mit Schwerpunkt auf der Formatierung:
format!("{_foo}", _foo = 6usize);
Bisher war die Fehlermeldung an dieser Stelle eher dürftig:
error: invalid format string: expected `'}'`, found `'_'` | 2 | format!("{_foo}", _foo = 6usize); | ^^^^^^^^
Jetzt gibt eine neue Diagnosemeldung den spezifischen Grund an, warum die Formatzeichenfolge ungültig ist:
error: invalid format string: invalid argument name `_foo` | 2 | let _ = format!("{_foo}", _foo = 6usize); | ^^^^ invalid argument name in format string | = note: argument names cannot start with an underscore
Weitere Informationen finden Sie in den Versionshinweisen.
Stabilisierung der Standardbibliothek
Zusätzlich zur bereits erwähnten GlobalAlloc
werden in dieser Version NonZero
Nummerntypen stabilisiert. Hierbei handelt es sich um Wrapper-Typen für Standard-Integer-Typen ohne Vorzeichen: NonZeroU8
, NonZeroU16
, NonZeroU32
, NonZeroU64
, NonZeroU128
und NonZeroUsize
.
Mit ihnen können Sie die Größe der gespeicherten Daten optimieren. Beispielsweise belegt Option<u8>
zwei Bytes, während Option<NonZeroU8>
eines benötigt. Bitte beachten Sie, dass diese Optimierung auch dann bestehen bleibt, wenn NonZeroU8
in eine andere Struktur eingeschlossen ist. Das folgende Beispiel zeigt, dass Door
immer noch ein Byte belegt, selbst wenn es in Option
platziert ist. Diese Optimierung gilt auch für benutzerdefinierte Aufzählungen. Die Option
nicht besonders.
use std::mem; use std::num::NonZeroU8; struct Key(NonZeroU8); struct Door { key: Key, } fn main() { assert_eq!(mem::size_of::<Door>(), 1); assert_eq!(mem::size_of::<Option<Door>>(), 1); }
Viele andere Bibliothekskomponenten wurden ebenfalls stabilisiert. Eine vollständige Liste finden Sie in den detaillierten Versionshinweisen .
Frachtverbesserungen
Mit Cargo können Sie keine Pakete mehr mit Build-Skripten veröffentlichen, die das src-Verzeichnis ändern. Das src
Verzeichnis im Paket sollte als unveränderlich angesehen werden.
Entwickler 1.28.0
Viele Leute waren an der Entwicklung von Rust 1.28 beteiligt. Ohne jeden von Ihnen hätten wir die Arbeit nicht abschließen können. Vielen Dank!
Von einem Übersetzer: Ich danke den Mitgliedern der ruRust-Community und persönlich ozkriff für ihre Hilfe bei der Übersetzung und beim Korrekturlesen