рд░рд╕реНрдЯ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЯреАрдо рд░рд╕реНрдЯ: 1.29.0 рдХреЗ рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреА рд░рд┐рд▓реАрдЬ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реБрдП рдкреНрд░рд╕рдиреНрди рд╣реИред рд░рд╕реНрдЯ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реБрд░рдХреНрд╖рд╛, рдЧрддрд┐ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ Rustup рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Rust рдХрд╛ рдкрд┐рдЫрд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рддреЛ Rust рдХреЛ рд╕рдВрд╕реНрдХрд░рдг 1.29.0 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
$ rustup update stable
рдпрджрд┐ рдЖрдкрдиреЗ рдЕрднреА рддрдХ Rustup рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреГрд╖реНрда рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╕реНрддреГрдд Rust 1.29.0 рд░рд┐рд▓реАрдЬ рдиреЛрдЯ GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг 1.29.0 рдореЗрдВ рдХреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ
1.29 рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрдВрдЧ 1.30 рдФрд░ 1.31 рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП 1.29 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рддреИрдпрд╛рд░реА рдореЗрдВ рдЪрд▓реЗ рдЧрдПред рдЗрд╕ рд░рд┐рд▓реАрдЬ рдХреЗ рджреЛ рд╕рдмрд╕реЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЛ рднреА рднрд╛рд╖рд╛ рдХреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИ: рдпреЗ рдХрд╛рд░реНрдЧреЛ рдХреА рджреЛ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдФрд░ рджреЛрдиреЛрдВ рд╣реА рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред
cargo fix
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдб рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ cargo fix
рдХрд░рддрд╛ рд╣реИcargo clippy
- рдПрдХ рд╕реНрдерд┐рд░ рдЬрдВрдЧ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдФрд░ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ
cargo fix
1.29 рд░рд╕реНрдЯ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдХрд╛рд░реНрдЧреЛ рдореЗрдВ рдПрдХ рдирдпрд╛ рдЙрдк-рдХреНрд╖реЗрддреНрд░ рд╣реИ: cargo fix
ред рдпрджрд┐ рдЖрдкрдиреЗ рдХрднреА рдЬрдВрдЧ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╕рдВрдХрд▓рдХ рдЪреЗрддрд╛рд╡рдиреА рдореЗрдВ рдЖрдП рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
fn do_something() {} fn main() { for i in 0..100 { do_something(); } }
рдЗрд╕рдореЗрдВ, рд╣рдо do_something
рд╕реМ рдмрд╛рд░ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрднреА рднреА i
рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЬрдВрдЧ рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреА рд╣реИ:
> 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
_i
рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрдЦреЗрдВ? рд╣рдо рдЗрд╕реЗ cargo fix
рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
> 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
рдпрджрд┐ рдЕрдм рд╣рдо src\main.rs
, рддреЛ рд╣рдо рд╕рд╣реА рдХреЛрдб рджреЗрдЦреЗрдВрдЧреЗ:
fn do_something() {} fn main() { for _i in 0..100 { do_something(); } }
рдЕрдм _i
рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдЕрдм рдЬрд╛рд░реА рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред
cargo fix
рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕рднреА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред cargo fix
рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдВрдХрд▓рдХ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдЙрди рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВред рд╕рдордп рдХреЗ рд╕рд╛рде, рдЙрдирдХреА рд╕реВрдЪреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрдЧрд╛ред
cargo clippy
рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА: рдЕрдм рдЖрдк рд░реБрд╕реНрддрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ cargo-clippy
рдХреНрд▓рд┐рдкреА рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрд▓рд┐рдкреНрдкреА рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдХреЛрдб рдкрд░ рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
let mut lock_guard = mutex.lock(); std::mem::drop(&lock_guard) operation_that_requires_mutex_to_be_unlocked();
Syntactically, рдпрд╣ рд╕рд╣реА рдХреЛрдб рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдЧрддрд┐рд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ __ рд▓рд┐рдВрдХ рдХреЛ lock_guard
_ рдХреЗ рд▓рд┐рдП drop
рдХрд╣рд╛ рд╣реИ, рдФрд░ рд╕реНрд╡рдпрдВ lock_guard
рд▓рд┐рдП рдирд╣реАрдВред рдПрдХ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рд┐рдВрдЧ drop
рдереЛрдбрд╝рд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЧрд▓рддреА рд╣реИред
Rustup рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Clippy рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
$ rustup component add clippy-preview
рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВ:
$ 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
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдиреЛрдЯ рд╕реЗ рд╕рдВрджреЗрд╢ рддрдХ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдг рд╣реИ; рдХреНрд▓рд┐рдкреНрдкреА рдЕрднреА рддрдХ 1.0 рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЪреЗрдХ рдХрд╛ рд╕реЗрдЯ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднреА рднреА рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдпрд╣ рд╕реНрдерд┐рд░ рд╣реЛрддрд╛ рд╣реИ рд╣рдо clippy
рдШрдЯрдХ рдЬрд╛рд░реА рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЖрдкрд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВред
рд╣рд╛рдВ, рдЕрднреА рднреА рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИ: рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдк cargo-fix
рд╕рд╛рде рдПрдХ рд╕рд╛рде рдХреНрд▓рд┐рдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЗрд╕ рдкрд░ рдХрд╛рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯ рджреЗрдЦреЗрдВред
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╕реНрдерд┐рд░реАрдХрд░рдг
рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд API рдХреЛ рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдм рдЖрдк &str
рдХрд░ рд╕рдХрддреЗ &str
рдФрд░ OsString
ред
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯ рджреЗрдЦреЗрдВред
рдХрд╛рд░реНрдЧреЛ рд╕рдВрд╡рд░реНрджреНрдзрди
рдКрдкрд░, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЛ рдирдП рдХрд╛рд░реНрдЧреЛ рдЙрдк-рдХреНрд╖реЗрддреНрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Cargo Cargo.lock , git merge
ред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ - --locked
рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
cargo doc
рдХреЛ рдПрдХ рдирдпрд╛ рдЭрдВрдбрд╛ рдорд┐рд▓рд╛: --document-private-items
ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, cargo doc
рдХреЗрд╡рд▓ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рднрд╛рдЧреЛрдВ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд▓реЗрдЦрди рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдкрд╛рд╕ рдЖрдВрддрд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИрдВ, рддреЛ --document-private-items
рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рд▓реЗрдЦрди рдХреА рдкреАрдврд╝реА рдХреЛ рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛ред
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯ рджреЗрдЦреЗрдВред
рдбреЗрд╡рд▓рдкрд░реНрд╕ 1.29.0
рд░реВрд╕реНрдд 1.29 рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдиреЗ рднрд╛рдЧ рд▓рд┐рдпрд╛ред рд╣рдо рдЖрдк рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдереЗред рдзрдиреНрдпрд╡рд╛рдж!
рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ: рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @Revertron рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдВ ред