Mozilla ááá±á¬áá»ááºá០áááºáá±á¬ááºáá¬ážáá±á¬ Rust 1.75 á¡ááœá±ááœá±-áááºááœááºáá»áẠáááá¯ááááºážáááºážáá¬áá¬á áá¬ážááᯠáá¯ááºáá±áá²á·áá±á¬áºáááºáž ááá¯á¡áá« ááœááºáááºáá±á¬ á¡áá»áá¯ážá¡ááŒááºááá°áá±á¬ á¡ááœá²á·á¡á ááºáž Rust Foundation á áá¶á·ááá¯ážáá°áá®ááŸá¯ááŒáá·áº áá¯ááºáá±ááá¯ááºáá«áááºá áá¬áá¬á áá¬ážááẠááŸááºáá¬ááºáá±ážáááºážáá±ážááᯠá¡á¬áá¯á¶á áá¯ááºááŒá®áž á¡ááŸáá¯ááºá á¯áá±á¬ááºážáá°ááŸáá·áº runtime ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááᯠááŸá±á¬ááºááŒááºáá±á ááºááœáẠááŒáá·áºáá¬ážáá±á¬á¡áá¯ááºá¡ááŒáá¯ááºáááŸáááẠáááºážáááºážáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážááẠ(runtime ááᯠá¡ááŒá±áá¶á¡á áá»áá¯ážááŒááºážááŸáá·áº á á¶á á¬ááŒáá·áºááá¯ááºááᯠááŒá¯ááŒááºááááºážááááºážááŸá¯ááá¯á· áá»áŸá±á¬á·áá»áá¬ážáááº)á
Rust á áááºááá¯áá® ááá¯ááºááœááºááŸá¯áááºážáááºážáá»á¬ážááẠááœáŸááºááŸááºáá»á¬ážááᯠá¡áá¯á¶ážáá»ááá·áºá¡áá« áá±á¬á·ááºáá²áá±ážáá¬ážáá°ááᯠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážá០áááºáááºááŒá®áž á¡ááá·áºáááá·áºááŸááºáá¬áẠááá¯ááºááœááºááŸá¯ááœáẠááŒá áºáá±á«áºáá¬ááá·áº ááŒá¿áá¬áá»á¬ážááᯠáá¬ááœááºáááºá áááºážááᯠááœááºááŒá®ážááá·áºáá±á¬áẠáááºááá¯áá®á§áááá¬ááá¯á· áááºáá±á¬ááºááŒááºážá null pointers áá»á¬ážááᯠááá¯ááºážáá¶á·áá¬ážááŒááºážá ááŒá¬ážáá¶áá»á¬áž áá»á±á¬áºááœááºááŒááºážáá»á¬ážá áááºááŒáá·áº ááŒá áºáá±á«áºáá¬áá±á¬ ááŒá¿áá¬áá»á¬ážááᯠáá¬ááœááºáá±ážáá«áááºá á á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠááŒáá·áºáá±áááºá áááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº ááŸá®ááá¯á¡á¬ážáá¬ážááŸá¯áá»á¬ážááᯠá á®áá¶áááºá ááá±á¬áá»ááºááẠCargo package manager ááᯠáá®ááœááºáááºá crates.io repository ááᯠhosting libraries áá»á¬ážá¡ááœáẠáá¶á·ááá¯ážáá¬ážáá«áááºá
ááá¯ážáá¬ážá á áºáá±ážááŒááºážá á¡áá¬ááá¹áá¯ááá¯ááºááá¯ááºááŸá¯ááá¯ááŒá±áá¬áá¶ááŒááºážá á¡áá¬ááá¹áá¯áááºáááºážááá¯ááŒá±áá¬áá¶ááŒááºáž (scopes) ááá¯ááŒá±áá¬áá¶ááŒááºážááŸáá·áº áá¯ááºáá¯ááºáá±á¬ááºáá±á ááºá¡ááœááºáž áááºááá¯áá®áááºáá±á¬ááºááŒááºážáááŸááºáááºááŸá¯ááᯠá¡áá²ááŒááºááŒááºážáá»á¬ážááŸáá áºááá·áº Memory safety ááᯠRust ááœáẠáá¶á·ááá¯ážáá±ážáá«áááºá Rust ááẠááááºážááŒáá·áºááŒáá·áºáá»áŸá¶ááŸá¯áá»á¬ážááᯠá¡áá¬á¡ááœááºáá±ážáááºá á¡áá¯á¶ážáááŒá¯áá® ááŒá±á¬ááºážáá²ááá¯ááºáá±á¬áááºááá¯ážáá»á¬ážááᯠáááŒá áºááá±á áááºáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááºá á á¶áá áºáá»á áºááá¯ááºááœáẠááá¯ááá¯áá±á¬ááºážááœááºáá±á¬ á¡ááŸá¬ážáá»á¬ážááᯠááá¯ááºááœááºáááºá áá¯á¶áá±á¡á¬ážááŒáá·áº áááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ ááá¯ážáá¬ážáá»ááºáá»á¬ážááŸáá·áº ááááºážááŸááºáá»á¬ážá ááá±á¬ááá¬ážááᯠáá»áá·áºáá¯á¶ážáááºá áá¯áá¹ááá¡ááŸá¬ážáá»á¬ážááᯠá¡áááºážáá¯á¶ážááŒá áºá á±ááẠááá¯ááºáá¯á¶áá±á¬á¡ááŒáááºá á¬ááá¯ááºááŒááºážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá
á¡ááá áá®ááœááºáááºážáá áºááŸá¯áá»á¬áž-
- "async fn" ááŸáá·áº "-> impl Trait" áááºá¹áá±ááá»á¬ážááᯠáá®ážááá·áºá¡ááºá¹áá«áááºáá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯ááẠá
áœááºážáááºááᯠááá·áºááœááºážáá¬ážáááºá á¥ááá¬á¡á¬ážááŒáá·áºá â->impl Traitâ ááᯠá¡áá¯á¶ážááŒá¯á iterator áá
áºáá¯ááᯠááŒááºáá±ážááá·áº á
ááá¯ááºáááºážáááºážááᯠáááºáá±ážááá¯ááºáááº- trait Container { fn items(&self) -> impl Iterator; } impl MyContainer á¡ááœáẠááœááºááááºáᬠ{ fn items(&self) -> impl Iterator { self.items.iter(.cloned() } }
"async fn" ááᯠá¡áá¯á¶ážááŒá¯á á ááá¯ááºááá¹ááá¬áá»á¬ážááᯠáááºáá®ážááá¯ááºáááº- trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // fn fetch(&self, url: Url) --> impl Future; }
- ááœáŸááºááááºážáá»á¬ážááŸáá·áº áááºá
ááºáá±á¬ byte á¡á±á¬á·ááºáááºáá»á¬ážááᯠááœááºáá»ááºáááºá¡ááœáẠAPI ááᯠáááºááá·áºáá¬ážáááºá ááœáá¯áá·áºáá»á¬áž (â*const Tâ ááŸáá·áº â*mut Tâ ááá¯á·ááŸáá·áº á¡áá¯ááºáá¯ááºáá±á¬á¡áá«)á ááááºáá áááºážá¡ááœáẠâ::add(1)â áá²á·ááá¯á·áá±á¬ áááºáá±á¬ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºááŒá®áž âsize_of::()â á¡ááœááºá¡á
á¬ážááŸáá·áº áááºááá¯ááºááá·áº bytes á¡áá±á¡ááœááºááᯠáá±á«ááºážááá·áºááá¯ááºáááºá API á¡áá
áºááẠá€áá¯ááºáá±á¬ááºáá»ááºááᯠááá¯ážááŸááºážá
á±ááŒá®áž á¡áá»áá¯ážá¡á
á¬ážáá»á¬ážááᯠ"*const u8" ááá¯á·ááá¯áẠ"*mut u8" ááá¯á· áŠážá
áœá¬ááá»áá² byte offsets áá»á¬ážááᯠá
á®áá¶ááá·áºááœá²ááá¯ááºá
á±áá«áááºá
- pointer::byte_add
- ááœáŸááºááŒáá»ááº-:byte_offset
- ááœáŸááºááŒáá»ááº-:byte_offset_from
- ááœáŸááºááŒáá»ááº-:byte_sub
- ááœáŸááºááŒáá»ááº-:wrapping_byte_add
- ááœáŸááºááŒáá»ááº-:wrapping_byte_offset
- ááœáŸááºááŒáá»ááº-:wrapping_byte_sub
- rustc compiler á á
áœááºážáá±á¬ááºáááºááᯠááŒáŸáá·áºáááºááẠáááºáááºáá¯ááºáá±á¬ááºáá²á·áááºá Post-link á¡ááá·áºááœáẠáá¯ááºáá±á¬ááºááŒá®áž ááŒáá¯áááºááŒááºáááºáá¬ážáá±á¬ áá¯ááºáá±á¬ááºáá»ááºáááá¯ááá¯ááºá០á¡áá»ááºá¡áááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá·áº BOLT optimizer ááᯠáá±á«ááºážááá·áºáá¬ážáááºá BOLT ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááẠáááá¯áááºáᬠcache ááá¯ááá¯ááá¯áááá±á¬ááºá
áœá¬á¡áá¯á¶ážááŒá¯áááºá¡ááœáẠlibrustc_driver.so á
á¬ááŒáá·áºááá¯ááºáá¯ááºáá¡ááŒááºá¡áááºááá¯ááŒá±á¬ááºážáá²ááŒááºážááŒáá·áº compiler áááºáááºááŸá¯ááᯠ2% ááá·áºááŒááºáááºá
á±áááºá
LLVM ááœáẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºáž á¡áááºá¡ááœá±ážááᯠááŒáŸáá·áºáááºááẠ"-Ccodegen-units=1" ááœá±ážáá»ááºááŸá¯ááŒáá·áº rustc compiler ááᯠáááºáá±á¬ááºááŒááºáž áá«áááºáááºá áá¯ááºáá±á¬ááºáá²á·áá±á¬ á ááºážáááºááŸá¯áá»á¬ážááẠâ-Ccodegen-units=1â áááºáá±á¬ááºááŸá¯ááœáẠááá·áºááŸááºážááŒá± 1.5% ááŒáá·áº á áœááºážáá±á¬ááºááẠááŒáá·áºáááºáá¬áááºááᯠááŒááááºá áááºáá±á¬ááºáž ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážáá»á¬ážááᯠx86_64-unknown-linux-gnu ááááºáá±á¬ááºážá¡ááœááºáᬠáá¯á¶ááŸááºá¡á¬ážááŒáá·áº ááœáá·áºáá¬ážáááºá
Rust ááœááºáá±ážáá¬ážáá¬ážáá±á¬ Android ááááºáá±á¬ááºážá¡á áááºá¡ááá¯ááºážáá»á¬ážááááºáá±á¬ááºáá»áááºááá¯áá»áŸá±á¬á·áá»áááºá¡ááœááºááááºáá±á¬áºááŒáá¬ážáá±á¬ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááᯠGoogle ááŸá ááºážáááºáá²á·áááºá Android ááá¯áááºáá±á¬ááºáá±á¬á¡áá« â-C codegen-units=1â ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº toolkit áá¡ááœááºá¡á á¬ážááᯠ5.5% áá»áŸá±á¬á·áá»ááá¯ááºááŒá®áž áááºážáá áœááºážáá±á¬ááºáááºááᯠ1.8% ááá¯ážááŒáŸáá·áºááá¯ááºá á±áᬠtoolkit ááááºáá±á¬ááºáá»áááºááẠááŸá áºááá®ážáá«ážááá¯ážáá¬áááºá
ááá·áºááºá¡áá»ááẠá¡ááŸáá¯ááºá á¯áá±á¬ááºážááŒááºáž (â--gc-sectionsâ) ááᯠááœáá·áºááŒááºážááŒáá·áº á áœááºážáá±á¬ááºááẠ1.9% á¡áá áá»áááºáááºááŸá¯ á¡áá»áááºááá¯áá±á¬ááºážá¡á±á¬áẠáá¯ááºáá±á¬ááºááŒááºáž (LTO) 7.7% á¡áá ááŸáá·áº áááá¯ááá¯ááº-á¡ááŒá±áᶠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠáá¯ááºáá±á¬ááºááŸá¯áá»á¬áž (PGO) 19.8% á¡áá áááŸáá á±áá²á·áááºá áá±á¬ááºáá¯á¶ážááœááºá áááºáá±á¬ááºááŸá¯á¡ááŒááºááŸá¯ááºáž 24.7% á¡áá ááá¯ážááŒáŸáá·áºááá¯ááºá á±ááá·áº BOLT utility ááᯠá¡áá¯á¶ážááŒá¯á ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážáá»á¬ážááᯠá¡áá¯á¶ážáá»áá²á·áá±á¬áºáááºáž toolkit áá¡ááœááºá¡á á¬ážááẠ10.9% ááá¯ážáá¬áááºá
- API á á¡á
áááºá¡ááá¯ááºážá¡áá
áºááᯠáááºááŒáááºáá±á¬á¡áá»áá¯ážá¡á
á¬ážááá¯á· ááœáŸá±á·áá¬ážááŒá®ážá áááºážáááºážáá»á¬ážááŸáá·áº á
ááá¯ááºááá¹ááá¬áá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá¬ááœáẠáááºááŒáááºá¡á±á¬ááºááŒá¯áá¯ááºáá¬ážáááº-
- ááŒááºáá±á¬áºáá¬*::from_ptr
- FileTimes
- FileTimesExt
- ááá¯ááº-:set_modified
- ááá¯ááº-:set_times
- IpAddr::to_canonical
- Ipv6Addr::to_canonical
- ááœá±ážáá»ááºááŸá¯-:as_slice
- ááœá±ážáá»ááºááŸá¯-:as_mut_slice
- pointer::byte_add
- ááœáŸááºááŒáá»ááº-:byte_offset
- ááœáŸááºááŒáá»ááº-:byte_offset_from
- ááœáŸááºááŒáá»ááº-:byte_sub
- ááœáŸááºááŒáá»ááº-:wrapping_byte_add
- ááœáŸááºááŒáá»ááº-:wrapping_byte_offset
- ááœáŸááºááŒáá»ááº-:wrapping_byte_sub
- ááááºážáá±áá»á¬ážá¡á
á¬áž áááºááá·áºá¡ááŒá±á¬ááºážá¡áá¬ááœááºáááᯠáááºážááá¯á¡áá¯á¶ážááŒá¯ááẠááŒá
áºááá¯ááºááŒá±ááᯠáá¯á¶ážááŒááºáá±ážááá·áº "const" attribute ááᯠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯áááº-
- Ipv6Addr::to_ipv4_mapped
- Uninit::assume_init_read ááŒá áºááá¯ááºáá«áááºá
- Uninit::áá¯áááŒá áºááá¯ááºáááºá
- mem :: ááœá²ááŒá¬ážáááºáá¶áááºá
- mem :: áá¯á
- áá¶á·ááá¯ážááŸá¯ááááá¡ááá·áºááᯠcsky-unknown-linux-gnuabiv2hfá i586-unknown-netbsd ááŸáá·áº mipsel-unknown-netbsd ááááºáá±á¬ááºážáá»á¬ážá¡ááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·áááºá ááááá¡ááá·áºááœáẠá¡ááŒá±áá¶áá¶á·ááá¯ážááŸá¯áá«áááºáá±á¬áºáááºáž á¡ááá¯á¡áá»á±á¬ááºá ááºážáááºááŒááºážáááŸááá²á ááá¬ážáááºáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáá¯ááºááŒááºááŒááºáž ááá¯á·ááá¯áẠáá¯ááºááá¯áááºáá±á¬ááºááá¯ááºáááºááŸááááŸá á á áºáá±ážááŒááºážáááŒá¯áá²ááŒá áºáááºá
ááá¯á·á¡ááŒááºá Rust áá¬áá¬á
áá¬ážááŒáá·áº áá±ážáá¬ážáá¬ážáá±á¬ á¡áá°ážááŒá¯ kernel (unikernel) ááᯠáá®ááœááºáá¬ážááá·áº Hermit ááá±á¬áá»ááºá áá¬ážááŸááºážá¡áá
áºááᯠááŸááºáá¬ážááá¯ááºááŒá®ážá á¡ááá¯á¡ááœáŸá¬áá»á¬ážááá«áá² ááá¯ááºááá¯ááºáá«ááŸááá±á¬ á¡ááá®áá±ážááŸááºážáá»á¬ážáááºáá±á¬ááºááŒááºážá¡ááœáẠáááááá¬áá»á¬ážááᯠáá¶á·ááá¯ážáá±ážááá·áº Hermit ááá±á¬áá»ááºá áá¬ážááŸááºážá¡áá
áºááᯠááŸááºáá¬ážááá¯ááºáá«áááºá ááŸáá·áº operating system áááŸááá²á áááºáá±á¬ááºáá±á¬á¡áá«ááœááºá á¡ááá®áá±ážááŸááºážááẠOS kernel ááŸáá·áº system libraries ááá¯á·ááŸáá·áº áá»áááºáááºááŒááºážáááŒá¯áá² ááá¯á¡ááºáá±á¬áá¯ááºáá±á¬ááºááá¯ááºá
áœááºážá¡á¬ážáá¯á¶ážááᯠáá®ážááŒá¬ážá¡áá±á¬ááºá¡áááºáá±á¬áºáá±ážááá·áº á
á¬ááŒáá·áºááá¯ááºáá
áºáá¯ááŸáá·áº áááºááŒáááºá
áœá¬áá»áááºáááºáá¬ážáááºá ááá±á¬áá»ááºáá¯ááºááᯠApache 2.0 ááŸáá·áº MIT ááá¯ááºá
ááºáá»á¬ážá¡á±á¬ááºááœáẠááŒáá·áºáá±áá¬ážáááºá á
ááºážáá±ážááœá²ááẠRustá Goá Fortraná C ááŸáá·áº C++ ááŒáá·áº áá±ážáá¬ážáá¬ážáá±á¬ á¡ááá®áá±ážááŸááºážáá»á¬ážááᯠáá®ážááá·áºáá¯ááºáá±á¬ááºááŒááºážá¡ááœáẠáá¶á·ááá¯ážáá¬ážáááºá á¡ááá¯áá«ááá±á¬áá»ááºááẠQEMU ááŸáá·áº KVM ááᯠá¡áá¯á¶ážááŒá¯á Hermit ááá¯ááœáá·áºáááºááœáá·áºááŒá¯ááá·áº áááºážáááá¯ááºááá¯áẠbootloader ááá¯áá®ááœááºáá±áá«áááºá
source: opennet.ru