Rust 1.39.0 Release: async / await, Attribute für Funktionsparameter, neue konstante Funktionen

Das Rust-Team freut sich, die Veröffentlichung einer neuen Version, 1.39.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 rustup , müssen Sie nur den folgenden Befehl rustup , um auf Version 1.39.0 zu aktualisieren:


 $ rustup update stable 

Wenn Sie rustup noch nicht installiert rustup , können Sie es von der entsprechenden Seite unserer Website installieren und rustup zu GitHub lesen.


Was ist in der stabilen Version 1.39.0 enthalten


Zu den wichtigsten Neuerungen zählen die async / .await , gemeinsame Verweise auf bewegliche Werte in match-guards und die Attribute von Funktionsparametern. Weitere Informationen finden Sie in den ausführlichen Versionshinweisen .


.await Sie sich mit .await over async fn


Zuvor hatten wir in Rust 1.36.0 die Verfügbarkeit des Future Merkmals angekündigt . Dann haben wir festgestellt, dass:


Wir hoffen, dass diese Innovation es populären Kisten, Bibliotheken und dem gesamten Ökosystem ermöglicht, sich auf die async / .await vorzubereiten, die in naher Zukunft stabilisiert werden soll.

Das Versprechen wird gegeben - das Versprechen wird erfüllt. Wir freuen uns, .await zu können, dass die lang erwartete asynchrone / .await , mit der wir asynchrone Funktionen und Blöcke ( async ) definieren und auf ihre Ausführung warten können ( .await ), endlich stabil ist!


Eine asynchrone Funktion, die mithilfe der asynchronen async fn Syntax (anstelle der üblichen fn ) definiert wurde, führt nichts aus, außer dass beim Aufruf ein Objekt zurückgegeben wird, das das Future Merkmal implementiert. Dieses Objekt ist eine angehaltene Berechnung, die mit der .await Syntax abgeschlossen werden kann. Darüber hinaus fungieren async fn , async { ... } und async move { ... } als Abschlüsse und können zum Definieren asynchroner Literale verwendet werden.


Weitere Informationen zur Veröffentlichung von async / .await im Blog-Beitrag von Niko Matsakis .


Gemeinsame Links zu Roaming-Werten in match-guards


Beim Abgleichen eines Bildes kann eine als Bindung bezeichnete Variable auf eine der folgenden Arten gebunden werden:


  • Durch Bezugnahme unveränderlich oder veränderlich. Dies kann beispielsweise explizit mit der Syntax ref my_var bzw. ref mut my_var . Fast immer wird der Fangmodus automatisch angezeigt.


  • Nach Wert - entweder durch Kopieren (wenn der Typ der gebundenen Variablen das Merkmal Copy implementiert) oder durch Übertragen in den Besitz .



Jetzt ist es zulässig, Vorlagenvariablen in if-Einschränkungen der Vorlage zu verwenden, wenn das Eigentumsrecht auf diese Variable übertragen wird (d. H. Auf die Variable in der Vorlage für das Binden durch Verschieben). Zuvor wurde der folgende Code verworfen:


 fn main() { let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]); match array { nums // ---- `nums`    (by move). if nums.iter().sum::<u8>() == 10 // ^------ `.iter()`     `nums` => { drop(nums); // ----------- `nums`      } _ => unreachable!(), } } 

Ab Rust 1.39.0 akzeptiert der Compiler das obige Fragment ohne Warnungen und Fehler. Wir hoffen, dass diese Innovation die Benutzerfreundlichkeit des match Ausdrucks verbessert.


Attribute für Funktionsparameter


Ab Rust 1.39.0 können Attribute auf Funktionsparameter, Abschlüsse und Funktionszeiger angewendet werden. Bisher konnte die len() -Funktion wie folgt dargestellt werden:


 #[cfg(windows)] fn len(slice: &[u16]) -> usize { slice.len() } #[cfg(not(windows))] fn len(slice: &[u8]) -> usize { slice.len() } 

Aber Rust 1.39.0 macht das Schreiben des obigen Codes viel einfacher:


 fn len( #[cfg(windows)] slice: &[u16], //        Windows. #[cfg(not(windows))] slice: &[u8], //       . ) -> usize { slice.len() } 

Verwendbare Attribute sind:


  1. Bedingte Kompilierung: cfg und cfg_attr ;


  2. Check Management: allow , warn , deny und forbid ;


  3. Hilfsattribute, die von prozeduralen Attributmakros für Syntaxelemente verwendet werden.


    Wir hoffen, dass diese Innovation dem Ökosystem hilft, aussagekräftigere makrobasierte DSLs zu schreiben.



Migrationswarnungen zu Leihschecks werden in Rust 2018 zu schwerwiegenden Fehlern


In Release 1.35.0 haben wir angekündigt, dass der neue Kreditanalysator (NLL) den Redakteuren von Rust 2015 zur Verfügung gestellt wurde, nachdem er den Redakteuren von Rust 2018 in Version 1.31 zur Verfügung gestellt wurde .


Wie in Release 1.35.0 angegeben, wurde der vorherige Ausleihanalysator mit Fehlern entwickelt, die eine unsichere Speichernutzung ermöglichten. Diese Fehler wurden mit einem neuen Analysator behoben, der NLL implementiert. Da diese Korrekturen den Arbeitscode verletzen könnten, entschied sich das Rust-Team, sie schrittweise einzuführen und zu überprüfen, ob der vorherige Analysator den Code akzeptieren sollte, den der neue Analysator ablehnen würde. In diesem Fall werden die Fehler stattdessen zu Warnungen.


Ab Rust 1.39.0 sind diese Warnungen jetzt Fehler in der Version Rust 2018 .
In der nächsten Version von Rust 1.40.0 wird diese Regel auch auf den Rust 2015-Revisionscode angewendet, wodurch der alte Ausleihanalysator vollständig aus dem Compiler entfernt wird.


Wenn Sie von diesen Änderungen betroffen sind oder mehr erfahren möchten, lesen Sie den Blog-Beitrag von Niko Matsakis .


Konstantere Funktionen in der Standardbibliothek


Ab Rust 1.39.0 sind folgende Funktionen als const fn ( const fn ) gekennzeichnet:



Stabile Funktionen in der Standardbibliothek


Folgende Funktionen wurden in Rust 1.39.0 stabilisiert:



Andere Änderungen


Die Syntax , der Frachtpaket-Manager und der Clippy-Analysator wurden ebenfalls geändert.


Bitte lesen Sie die Kompatibilitätshinweise, um festzustellen, ob sich diese Änderungen auf Sie auswirken.


Mitglieder 1.39.0


Viele Leute kamen zusammen, um Rust 1.39.0 zu erstellen. Ohne euch alle hätten wir das nicht geschafft, danke !


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 übersetzt von andreevlex , blandger , funkill und Hippolot .

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


All Articles