Rust 1.33 Release

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 _; //     : pub trait Read {} 

Weitere Informationen finden Sie in den Versionshinweisen.


Stabilisierung der Standardbibliothek


Hier ist eine Liste von allem, was konstant geworden ist:



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!

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


All Articles