Rust 1.37.0 Release: Profilgesteuerte Optimierung, unbenannte Konstanten und Frachtanbieter

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:


 ///   ,    ///  ,   -  . #[macro_export] macro_rules! static_assert_size { ($ty:ty, $size:expr) => { const _: [(); $size] = [(); ::std::mem::size_of::<$ty>()]; // ^    . } } static_assert_size!(Option<Box<String>>, 8); // 1. static_assert_size!(usize, 8); // 2. 

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:


  1. 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.
  2. 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!


Neue Sponsoren für Rostinfrastruktur


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 .

Source: https://habr.com/ru/post/de463823/


All Articles