Mozilla ํ๋ก์ ํธ์ ์ํด ์ค๋ฆฝ๋์์ง๋ง ํ์ฌ๋ ๋ ๋ฆฝ์ ์ธ ๋น์๋ฆฌ ์กฐ์ง์ธ Rust Foundation์ ํ์์ผ๋ก ๊ฐ๋ฐ๋ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด Rust 1.57์ ์ถ์๊ฐ ๋ฐํ๋์์ต๋๋ค. ์ด ์ธ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ค์ ์ ๋๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํ๋ฉฐ ๊ฐ๋น์ง ์์ง๊ธฐ๋ ๋ฐํ์์ ์ฌ์ฉํ์ง ์๊ณ ๋์ ์์ ๋ณ๋ ฌ์ฑ์ ๋ฌ์ฑํ ์ ์๋ ์๋จ์ ์ ๊ณตํฉ๋๋ค(๋ฐํ์์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ณธ ์ด๊ธฐํ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ก ๋จ์ถ๋ฉ๋๋ค).
Rust์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ํฌ์ธํฐ๋ฅผ ์กฐ์ํ ๋ ์ค๋ฅ๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ํด์ ๋ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ก์ธ์คํ๋ ๊ฒ, ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ๋ฒํผ ์ค๋ฒ๋ฐ ๋ฑ๊ณผ ๊ฐ์ ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ์กฐ์์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐํฌํ๊ณ ์ด์ ๋ธ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ฉฐ ์ข ์์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ๋ก์ ํธ๋ Cargo ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. crates.io ์ ์ฅ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํธ์คํ ์ ์ํด ์ง์๋ฉ๋๋ค.
์ฃผ์ ํ์ :
- "panic!" ๋งคํฌ๋ก ์ฌ์ฉ์ด ์์ ํ๋์์ต๋๋ค. "const fn" ์ ์ธ๊ณผ ๊ฐ์ด ์ปดํ์ผ ์ค์ ์์ฑ๋ ์ปจํ ์คํธ์์. ๋ํ "ํจ๋!"์ ์ฌ์ฉํ๋ ๊ฒ ์ธ์๋ const ์ ์ธ์ ํตํด "assert!" ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ ๊ธฐํ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ API. ์์ ํ๋ ์์ง ์ ์ฒด ํฌ๋งท ์ธํ๋ผ๋ฅผ ํฌ๊ดํ์ง ์์ผ๋ฏ๋ก ํ์ฌ ํํ์์๋ "ํจ๋!" ๋งคํฌ๋ก๊ฐ ๋ฐ์ํฉ๋๋ค. ์ ์ ๋ฌธ์์ด(panic!(โ...")) ๋๋ (panic!("{}", a))๋ฅผ ๋์ฒดํ ๋ ๋จ์ผ ๋ณด๊ฐ ๊ฐ "&str"๊ณผ ํจ๊ป๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ "{๋ก ๋์ฒดํ๋ ๊ฒ์ผ๋ก ์ ํ๋์ด์ผ ํฉ๋๋ค. }" ํ์ ์ง์ ์ ๋ฐ ๊ธฐํ ์ ํ์ด ์์ต๋๋ค. ์์ผ๋ก๋ ์์ ์ปจํ ์คํธ์์ ๋งคํฌ๋ก์ ์ ์ฉ ๊ฐ๋ฅ์ฑ์ด ํ์ฅ๋ ์์ ์ด์ง๋ง ์์ ํ๋ ๊ธฐ๋ฅ์ ์ด๋ฏธ ์ปดํ์ผ ๋จ๊ณ์์ ์ด์ค์ ํ์ธ์ ์ํํ๊ธฐ์ ์ถฉ๋ถํฉ๋๋ค. const _: () = ์ฃผ์ฅ!(std::mem::size_of:: () == 64); const _: () = ์ฃผ์ฅ!(std::mem::size_of:: () == 8);
- Cargo ํจํค์ง ๊ด๋ฆฌ์๋ "dev", "release", "test" ๋ฐ "bench"์ ๊ตญํ๋์ง ์๊ณ ์์์ ์ด๋ฆ์ ๊ฐ์ง ํ๋กํ์ ์ฌ์ฉ์ ํ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ต์ข ์ ํ ์ด์ ๋ธ๋ฆฌ๊ฐ ์์ฑ๋ ๋๋ง ์ฐ๊ฒฐ ๋จ๊ณ(LTO)์์ ์ต์ ํ๋ฅผ ํ์ฑํํ๋ ค๋ฉด Cargo.toml์์ "์์ฐ" ํ๋กํ์ ์์ฑํ๊ณ "lto = true" ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์์ ์ ํ๋กํ์ ์ ์ํ ๋ ๊ธฐ์กด ํ๋กํ์ ์ง์ ํ์ฌ ๊ธฐ๋ณธ ์ค์ ์ ์์๋ฐ์์ผ ํฉ๋๋ค. ์๋ ์์์๋ "lto = true" ํ๋๊ทธ๋ฅผ ํฌํจํ์ฌ "๋ฆด๋ฆฌ์ค" ํ๋กํ์ ๋ณด์ํ๋ "ํ๋ก๋์ " ํ๋กํ์ ์์ฑํฉ๋๋ค. ํ๋กํ ์์ฒด๋ "--profile Production" ์ต์ ์ ์ฌ์ฉํ์ฌ Cargo๋ฅผ ํธ์ถํ์ฌ ํ์ฑํ๋๋ฉฐ ์ด์ ๋ธ๋ฆฌ ์ํฐํฉํธ๋ "target/production" ๋๋ ํฐ๋ฆฌ์ ๋ฐฐ์น๋ฉ๋๋ค. [profile.production] ์์ = "๋ฆด๋ฆฌ์ค" lto = true
- Vec, String, HashMap, HashSet ๋ฐ VecDeque ์ ํ์ ๋ํ try_reserve ์ฌ์ฉ์ด ์์ ํ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์์ ์ ๋น๋๋ฅผ ์ค์ด๊ณ ํผํ๊ธฐ ์ํด ํน์ ์ ํ์ ํน์ ์์ ์์ ๋ํด ๋ฏธ๋ฆฌ ๊ณต๊ฐ์ ์์ฝํ ์ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก ์ธํด ์๋ ์ค์ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค.
- "m!{ .. }.method()" ๋ฐ "m!{ .. }?"์ ๊ฐ์ ํํ์์์ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋งคํฌ๋ก๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
- File::read_to_end ๋ฐ read_to_string ํจ์์ ์คํ์ด ์ต์ ํ๋์์ต๋๋ค.
- ์ ๋์ฝ๋ ์ฌ์์ ๋ํ ์ง์์ด ๋ฒ์ 14.0์ผ๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค.
- ๋ฐํ ๊ฐ์ด ๋ฌด์๋๋ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํ๋๋ก "#[must_use]"๋ก ํ์๋ ํจ์ ์๋ฅผ ํ์ฅํ์ต๋๋ค. ์ด๋ ํจ์๊ฐ ์ ๊ฐ์ ๋ฐํํ๋ ๋์ ๊ฐ์ ๋ณ๊ฒฝํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ์ฌ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- libgccjit๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ ์์ฑ์ ์ํ ์คํ์ ๋ฐฑ์๋๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- API์ ์๋ก์ด ๋ถ๋ถ์ด ์์ ํ๋ ํน์ฑ์ ๋ฉ์๋ ๋ฐ ๊ตฌํ์ ํฌํจํ์ฌ ์์ ์ ์ธ ๋ฒ์ฃผ๋ก ์ด๋๋์์ต๋๋ค.
- [ํฐ; N]::as_mut_slice
- [ํฐ; N]::as_slice
- ์ปฌ๋ ์ ::TryReserveError
- HashMap::try_reserve
- HashSet::try_reserve
- ๋ฌธ์์ด::try_reserve
- ๋ฌธ์์ด::try_reserve_exact
- Vec::try_reserve
- Vec::try_reserve_exact
- VecDeque::try_reserve
- VecDeque::try_reserve_exact
- ๋ฐ๋ณต์::map_while
- iter::MapWhile
- proc_macro::์ฌ์ฉ ๊ฐ๋ฅ
- ๋ช ๋ น::get_program
- ๋ช ๋ น::get_args
- ๋ช ๋ น::get_envs
- ๋ช ๋ น::get_current_dir
- CommandArgs
- CommandEnvs
- ์์ ๋์ ๋ชจ๋ ์ปจํ ์คํธ์์ ์ฌ์ฉํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ "const" ์์ฑ์ ํจ์ ํํธ::unreachable_unchecked์์ ์ฌ์ฉ๋ฉ๋๋ค.
- armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi ๋ฐ armv7a-kmc-์ ๋ํ ์ธ ๋ฒ์งธ ์์ค์ ์ง์์ด ๊ตฌํ๋์์ต๋๋ค. solid_asp3-eabihf ํ๋ซํผ. ์ธ ๋ฒ์งธ ์์ค์๋ ๊ธฐ๋ณธ ์ง์์ด ํฌํจ๋์ง๋ง ์๋ํ๋ ํ ์คํธ, ๊ณต์ ๋น๋ ๊ฒ์ ๋๋ ์ฝ๋ ๋น๋ ๊ฐ๋ฅ ์ฌ๋ถ ํ์ธ์ ํฌํจ๋์ง ์์ต๋๋ค.
์ถ์ฒ : opennet.ru