рд░рд╕реНрдЯ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЯреАрдо, рд░реБрд╕реНрдЯ рдХреЗ рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг, 1.32.0 рдХреА рд░рд┐рд▓реАрдЬ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реБрдП рдкреНрд░рд╕рдиреНрди рд╣реИред рд░рд╕реНрдЯ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рд╕рднреА рдХреЛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рдХреБрд╢рд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддреА рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдЬрдВрдЧ рдХрд╛ рдкрд┐рдЫрд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рддреЛ рдЬрдВрдЧ рдХреЛ рд╕рдВрд╕реНрдХрд░рдг 1.32.0 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
$ rustup update stable
рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ rustup
рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреГрд╖реНрда рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Rust 1.32.0 рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддреГрдд рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯреНрд╕ GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рдПрдХ rustup
рдЯрд┐рдкреНрдкрдгреА: rustup
рдореЗрдВ рдХрдИ рдирдП rustup
рд░рд┐рд▓реАрдЬ rustup
! rustup
рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, rustup self update
ред
рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг 1.32.0 рдореЗрдВ рдХреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ
рдЬрдВрдЧ 1.32.0 рдиреЗ рдХрдИ рдЬреАрд╡рди-рд╡рд░реНрдзрдХ рд╕реБрдзрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореЗрдореЛрд░реА рдПрд▓реЛрдХреЗрдЯрд░ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛, рдФрд░ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рдмрдирд╛ рджрд┐рдпрд╛ред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝реЗрдВ рдпрд╛ рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯреЛрдВ рдореЗрдВ рдФрд░ рджреЗрдЦреЗрдВред
рдбреАрдмреАрдЬреА рдореИрдХреНрд░реЛ
рдЖрдЗрдП рдПрдХ рдЬреАрд╡рди-рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВред рдХреНрдпрд╛ рдЖрдк рдкреНрд░рд┐рдВрдЯ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рдпрджрд┐ рд╣рд╛рдВ, рдФрд░ рдЖрдк рдХреЛрдб рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдореВрд▓реНрдп рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реИрдВ:
let x = 5; println!("{:?}", x);
рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдзреАрдорд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рдмрдбрд╝реА рдмрд╛рдзрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ x
рдореВрд▓реНрдп рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рд╕рдВрджрд░реНрдн рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдРрд╕реЗ println!
s, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рд╕рдВрджрд░реНрдн рдХреНрдпрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдореЗрдВ рд╕рдВрджрд░реНрдн рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд░рд╕реНрдЯ 1.32.0 рдореЗрдВ рд╣рдордиреЗ рдПрдХ рдирдпрд╛ рдореИрдХреНрд░реЛ dbg рдЬреЛрдбрд╝рд╛! :
fn main() { let x = 5; dbg!(x); }
рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ:
[src/main.rs:4] x = 5
рдЪрд░ рдирд╛рдо рдФрд░ рдЙрд╕рдХреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде, рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдФрд░ рд▓рд╛рдЗрди рдирдВрдмрд░ рдЬрд╣рд╛рдВ dbg!
рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ dbg!
ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, println!
рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП eprintln!
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ eprintln!
рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рд╕реНрдЯреНрд░реАрдо рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред dbg!
Stderr рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ, рдФрд░ рдареАрдХ рд╣реИред
рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рддрдереНрдпрд╛рддреНрдордХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
fn factorial(n: u32) -> u32 { if n <= 1 { n } else { n * factorial(n - 1) } }
рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо eprintln!
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ eprintln!
:
fn factorial(n: u32) -> u32 { eprintln!("n: {}", n); if n <= 1 { eprintln!("n <= 1"); n } else { let n = n * factorial(n - 1); eprintln!("n: {}", n); n } }
рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ n
рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╢рд╛рдЦрд╛рдУрдВ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред factorial(4)
рдЙрддреНрдкрд╛рджрди рд╣реЛрдЧрд╛:
n: 4 n: 3 n: 2 n: 1 n <= 1 n: 2 n: 6 n: 24
рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж рд╣рдо рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдлрд┐рд░, рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдбреАрдмрдЧрд┐рдВрдЧ рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВрдЧреЗред
dbg!
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕реА рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ dbg!
:
fn factorial(n: u32) -> u32 { if dbg!(n <= 1) { dbg!(1) } else { dbg!(n * factorial(n - 1)) } }
рд╣рдо рдмрд╕ рдПрдХ рдореИрдХреНрд░реЛ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
[src/main.rs:3] n <= 1 = false [src/main.rs:3] n <= 1 = false [src/main.rs:3] n <= 1 = false [src/main.rs:3] n <= 1 = true [src/main.rs:4] 1 = 1 [src/main.rs:5] n * factorial(n - 1) = 2 [src/main.rs:5] n * factorial(n - 1) = 6 [src/main.rs:5] n * factorial(n - 1) = 24 [src/main.rs:11] factorial(4) = 24
рдЪреВрдВрдХрд┐ рдореИрдХреНрд░реЛ dbg!
рдбреАрдмрдЧ рдорд╛рди рд╕реНрд╡рдпрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, eprintln!
рд╡рд┐рдкрд░реАрдд eprintln!
, рдЬреЛ рджреЗрддрд╛ рд╣реИ ()
, рддреЛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рдирд┐рд╖реНрдХрд░реНрд╖ рдорд┐рд▓рддрд╛ рд╣реИред
рд╣рдордиреЗ рдРрд╕реЗ рдЫреЛрдЯреЗ рдореИрдХреНрд░реЛ рдкрд░ рдмрд╣реБрдд рдзреНрдпрд╛рди рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдХрд░реЗрдЧрд╛ред рдмреЗрд╢рдХ, рд╣рдо рднреА gdb
рдФрд░ рдХрдВрдкрдиреА рдХреЗ рд╕рдорд░реНрдерди рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ
jemalloc
рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ jemalloc
рдПрдХ рдмрд╛рд░, рд░реБрд╕реНрдд рдХреЗ рдкрд╛рд╕ рдПрд░рд▓рдВрдЧ рдХреЗ рд╕рдорд╛рди рдПрдХ рдмрдбрд╝рд╛ рд░рдирдЯрд╛рдЗрдо рдерд╛ред рдЙрд╕рдХреЗ рд▓рд┐рдП, рд╕рд┐рд╕реНрдЯрдо рдПрд▓реЛрдХреЗрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рдЬреЗрдорд▓реЙрдХ рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдХреНрд╕рд░ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рд╣реЛрддрд╛ рдерд╛ред рдзреАрд░реЗ-рдзреАрд░реЗ, рд╣рдордиреЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд░рдирдЯрд╛рдЗрдо рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛ рдФрд░ рдЕрдВрдд рдореЗрдВ, рд▓рдЧрднрдЧ рд╕рднреА рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдЬреЗрдорд▓реЙрдХ рдмрдирд╛ рд░рд╣рд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╕реНрдЯрдо рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдЪреБрдирдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдерд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреЗрдорд▓реЙрдХ рдХреЛ рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддреЗ рдереЗ, рддрд╛рдХрд┐ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдиреБрдХрд╕рд╛рди рди рдкрд╣реБрдВрдЪреЗ, рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рджрд╛рд╡рд╛ рдХрд┐ jemalloc
рд╣рдореЗрд╢рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ jemalloc
рдерд╛, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдпреВрдирд┐рдХреНрд╕ рджреБрдирд┐рдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдХреБрдЫ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдерд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╡рд┐рдВрдбреЛрдЬ рдкрд░ MSVC рдХрд╛ рд▓рдХреНрд╖реНрдп рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬреЗрдорд▓реЙрдХ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдореЗрдВ рд▓рдЧрднрдЧ 300 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдЬреИрдорд▓реЙрдХ рдХреЗ рд╕рд╛рде рдХрдИ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рдВрдЪрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рднрд╛рд╖рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдПрд▓реЛрдХреЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред
рдЗрди рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рд╣реА рд░рд╕реНрдЯ 1.28 рдиреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдЪреБрдирдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ , рд╣рдордиреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд┐рд╕реНрдЯрдо jemalloc
рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдФрд░ рдмрд╛рд╣реНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ jemalloc
рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХреАред 1.32 рд░реБрд╕реНрдЯ рдореЗрдВ, рд╣рдордиреЗ рдЕрдВрддрддрдГ рдпрд╣ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдФрд░ рдЕрдм рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рд┐рд╕реНрдЯрдо рдПрд▓реЛрдХреЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдЬреЗрдорд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЬреИрдорд▓реЛрдХреЛрдЯрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Cargo.toml
рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
jemallocator = "0.1.8"
рдФрд░ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд░реВрдЯ рдлрд╛рдЗрд▓ рдореЗрдВ:
#[global_allocator] static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc;
рд╡рд╣ рд╕рдм рд╣реИ! рдпрджрд┐ рдЖрдкрдХреЛ рдЬреЗрдорд╛рд▓реЛрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЕрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдЕрдВрддрд┐рдо рдореЙрдбреНрдпреВрд▓ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╕реБрдзрд╛рд░
рдкрд┐рдЫрд▓реЗ рджреЛ рд░рд┐рд▓реАрдЬ рдореЗрдВ, рд╣рдордиреЗ рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрдИ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреАред 1.32.0 рдФрд░ 2018 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╣рдордиреЗ рдирд╡реАрдирддрдо рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛрдбрд╝рд╛ред рдЗрд╕реЗ "рд╡рд░реНрджреА рдкрде" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЕрдиреНрдп рд░рд╛рд╕реНрддреЛрдВ рдХреА рддрд░рд╣ рд╣реА рдЖрдпрд╛рдд рдкрдереЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
enum Color { Red, Green, Blue } use Color::*;
рдЗрд╕ рдХреЛрдб рдХреЛ рдкрд╣рд▓реЗ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ use
рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд░рд╛рд╕реНрддреЛрдВ рдХреЛ super
, self
рдпрд╛ crate
рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдЕрдм, рд╕рдВрдЧрдд рдкрдереЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдХреЛрдб рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рд╡рд╣реА рдХрд░реЗрдЧрд╛ рдЬреЛ рдЖрдк рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ: рдКрдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд Color
рдПрдиреБрдорд░ рдХреЗ рдЖрдпрд╛рддрдХреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛ред
рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╣рдорд╛рд░реЗ рд╕рдВрд╢реЛрдзрди рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рд╕рд░рд▓реАрдХреГрдд рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдирдВрдж рд▓реЗрдВрдЧреЗ!
рдореИрдХреНрд░реЛ рдПрдиреНрд╣рд╛рдВрд╕рдореЗрдВрдЯ
рдЬрдВрдЧ 1.32.0 рдиреЗ рдХрдИ рдореИрдХреНрд░реЛ рдПрдиреНрд╣рд╛рдВрд╕рдореЗрдВрдЯ рдЬрд╛рд░реА рдХрд┐рдП рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдирдпрд╛ рд╢рд╛рдмреНрджрд┐рдХ рдЯреБрдХрдбрд╝рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
macro_rules! m { ($lt:literal) => {}; } fn main() { m!("some string literal"); }
literal
рдЯреБрдХрдбрд╝рд╛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ literal
рд╕реЗ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдФрд░ рдЪрд░рд┐рддреНрд░ред
2018 macro_rules
рдХреНрдпрд╛ рдЖрдк macro_rules
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ?
:
macro_rules! bar { ($(a)?) => {} }
рдХреЗ рд╕рд╛рде рдЯреБрдХрдбрд╝рд╛ ?
рдПрдХ рд╢реВрдиреНрдп рдпрд╛ рдПрдХ рдШрдЯрдирд╛ рдХрд╛ рдорд┐рд▓рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдмрд╕ рдПрдХ рдЦрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ *
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рд╢реВрдиреНрдп рдпрд╛ рдЕрдзрд┐рдХ" рдШрдЯрдирд╛рдУрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ +
, рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рд╛рдеред
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╕реНрдерд┐рд░реАрдХрд░рдг
dbg!
, рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрддрд┐рд░рд┐рдХреНрдд рдмрди рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, 19 рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╕рднреА рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдПрдХ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рд╣реБрдП рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ рдХреЗ рд╕рд╛рдеред to_<endian>_bytes
рдФрд░ from_<endian>_bytes
, рдЬрд╣рд╛рдБ <endian>
from_<endian>_bytes
<endian>
рд╣реИ: рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЫрд╣ рдХрд╛рд░реНрдп рд╣реИрдВ:
ne
- рджреЗрд╢реА рдЖрджреЗрд╢ (рджреЗрд╢реА рдПрдВрдбрд┐рдпрдирдиреЗрд╕)le
- рдЬреВрдирд┐рдпрд░ рд╕реЗ рд╕реАрдирд┐рдпрд░ (рдереЛрдбрд╝рд╛ рдПрдВрдбрд┐рдпрди) рдХрд╛ рдЖрджреЗрд╢be
- рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреЗ рд╕реЗ рд╕рдмрд╕реЗ рдХрдо рдЙрдореНрд░ рдХреЗ рд▓рд┐рдП рдСрд░реНрдбрд░ (рдмрдбрд╝рд╛ рдПрдВрдбрд┐рдпрди)
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯ рджреЗрдЦреЗрдВред
рдХрд╛рд░реНрдЧреЛ рд╕рдВрд╡рд░реНрджреНрдзрди
рдХрд╛рд░реНрдЧреЛ рдиреЗ рдХрд╛рд░реНрдЧреЛ рдЪреЗрдХ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдЙрд░реНрдл рдХрд╛рд░реНрдЧреЛ рд╕реА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛, рдФрд░ рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдпреВрдЖрд░рдПрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ред
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯ рджреЗрдЦреЗрдВред
рдбреЗрд╡рд▓рдкрд░реНрд╕ 1.32.0
рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЛрдЧреЛрдВ рдиреЗ рдорд┐рд▓рдХрд░ 1.32.0 рд░реВрд╕реНрдЯ рдмрдирд╛рдпрд╛ред рд╣рдо рдЖрдк рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдереЗред рдзрдиреНрдпрд╡рд╛рдж!
рдПрдХ рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ: рдореИрдВ рд░рд╕реНрдЯреАрдХреНрд░реЗрдЯ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ @dashadee рдФрд░ рдЕрдиреБрд╡рд╛рдж рдФрд░ рдкреНрд░реВрдлрд░реАрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЙрдирдХреА рдорджрдж рдХреЗ рд▓рд┐рдП ozkriff рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рдж рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реВрдВред