Mozilla ํ๋ก์ ํธ์ ์ํด ์ค๋ฆฝ๋์์ง๋ง ํ์ฌ๋ ๋ ๋ฆฝ์ ์ธ ๋น์๋ฆฌ ์กฐ์ง์ธ Rust Foundation์ ํ์์ผ๋ก ๊ฐ๋ฐ๋ Rust 1.61 ๋ฒ์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ถ์๊ฐ ๋ฐํ๋์์ต๋๋ค. ์ด ์ธ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ค์ ์ ๋๊ณ ๊ฐ๋น์ง ์์ง๊ธฐ ๋ฐ ๋ฐํ์(๋ฐํ์์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ณธ ์ด๊ธฐํ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ก ์ถ์๋จ)์ ์ฌ์ฉ์ ํผํ๋ฉด์ ๋์ ์์ ๋ณ๋ ฌ์ฑ์ ๋ฌ์ฑํ ์ ์๋ ์๋จ์ ์ ๊ณตํฉ๋๋ค.
Rust์ ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ํฌ์ธํฐ๋ฅผ ์กฐ์ํ ๋ ๊ฐ๋ฐ์๋ฅผ ์ค๋ฅ๋ก๋ถํฐ ๋ณดํธํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ํด์ ๋ ํ ์ก์ธ์ค, null ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ๋ฒํผ ์ค๋ฒ๋ฐ ๋ฑ๊ณผ ๊ฐ์ ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐฐํฌ, ๋น๋ ์ ๊ณต ๋ฐ ์ข ์์ฑ ๊ด๋ฆฌ๋ฅผ ์ํด ํ๋ก์ ํธ๋ Cargo ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ๊ฐ๋ฐํฉ๋๋ค. crates.io ์ ์ฅ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํธ์คํ ์ ์ํด ์ง์๋ฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ปดํ์ผ ์๊ฐ์ ์ฐธ์กฐ ํ์ธ, ๊ฐ์ฒด ์์ ๊ถ ์ถ์ , ๊ฐ์ฒด ์๋ช (๋ฒ์) ์ถ์ ๋ฐ ์ฝ๋ ์คํ ์ค ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค์ ์ ํ์ฑ ํ๊ฐ๋ฅผ ํตํด Rust์์ ์ ๊ณต๋ฉ๋๋ค. Rust๋ ๋ํ ์ ์ ์ค๋ฒํ๋ก์ ๋ํ ๋ณดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ์ฌ์ฉํ๊ธฐ ์ ์ ๋ณ์ ๊ฐ์ ํ์ ์ด๊ธฐํ๊ฐ ํ์ํ๋ฉฐ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ค๋ฅ๋ฅผ ๋ ์ ์ฒ๋ฆฌํ๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ณ ์ฐธ์กฐ ๋ฐ ๋ณ์ ๊ฐ๋ ์ ์ ์ฉํ๊ณ , ๊ฐ๋ ฅํ ์ ์ ์ ํ ์ง์ ์ ์ ๊ณตํ์ฌ ๋ ผ๋ฆฌ์ ์ค๋ฅ๋ฅผ ์ต์ํํฉ๋๋ค.
์ฃผ์ ํ์ :
- ๊ธฐ๋ณธ ํจ์์์ ์์ ๋ง์ ๋ฐํ ์ฝ๋๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์๋ Rust์ ์ฃผ์ ํจ์๋ "()"(๋จ์) ์ ํ๋ง ๋ฐํํ ์ ์์๋๋ฐ, ์ด๋ ๊ฐ๋ฐ์๊ฐ ๋ช ์์ ์ผ๋ก "process::exit(code)" ํจ์๋ฅผ ํธ์ถํ์ง ์๋ ํ ํญ์ ์ฑ๊ณต์ ์ธ ์ข ๋ฃ ์ํ๋ฅผ ๋ํ๋ ๋๋ค. Rust 1.26์์๋ main ํจ์์ ๋ถ์์ ํ Termination ํน์ฑ์ ์ฌ์ฉํ์ฌ C ํ๋ก๊ทธ๋จ์ EXIT_SUCCESS ๋ฐ EXIT_FAILURE ์ฝ๋์ ํด๋นํ๋ "Ok" ๋ฐ "Err" ๊ฐ์ ๋ฐํํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ต๋๋ค. Rust 1.61์์๋ Termination ํน์ฑ์ด ์์ ์ ์ผ๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ ํน์ ๋ฐํ ์ฝ๋๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ๋ณ๋์ ExitCode ์ ํ์ด ์ ์๋์์ต๋๋ค. ์ด ์ ํ์ ๋ฏธ๋ฆฌ ์ ์๋ ์์ SUCCESS ๋ฐ FAILURE์ From ๋ฉ์๋๋ฅผ ๋ชจ๋ ์ ๊ณตํ์ฌ ํ๋ซํผ๋ณ ๋ฐํ ์ ํ์ ์ถ์ํํฉ๋๋ค. ์์์ ๋ฐํ ์ฝ๋๋ฅผ ๋ฐํํฉ๋๋ค. std::process::ExitCode๋ฅผ ์ฌ์ฉํ์ญ์์ค. fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } ์ข ๋ฃ์ฝ๋::์ฑ๊ณต }
- "const fn" ํํ์์ ์ฌ์ฉํ์ฌ ์ ์๋ ํจ์์ ์ถ๊ฐ ๊ธฐ๋ฅ์ด ์์ ํ๋์ด ์ผ๋ฐ ํจ์๋ก ํธ์ถํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ์์ ๋์ ๋ชจ๋ ์ปจํ ์คํธ์์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ์ด๋ฌํ ํจ์๋ ๋ฐํ์์ด ์๋ ์ปดํ์ผ ํ์์ ๊ณ์ฐ๋๋ฏ๋ก ์์์์๋ง ์ฝ์ ์ ์๋ ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ํน์ ์ ํ ์ฌํญ์ด ์ ์ฉ๋ฉ๋๋ค. ์ ๋ฒ์ ์์๋ ํจ์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ ๊ธฐ๋ณธ ์์ ์ด const ํจ์ ๋ด์์ ํ์ฉ๋ฉ๋๋ค(ํฌ์ธํฐ ์์ฑ, ์ ๋ฌ ๋ฐ ์บ์คํ ์ ํ์ฉ๋์ง๋ง ํฌ์ธํฐ๋ก ํจ์๋ฅผ ํธ์ถํ ์๋ ์์). T: Copy์ ๊ฐ์ const ํจ์์ ์ผ๋ฐ ๋งค๊ฐ๋ณ์์ ๋ํ ํน์ฑ ๋ฒ์; ๋์ ์ผ๋ก ์ ๋ฌ ๊ฐ๋ฅํ ํน์ฑ(dyn Trait) impl ํจ์ ์ธ์ ๋ฐ ๋ฐํ ๊ฐ์ ๋ํ ํน์ฑ ์ ํ์ ๋๋ค.
- std::io์ Stdin, Stdout ๋ฐ Stderr์ ์ฒ๋ฆฌํ๋ ์คํธ๋ฆผ์ ์ด์ ์ ๊ฒจ ์์ ๋ ์ ์ ์๋ช ("์ ์ ")์ ๊ฐ์ง๋ฏ๋ก "let out = std::io::stdout().lock();"๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ์ ํ์ฉํฉ๋๋ค. ํ๋์ ํํ์์ผ๋ก ํธ๋ค์ ์ป๊ณ ์ ๊ธ์ ์ค์ ํ๋ ๊ฒ์ ๋๋ค.
- API์ ์๋ก์ด ๋ถ๋ถ์ด ์์ ํ๋ ํน์ฑ์ ๋ฉ์๋ ๋ฐ ๊ตฌํ์ ํฌํจํ์ฌ ์์ ์ ์ธ ๋ฒ์ฃผ๋ก ์ด๋๋์์ต๋๋ค.
- ํ::static_mut
- ํ::static_ref
- Vec::retain_mut
- VecDeque::retain_mut
- ์ปค์ ์ฐ๊ธฐ
- std::os::unix::net::SocketAddr::from_pathname
- ํ์ค::ํ๋ก์ธ์ค::ExitCode
- ํ์ค::ํ๋ก์ธ์ค::์ข ๋ฃ
- std::์ค๋ ๋::JoinHandle::is_finished
- ์์ ๋์ ๋ชจ๋ ์ปจํ
์คํธ์์ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ ๊ฒฐ์ ํ๋ "const" ์์ฑ์ ํจ์์์ ์ฌ์ฉ๋ฉ๋๋ค.
- ::offset ๋ฐ ::offset
- ::wrapping_offset ๋ฐ ::wrapping_offset
- ::add ๋ฐ ::add
- ::sub ๋ฐ ::sub
- ::wrapping_add ๋ฐ ::wrapping_add
- ::wrapping_sub ๋ฐ ::wrapping_sub
- ::as_mut_ptr
- ::as_ptr_range
- ::as_mut_ptr_range
๋ํ ํ์จ์ด์ ์ฌ์ฉ๋๋ Xous ๋ง์ดํฌ๋ก์ปค๋ ์ด์ ์ฒด์ ๋ฅผ ๊ฐ๋ฐํ๋ ๋์ 100๋ง ์ค์ ์ฝ๋๋ฅผ ์์ฑํ ํ Rust ์ธ์ด์ ๋ํ ์ธ์์ ์์ฝํ "Rust: A Critical Retrospective" ๊ธฐ์ฌ๋ฅผ ์ฐธ๊ณ ํ ์ ์์ต๋๋ค. ๋จ์ ์ผ๋ก๋ ์ดํดํ๊ธฐ ์ด๋ ค์ด ๊ตฌ๋ฌธ, ์ธ์ด์ ๋ถ์์ ์ฑ๊ณผ ์ง์์ ์ธ ๊ฐ๋ฐ, ๋ฐ๋ณต ๊ฐ๋ฅํ ๋น๋ ๋ถ์กฑ, Crates.io์ ์ข
์์ฑ ์ ๋ขฐ์ ๋ํ ์ผ๋ฐ์ ์ธ ๋ฌธ์ , ๋ณด์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ํน์ ๊ท์จ์ ์ ์งํด์ผ ํ๋ ํ์์ฑ ๋ฑ์ด ์์ต๋๋ค. ๊ธฐ๋๋ฅผ ๋ฐ์ด๋๋ ๊ธฐ๋ฅ์๋ ์ฝ๋ ๋ฆฌํฉํ ๋ง์ ์ํ ๋๊ตฌ์ ์ ์ํ ํ๋กํ ํ์ดํ ์ค์ ์ถ๊ฐ๋ "ํดํน" ์ฌ์์
์ด ํฌํจ๋ฉ๋๋ค.
์ถ์ฒ : opennet.ru