Das Rust-Entwicklungsteam freut sich, die Veröffentlichung einer neuen Version von Rust: 1.29.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.29.0 zu aktualisieren:
$ rustup update stable
Wenn Sie Rustup noch nicht installiert haben, können Sie es auf der entsprechenden Seite unserer Website installieren . Detaillierte Versionshinweise zu Rust 1.29.0 sind auf GitHub verfügbar.
Was ist in der stabilen Version 1.29.0 enthalten
1.29 nimmt nicht viele Änderungen vor. Es wird erwartet, dass Rust 1.30 und 1.31 sehr bedeutend sind, sodass der größte Teil der 1.29-Iteration in Vorbereitung auf zukünftige Änderungen ging. Die beiden bemerkenswertesten Neuerungen dieser Version betreffen nicht einmal die Sprache selbst: Dies sind zwei neue Funktionen von Cargo, die sich beide auf Warnungen beziehen.
cargo fix
behebt automatisch Warnungen im Codecargo clippy
- ein statischer cargo clippy
Analysator, mit dem häufige Fehler cargo clippy
und der Code einfach verbessert werden kann
cargo fix
Mit der Veröffentlichung von Rust 1.29 hat Cargo einen neuen Unterbefehl: cargo fix
. Wenn Sie jemals in Rust geschrieben haben, sind Sie höchstwahrscheinlich auf Compiler-Warnungen gestoßen. Betrachten Sie beispielsweise diesen Code:
fn do_something() {} fn main() { for i in 0..100 { do_something(); } }
Darin rufen wir do_something
, verwenden aber niemals die Variable i
. Rust warnt uns davor:
> cargo build Compiling myprogram v0.1.0 (file:///path/to/myprogram) warning: unused variable: `i` --> src\main.rs:4:9 | 4 | for i in 1..100 { | ^ help: consider using `_i` instead | = note: #[warn(unused_variables)] on by default Finished dev [unoptimized + debuginfo] target(s) in 0.50s
Siehe den Hinweis zum Umbenennen in _i
? Wir können es automatisch mit cargo fix
anwenden:
> cargo fix Checking myprogram v0.1.0 (file:///C:/Users/steve/tmp/fix) Fixing src\main.rs (1 fix) Finished dev [unoptimized + debuginfo] target(s) in 0.59s
Wenn wir jetzt src\main.rs
, sehen wir den korrigierten Code:
fn do_something() {} fn main() { for _i in 0..100 { do_something(); } }
Jetzt wird _i
im Code verwendet und die Warnung wird nicht mehr ausgegeben.
Die erste Version von cargo fix
behebt nicht alle Warnungen. cargo fix
verwendet für seine Arbeit eine spezielle Compiler-API, mit der nur die Warnungen behoben werden können, bei denen wir uns absolut sicher sind. Im Laufe der Zeit wird ihre Liste erweitert.
cargo clippy
Mehr zu Warnungen: Jetzt können Sie versuchen, über Rustup cargo-clippy
fahren. Clippy ist ein statischer Analysator, der viele zusätzliche Überprüfungen Ihres Codes durchführt.
Zum Beispiel:
let mut lock_guard = mutex.lock(); std::mem::drop(&lock_guard) operation_that_requires_mutex_to_be_unlocked();
Syntaktisch ist dies der richtige Code, aber wir können einen Deadlock bekommen, weil wir drop
für den _ Link zu lock_guard
_ und nicht für lock_guard
selbst lock_guard
. Das Aufrufen von drop
für einen Link macht wenig Sinn und ist mit ziemlicher Sicherheit ein Fehler.
Installieren Sie die vorläufige Version von Clippy über Rustup:
$ rustup component add clippy-preview
und führen Sie es aus:
$ cargo clippy error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing. --> src\main.rs:5:5 | 5 | std::mem::drop(&lock_guard); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: #[deny(drop_ref)] on by default note: argument has type &std::result::Result<std::sync::MutexGuard<'_, i32>, std::sync::PoisonError<std::sync::MutexGuard<'_, i32>>> --> src\main.rs:5:20 | 5 | std::mem::drop(&lock_guard); | ^^^^^^^^^^^ = help: for further information visit https://rust-lang-nursery.imtqy.com/rust-clippy/v0.0.212/index.html#drop_ref
Wie Sie in der Notiz zur Nachricht sehen können, können Sie über den Link eine vollständige Liste aller möglichen Warnungen erhalten.
Bitte beachten Sie, dass dies nur eine Testversion ist. Clippy hat 1.0 noch nicht erreicht, daher können sich Satz und Verhalten von Überprüfungen noch ändern. Wir werden die clippy
Komponente veröffentlichen, sobald sie stabilisiert ist. Im clippy
bitten wir Sie jedoch, sich die vorläufige Version anzusehen und uns Ihre Erfahrungen mitzuteilen.
Ja, es gibt noch eine Nuance: Leider kann man Clippy nicht zusammen mit cargo-fix
. Daran wird gearbeitet.
Weitere Informationen finden Sie in den Versionshinweisen.
Stabilisierung der Standardbibliothek
Die folgenden APIs wurden in dieser Version stabilisiert:
Außerdem können Sie jetzt &str
und OsString
.
Weitere Informationen finden Sie in den Versionshinweisen.
Frachtverbesserungen
Oben haben wir bereits zwei neue Cargo-Unterbefehle beschrieben. Außerdem versucht Cargo Cargo.lock , git merge
. Dieses Verhalten kann mit dem Flag --locked
deaktiviert werden.
--document-private-items
hat eine neue Flagge bekommen: --document-private-items
. Standardmäßig dokumentiert cargo doc
nur die öffentlichen Teile der API, da damit Benutzerdokumentation generiert werden soll. Wenn Sie jedoch an Ihrem Paket arbeiten und es über eine interne Dokumentation verfügt, ermöglicht --document-private-items
die Generierung von Dokumentation im Allgemeinen für alles.
Weitere Informationen finden Sie in den Versionshinweisen.
Entwickler 1.29.0
Viele Leute waren an der Entwicklung von Rust 1.29 beteiligt. Ohne jeden von Ihnen hätten wir die Arbeit nicht abschließen können. Vielen Dank!
Von einem Übersetzer: Vielen Dank an @Revertron, dass er mir beim Übersetzen geholfen hat .