Mozilla ááá±á¬áá»ááºá០áááºáá±á¬ááºáá¬ážáá±á¬ á¡ááœá±ááœá±áá¯á¶áž áááá¯ááááºáá¬áá¬á áá¬áž Rust 1.58 ááᯠáá¯ááºáá±áá²á·áá±á¬áºáááºáž ááá¯á¡áá« ááœááºáááºáá±á¬ á¡áá»áá¯ážá¡ááŒááºááá°áá±á¬ á¡ááœá²á·á¡á ááºáž Rust Foundation á áá¶á·ááá¯ážááŸá¯ááŒáá·áº áá¯ááºáá±ááá¯ááºáá«áááºá áá¬áá¬á áá¬ážááẠáááºááá¯áá®áá±ážáááºážáá±ážááᯠá¡á¬áá¯á¶á áá¯ááºááŒá®ážá á¡ááá¯á¡áá»á±á¬ááºááŸááºáá¬ááºá á®áá¶ááá·áºááœá²ááŸá¯ááᯠáá¶á·ááá¯ážáá±ážáᬠá¡ááŸáá¯ááºá á¯áá±á¬ááºážáá° ááá¯á·ááá¯áẠá¡ááŒá±ážá¡áá»áááºááᯠá¡áá¯á¶ážáááŒá¯áá² ááŒáá·áºáá¬ážáá±á¬á¡áá¯ááºá¡ááŒáá¯ááºáááŸáááẠáááºážáááºážáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážááẠ(runtime ááᯠá¡ááŒá±áá¶á¡á áá»áá¯ážááŒááºážááŸáá·áº á á¶ááŒá á¬ááŒáá·áºááá¯ááºááᯠááŒá¯ááŒááºááááºážááááºážááŸá¯ááá¯á· áá»áŸá±á¬á·áá»áá¬ážáááº)á
Rust á á¡ááá¯á¡áá»á±á¬áẠááŸááºáá¬ááºá á®áá¶ááá·áºááœá²ááŸá¯ááẠááœáŸááºááŒáá»ááºáá»á¬ážááᯠááá¯ááºááœááºáá¬ááœáẠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠáááºááŸá¬ážáá±ážááŒá®áž áááºážááᯠááœááºááŒá®ážááá·áºáá±á¬áẠáááºááá¯áá®á§áááá¬ááᯠáááºáá±á¬ááºááŒááºážá á¡áá»ááºážááŸá®ážáá±á¬ ááœáŸááºááŒááŸá¯ááá¯ááºáᬠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážá ááŒá¬ážáá¶á¡ááœá²áá¯á¶ážááŸá¯áá»á¬áž á áááºááá¯á·áá²á·ááá¯á·áá±á¬ á¡ááá·áºáááá·áºááŸááºáá¬ááºááᯠááá¯ááºááœááºááŒááºážá០ááŒá áºáá±á«áºáá¬ááá·áº ááŒá¿áá¬áá»á¬ážááᯠáá¬ááœááºáá±ážáááºá á á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠááŒáá·áºáá±áááºá á á¯á ááºážááŸá¯ááᯠáá±áá»á¬á á±áááºááŸáá·áº ááŸá®ááá¯ááŸá¯ááᯠá á®áá¶ááá·áºááœá²áááºá ááá±á¬áá»ááºááẠCargo package manager ááᯠáá®ááœááºáá±áá«áááºá crates.io repository ááᯠhosting libraries áá»á¬ážá¡ááœáẠáá¶á·ááá¯ážáá¬ážáá«áááºá
á¡ááá áá®ááœááºáááºážáá áºááŸá¯áá»á¬áž-
- ááá¯ááºážáá±á¬áºáááºáá¯ááºááœááºáá»á¬ážááœááºá ááá¯ááºážáá¶áá«ááºááŸáá·áºá¡áááºááŒá®ážáá±á¬ááºááœáẠá¡ááá¡áááºážáá±á¬áºááŒáá¬ážáá±á¬ ááááºážááŸááºáá»á¬ážááᯠá¡á
á¬ážááá¯ážááá¯ááºááá·áºá
áœááºážáááºá¡ááŒááºá ááá¯ááºážááá¯á· â{identifier}â áá°áá±á¬ á
áá¬ážáááºááᯠáá±á«ááºážááá·áºááŒááºážááŒáá·áº ááááºáááᯠááœá²ááŒá¬ážáááºááŸááºááá¯ááºá
áœááºážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáááºááŒá
áºáááºá á¥ááá¬: // ááááºá áá¶á·ááá¯ážáá¬ážáá±á¬ áááºáá±á¬ááºááŸá¯áá»á¬áž: println!("Hello, {}!", get_person()); println!("áááºá¹ááá¬áá«á {0}!"á get_person()); println!("áááºá¹ááá¬áá«á {person}!"á person = get_person()); // ááá¯ááœáẠlet person = get_person(); println!("áá²ááá¯á {áá°}!");
áá±á¬áºáááºáá»ááŒááºážááœá±ážáá»ááºááŸá¯áá»á¬ážááœáẠááœá²ááŒá¬ážáááºááŸááºááŸá¯áá»á¬ážááá¯áááºáž ááá¯ááºááá¯ááºáááºááŸááºááá¯ááºáááºá let (á¡áá»ááºá áááá»ááŸá¯) = get_format(); get_scores() { println!("{name}: {score:width$.precision$}"); }
á¡á á¬ážááá¯ážááŸá¯á¡áá áºááẠ"ááááºááá·áºááŒááºáž!" áááºáááá¯ááŸááœá²á string áá±á¬áºáááºá¡áááá¹áá«ááºááᯠáá¶á·ááá¯ážáá±ážááá·áº áááºáááá¯á¡á¬ážáá¯á¶ážááœáẠá¡áá¯ááºáá¯ááºáááºá ááááºááá·áºááŒááºáž!("{ident}") ááᯠáá¯á¶ááŸááºá á¬ááŒá±á¬ááºážá¡ááŒá ẠáááºááŸááºááẠ(Rust 2015 ááœáẠá¡á á¬ážááá¯ážá¡áá¯ááºáá¯ááºáááº)á
- std::process::Windows ááááºáá±á¬ááºážáá±á«áºááŸá ááœááºáááºážáááºáá±á¬ááºáá¯á¶á á¡ááŒá¯á¡áá°ááᯠááŒá±á¬ááºážáá²áá²á·ááŒá®ážá ááá¯á·ááŒá±á¬áá·áº áá¯á¶ááŒá¯á¶áá±ážá¡ááŒá±á¬ááºážááŒáá»ááºáá»á¬ážááŒáá·áº á¡áááá·áºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááá·áºá¡áá«á áááºážááẠáááºááŸá directory ááŸá executable ááá¯ááºáá»á¬ážááᯠááŸá¬ááœá±áá±á¬á·ááẠááá¯ááºáá«á áááá¯ááááºáá»á¬ážááᯠá áááºááá»ááá±á¬ áááºážááœáŸááºáá»á¬áž (CVE-2021-3013) ááœáẠáá¯ááºáá±á¬ááºáá«á á¡áá¹ááá¬ááºááŸááá±á¬áá¯ááºááᯠáá¯ááºáá±á¬ááºááẠáááºááŸááááºážááœáŸááºááᯠáááºáá¯ááºáá¬ážáááºá áá¯ááºáá±á¬ááºááá¯ááºáá±á¬ áá±á¬ááºááŸááºážááá¯ááºáá±á¬ áá¯áá¹áááá±áá¡áá áºááœáẠRust áááºážááœáŸááºáá»á¬ážá á¡ááá®áá±ážááŸááºážáááºážááœáŸááºáá»á¬ážá Windows á áá áºáááºážááœáŸááºáá»á¬ážááŸáá·áº PATH áááºáááºážáá»áẠvariable ááœáẠáááºááŸááºáá¬ážááá·áº áááºážááœáŸááºáá»á¬áž ááŸá¬ááœá±ááŒááºážááá¯á· áá«áááºáá«áááºá
- ááŒááºáááºááá¯ážááᯠáá»á áºáá»á°ááŸá¯áá¬ážáá«á ááááá±ážáá»ááºáá¯ááºááẠ"#[must_use]" áá°áá±á¬ áá¯ááºáá±á¬ááºáá»ááºá¡áá±á¡ááœááºááᯠá á¶áá áºáá»á áºááá¯ááºá០ááá¯ážáá»á²á·áá¬ážááŒá®ážá áááºážááẠáááºááá¯ážá¡áá áºáá áºáᯠááŒááºáá±ážááá·áºá¡á á¬áž áááºááá¯ážáá»á¬ážááŒá±á¬ááºážáá²áááºáᯠáá°áááŒááºážááŒá±á¬áá·áº ááŒá áºáá±á«áºáá¬áá±á¬ á¡ááŸá¬ážáá»á¬ážááᯠááœá²ááŒá¬ážáááºááŸááºáá±ážáááºá
- API á á¡á
áááºá¡ááá¯ááºážá¡áá
áºááᯠáááºááŒáááºáá±á¬á¡áá»áá¯ážá¡á
á¬ážááá¯á· ááœáŸá±á·áá¬ážááŒá®ážá áááºážáááºážáá»á¬ážááŸáá·áº á
ááá¯ááºááá¹ááá¬áá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá¬ááœáẠáááºááŒáááºá¡á±á¬ááºááŒá¯áá¯ááºáá¬ážáááº-
- áááºáá¬áá±áá¬-:is_symlink
- áááºážááŒá±á¬ááºáž-:is_symlink
- { integer}::saturating_div
- ááœá±ážáá»ááºááŸá¯-:unwrap_unchecked
- ááááº-:unwrap_unchecked
- ááááº-:unwrap_err_ á¡ááŸááºááŒá áºááá¬ážáá«á
- ááááºážáá±áá»á¬ážá¡á
á¬áž áááºááá·áºá¡ááŒá±á¬ááºážá¡áá¬ááœááºáááᯠáááºážááá¯á¡áá¯á¶ážááŒá¯ááẠááŒá
áºááá¯ááºááŒá±ááᯠáá¯á¶ážááŒááºáá±ážááá·áº "const" attribute ááᯠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯áááº-
- ááŒá¬áá»áááº-:á¡áá áº
- ááŒá¬áá»áááº-:checked_add
- ááŒá¬áá»áááº-:saturating_add
- ááŒá¬áá»áááº-:checked_sub
- ááŒá¬áá»áááº-:saturating_sub
- ááŒá¬áá»áááº-:checked_mul
- ááŒá¬áá»áááº-:saturating_mul
- ááŒá¬áá»áááº-:checked_div
- "const" á¡áááºážá¡áá»ááºážáá»á¬ážááœáẠ"*const T" á¡ááŸááºá¡áá¬ážáá»á¬ážááᯠááá¯ážáá¬ážááŒááºážá¡á¬áž ááœáá·áºááŒá¯áá¬ážáááºá
- Cargo áááºáá±á·áá»áºáááºáá±áá»á¬ááœááºá rust_version á¡ááœááºááᯠáááºáá±á·áá»áºáááºáá¬áá±áá¬ááá¯á· áá±á«ááºážááá·áºááá¯ááºááŒá®áž â--message-formatâ ááœá±ážáá»ááºááœáá·áºááᯠâáá¯ááºáááºáá¯ááºáá»áááºáááºááŒááºážâ ááœááºáááºážááá¯á· áá±á«ááºážááá·áºáá¬ážáááºá
- ááœááºááŒá°áá¬ááẠCFI (Control Flow Integrity) áá¬ááœááºáá±ážááá¹ááá¬ážááᯠáá¶á·ááá¯ážáá±ážáááºá áááºážááẠááááºá¡áá±ááŒáá·áº áá¯á¶ááŸááºáá¯ááºáá±á¬ááºááŸá¯á¡áááá·áº (control flow) ááᯠáá»áá¯ážáá±á¬ááºááŒááºážáá®ááá¯á· áŠážáááºááœá¬ážááá¯ááºááá·áº á¡áá»áá¯á·áá±á¬ áááºááŸááºáá¬ážááŒááºážáááŸááá±á¬ á¡ááŒá¯á¡áá°áá¯á¶á á¶á¡áá»áá¯á·ááᯠááááŸáááá¯ááºááẠááœááºááá¯ááºáá±á«áºááá¯ááŸá¯áá áºáá¯á á®áááá¯ááºáá® á á áºáá±ážááŸá¯áá áºáá¯á á®ááᯠáá±á«ááºážááá·áºáááºá áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááœáẠmemory ááœááºááááºážáááºážáá¬ážáá±á¬ pointers ááá¯ááŒá±á¬ááºážáá²á á±áá±á¬ exploits áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá
- á ááºážáááºááŸá¯á¡ááœááºáž áá¯ááºá¡áá»á¯á¶ážáááºááŸá¯ááᯠá¡áá²ááŒááºááẠá¡áá¯á¶ážááŒá¯ááá·áº LLVM ááœáŸááºážááŒá¯á¶ááŸá¯ ááŸáá¯ááºážááŸááºáá±á¬áºáááºá áá¬ážááŸááºáž 5 ááŸáá·áº 6 á¡ááœáẠá á¯á ááºážááŸá¯ááœáẠáá¶á·ááá¯ážááŸá¯ áááºááá·áºáá¬ážáááºá
- compiler ááœááºá LLVM áá¡áááºážáá¯á¶ážáá¬ážááŸááºážá¡ááœááºááá¯á¡ááºáá»ááºáá»á¬ážááᯠLLVM 12 ááá¯á·ááá¯ážááŒáŸáá·áºáá¬ážáááºá
- x86_64-unknown-none ááááºáá±á¬ááºážá¡ááœáẠááááá¡ááá·áº áá¶á·ááá¯ážááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒá®ážááŒá áºáááºá ááááá¡ááá·áºááœáẠá¡ááŒá±áá¶áá¶á·ááá¯ážááŸá¯áá«áááºáá±á¬áºáááºáž á¡ááá¯á¡áá»á±á¬ááºá ááºážáááºááŒááºážáááŸááá²á ááá¬ážáááºáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáá¯ááºááŒááºááŒááºáž ááá¯á·ááá¯áẠáá¯ááºááá¯áááºáá±á¬ááºááá¯ááºáááºááŸááááŸá á á áºáá±ážááŒááºážáááŒá¯áá²ááŒá áºáááºá
ááá¯á·á¡ááŒááºá áááºááẠWindows OS á¡ááœáẠá¡ááá®áá±ážááŸááºážáá»á¬áž ááŒá¯á
á¯áá»áá¯ážáá±á¬ááºááẠRust áá¬áá¬á
áá¬ážááᯠá¡áá¯á¶ážááŒá¯ááœáá·áºáá±ážááá·áº Rust for Windows 0.30 á
á¬ááŒáá·áºááá¯ááºáá»á¬áž áá¯ááºáá±ááá·áº Microsoft á០áá¯ááºáá±ááŸá¯ááᯠááŸááºáá¬ážááá¯ááºáááºá ဠset ááœáẠááẠRust áááá¯ááááºáá»á¬ážááœáẠWin API ááᯠáááºáá±á¬ááºááŒáá·áºááŸá¯ááá¯ááºááá·áº crate package ááŸá
áºáᯠ(windows ááŸáá·áº windows-sys) áá«áááºáááºá API áá¶á·ááá¯ážááŸá¯á¡ááœáẠáá¯ááºááᯠAPI áá±á¬áºááŒááá·áº áááºáá¬áá±áá¬á០ááá¯ááºážááá
áºááŒáá·áº áá¯ááºáá±ážáááºá áááºážááẠáááºááŸá Win API áá±á«áºááá¯ááŸá¯áá»á¬ážá¡ááœááºáá¬áá á¡áá¬áááºááœáẠáá±á«áºáá¬ááá·áº áá±á«áºááá¯ááŸá¯áá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠááœáá·áºááŒá¯áá¬ážáááºá áá¬ážááŸááºážá¡áá
áºááẠUWP (Universal Windows Platform) áá
áºááŸááºááááºáá±á¬ááºážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ááá·áºááœááºážááŒá®áž Handle ááŸáá·áº Debug á¡áá»áá¯ážá¡á
á¬ážáá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá
source: opennet.ru