Wir präsentieren Ihnen eine Übersetzung der Publikation zur neuen Version der beliebten Programmiersprache Rust .
Einführung
Das Rust-Entwicklungsteam freut sich, die Veröffentlichung einer neuen Version 1.37.0 bekannt zu geben. Rust ist eine Programmiersprache, mit der jeder zuverlässige und effiziente Software erstellen kann.
Wenn Sie die vorherige Version von Rust mit rustup installiert haben, müssen Sie zum Upgrade auf Version 1.37.0 nur den folgenden Befehl ausführen:
$ rustup update stable
Wenn Sie rustup
noch nicht installiert rustup
, können Sie es auf der entsprechenden Seite unserer Website installieren und rustup
auf GitHub lesen.
Was ist in der stabilen Version enthalten?
Zu den wichtigsten Neuerungen in Rust 1.37.0 gehören Links zu enum
Optionen über Typ-Aliase, ein integrierter cargo vendor
, unbenannte Konstanten, eine profilgesteuerte Optimierung, der default-run
für Frachtprojekte und #[repr(align(N))]
für Aufzählungen. Weitere Informationen finden Sie in den detaillierten Versionshinweisen .
Links zu enum
Optionen über Typ-Aliase
Ab Rust 1.37.0 wird das Referenzieren von enum
Optionen durch Typ-Aliase ermöglicht:
type ByteOption = Option<u8>; fn increment_or_zero(x: ByteOption) -> u8 { match x { ByteOption::Some(y) => y + 1, ByteOption::None => 0, } }
In impl
Blöcken fungiert Self
als Alias vom Typ, daher wurde es in Rust 1.37.0 möglich, mithilfe der Self::Variant
Syntax auf Aufzählungsoptionen zu verweisen:
impl Coin { fn value_in_cents(&self) -> u8 { match self { Self::Penny => 1, Self::Nickel => 5, Self::Dime => 10, Self::Quarter => 25, } } }
Im Einzelnen können Sie jetzt mit Rust über die " <MyType<..>>::Variant
Auflösung" , <MyType<..>>::Variant
, auf Aufzählungsoptionen verweisen. Eine detailliertere Beschreibung finden Sie im Stabilisierungsbericht .
Native Cargo-Unterstützung für Lieferantenabhängigkeiten
Nach mehreren Jahren des Bestehens als separates Paket ist das cargo vendor
nun in Cargo integriert. Dieser Befehl extrahiert alle Abhängigkeiten Ihres Projekts in den vendor/
Verzeichnis und zeigt das Konfigurationsfragment an, das für die Verwendung des Herstellercodes während der Montage erforderlich ist.
cargo vendor
bereits in realen Projekten verwendet: Der rustc
Compiler sendet damit alle Abhängigkeiten, um Tarballs freizugeben, und Projekte mit Mono-Repositorys verwenden ihn, um den Abhängigkeitscode in der Versionskontrolle zu korrigieren.
Verwenden unbenannter Konstanten in Makros
Jetzt können Sie eine (unnamed) (const
) erstellen, indem Sie ihren Bezeichner durch einen Unterstrich ( _
) ersetzen. Im rustc
Compiler rustc
wir beispielsweise diesen Code gefunden:
static_assert_size!(..)
auf die zweite static_assert_size!(..)
: Dank der Verwendung unbenannter Konstanten konnten Namenskonflikte beim Deklarieren neuer Elemente static_assert_size!(..)
werden. Früher müssten Sie static_assert_size!(MY_DUMMY_IDENTIFIER, usize, 8);
schreiben static_assert_size!(MY_DUMMY_IDENTIFIER, usize, 8);
. Mit der Einführung unbenannter Konstanten wird es einfacher, ergonomische und wiederverwendbare deklarative und prozedurale Makros für statische Analysezwecke zu erstellen.
Profilgesteuerte Optimierung
Profile-Guided Optimization (PGO) ist jetzt im rustc
Compiler verfügbar, der über die Compiler-Flags -C profile-generate
und -C profile-use
aktiviert werden kann.
Profile-Guided Optimization ist eine Compiler-Software-Optimierungstechnik, die Testläufe anstelle von Quellcode analysiert. Es funktioniert, indem ein Programm zur Optimierung in zwei Schritten kompiliert wird:
- Zunächst wird das Programm mit den im Compiler integrierten Tools erstellt. Dies erfolgt durch Übergeben des
rustc
Flags -C profile-generate
. Anschließend sollte das Toolprogramm für die Datenbeispiele ausgeführt werden und anschließend werden Profildaten in die Datei geschrieben. - Das Programm wird dann erneut erstellt und dieses Mal werden die gesammelten Profildaten mit dem Flag
-C profile-use
an rustc
. Diese Assembly verwendet die gesammelten Daten, damit der Compiler bessere Entscheidungen über die Platzierung, Einbettung und andere Optimierungen von Code treffen kann.
Weitere Informationen zur profilgesteuerten Optimierung finden Sie im entsprechenden Kapitel im rustc-Compiler-Buch .
Auswählen einer ausführbaren Datei in Frachtprojekten
cargo run
ist ein sehr praktisches Tool zum schnellen Testen von Konsolenanwendungen. Wenn mehrere ausführbare Dateien in einem Paket vorhanden sind, müssen Sie den Namen der ausführbaren Datei, die Sie ausführen möchten, explizit mit dem Flag --bin
. Dies macht den cargo run
nicht so ergonomisch, wie wir es gerne hätten, insbesondere wenn eine bestimmte ausführbare Datei häufiger aufgerufen wird als andere.
Rust 1.37.0 löst dieses Problem, indem Cargo.toml
(Abschnitt [package]
) ein neuer default-run
Cargo.toml
. Wenn das Flag --bin
nicht --bin
, startet Cargo die in der Konfiguration deklarierte Binärdatei.
#[repr(align(N))]
für Aufzählungen
Ab Rust 1.37.0 kann das Attribut #[repr(align(N))]
verwendet werden, um die Ausrichtung von Aufzählungen im Speicher zu bestimmen (zuvor war dieses Attribut nur für Strukturen ( struct
) und Unions ( union
) zulässig). Beispielsweise hat eine Align16
Aufzählung erwartungsgemäß eine Ausrichtung von 16
Bytes, während die natürliche Ausrichtung ohne #[repr(align(16))]
4
Align16
:
#[repr(align(16))] enum Align16 { Foo { foo: u32 }, Bar { bar: u32 }, }
Die Semantik der Verwendung von #[repr(align(N))
für Aufzählungen entspricht der Definition eines Wrappers für eine AlignN<T>
-Struktur mit dieser Ausrichtung und der anschließenden Verwendung von AlignN<MyEnum>
:
#[repr(align(N))] struct AlignN<T>(T);
Änderungen an der Standardbibliothek
Rust 1.37.0 stabilisierte die folgenden Komponenten der Standardbibliothek:
Andere Änderungen
Die Syntax , der Frachtpaket-Manager und der Clippy-Analysator wurden ebenfalls geändert.
Mitglieder 1.37.0
Viele Leute kamen zusammen, um Rust 1.37.0 zu erstellen. Ohne euch alle hätten wir das nicht geschafft, danke!
Wir möchten uns bei den beiden neuen Sponsoren der Rust-Infrastruktur bedanken, die die für die Erstellung von Rust 1.37.0 erforderlichen Ressourcen bereitgestellt haben: Amazon Web Services (AWS) und Microsoft Azure:
- AWS stellte Hosting für Release-Artefakte (Compiler, Bibliotheken, Tools und Quellcode) bereit, gewährte Benutzern über CloudFront Zugriff auf diese Artefakte, verhinderte EC2-Regressionen von Crater und verwaltete eine andere auf AWS gehostete Rust-bezogene Infrastruktur.
- Für äußerst anspruchsvolle Tests des Rost-Lang / Rost-Repositorys stellte Microsoft Azure Builder zur Verfügung.
Von Übersetzern
Bei Fragen zur Rust-Sprache können sie Ihnen im russischsprachigen Telegramm-Chat oder in einem ähnlichen Chat für Neulinge helfen.
Dieser Artikel wurde gemeinsam von andreevlex , ozkriff , funkill und Gymmasssorla übersetzt .