Mozilla ํ๋ก์ ํธ์ ์ํด ์ค๋ฆฝ๋์์ง๋ง ํ์ฌ๋ ๋ ๋ฆฝ์ ์ธ ๋น์๋ฆฌ ์กฐ์ง์ธ Rust Foundation์ ํ์์ผ๋ก ๊ฐ๋ฐ๋ Rust 1.64 ๋ฒ์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ถ์๊ฐ ๋ฐํ๋์์ต๋๋ค. ์ด ์ธ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ค์ ์ ๋๊ณ ๊ฐ๋น์ง ์์ง๊ธฐ ๋ฐ ๋ฐํ์(๋ฐํ์์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ณธ ์ด๊ธฐํ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ก ์ถ์๋จ)์ ์ฌ์ฉ์ ํผํ๋ฉด์ ๋์ ์์ ๋ณ๋ ฌ์ฑ์ ๋ฌ์ฑํ ์ ์๋ ์๋จ์ ์ ๊ณตํฉ๋๋ค.
Rust์ ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ํฌ์ธํฐ๋ฅผ ์กฐ์ํ ๋ ๊ฐ๋ฐ์๋ฅผ ์ค๋ฅ๋ก๋ถํฐ ๋ณดํธํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ํด์ ๋ ํ ์ก์ธ์ค, null ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ๋ฒํผ ์ค๋ฒ๋ฐ ๋ฑ๊ณผ ๊ฐ์ ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐฐํฌ, ๋น๋ ์ ๊ณต ๋ฐ ์ข ์์ฑ ๊ด๋ฆฌ๋ฅผ ์ํด ํ๋ก์ ํธ๋ Cargo ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ๊ฐ๋ฐํฉ๋๋ค. crates.io ์ ์ฅ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํธ์คํ ์ ์ํด ์ง์๋ฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ปดํ์ผ ์๊ฐ์ ์ฐธ์กฐ ํ์ธ, ๊ฐ์ฒด ์์ ๊ถ ์ถ์ , ๊ฐ์ฒด ์๋ช (๋ฒ์) ์ถ์ ๋ฐ ์ฝ๋ ์คํ ์ค ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค์ ์ ํ์ฑ ํ๊ฐ๋ฅผ ํตํด Rust์์ ์ ๊ณต๋ฉ๋๋ค. Rust๋ ๋ํ ์ ์ ์ค๋ฒํ๋ก์ ๋ํ ๋ณดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ์ฌ์ฉํ๊ธฐ ์ ์ ๋ณ์ ๊ฐ์ ํ์ ์ด๊ธฐํ๊ฐ ํ์ํ๋ฉฐ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ค๋ฅ๋ฅผ ๋ ์ ์ฒ๋ฆฌํ๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ณ ์ฐธ์กฐ ๋ฐ ๋ณ์ ๊ฐ๋ ์ ์ ์ฉํ๊ณ , ๊ฐ๋ ฅํ ์ ์ ์ ํ ์ง์ ์ ์ ๊ณตํ์ฌ ๋ ผ๋ฆฌ์ ์ค๋ฅ๋ฅผ ์ต์ํํฉ๋๋ค.
์ฃผ์ ํ์ :
- ์ปดํ์ผ๋ฌ, Cargo ํจํค์ง ๊ด๋ฆฌ์ ๋ฐ libstd ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ Linux ํ๊ฒฝ์ ๋ํ ์๊ตฌ ์ฌํญ์ด ์ฆ๊ฐํ์ต๋๋ค. Glibc์ ๋ํ ์ต์ ์๊ตฌ ์ฌํญ์ ๋ฒ์ 2.11์์ 2.17๋ก, Linux ์ปค๋์ ๋ฒ์ 2.6.32์์ 3.2๋ก ์ฆ๊ฐํ์ต๋๋ค. ์ ํ์ฌํญ์ libstd๋ก ๋น๋๋ Rust ์ ํ๋ฆฌ์ผ์ด์
์คํ ํ์ผ์๋ ์ ์ฉ๋ฉ๋๋ค. ๋ฐฐํฌ ํคํธ RHEL 7, SLES 12-SP5, Debian 8 ๋ฐ Ubuntu 14.04๋ ์๋ก์ด ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํฉ๋๋ค. RHEL 6, SLES 11-SP4, Debian 7 ๋ฐ Ubuntu 12.04์ ๋ํ ์ง์์ด ์ค๋จ๋ฉ๋๋ค. ์ด์ Linux ์ปค๋์ด ์๋ ํ๊ฒฝ์์ Rust ๊ธฐ๋ฐ ์คํ ํ์ผ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ ์์คํ
์ ์
๊ทธ๋ ์ด๋ํ๊ฑฐ๋, ์ด์ ๋ฒ์ ์ ์ปดํ์ผ๋ฌ๋ฅผ ์ ์งํ๊ฑฐ๋, ํธํ์ฑ์ ์ ์งํ๊ธฐ ์ํด ๊ณ์ธต์ด ์๋ ์์ฒด libstd ํฌํฌ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด์ Linux ์์คํ ์ ๋ํ ์ง์์ ์ข ๋ฃํ๋ ์ด์ ์ค์๋ ์ด์ ํ๊ฒฝ๊ณผ์ ํธํ์ฑ์ ๊ณ์ ์ ์งํ๊ธฐ ์ํ ๋ฆฌ์์ค๊ฐ ์ ํ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ ๊ฑฐ์ Glibc๋ฅผ ์ง์ํ๋ ค๋ฉด LLVM ๋ฐ ํฌ๋ก์ค ์ปดํ์ผ ์ ํธ๋ฆฌํฐ์ ๋ฒ์ ์๊ตฌ ์ฌํญ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์ง์์ ์ธ ํตํฉ ์์คํ ์ ์ฒดํฌ์ธํ ๋ ๋ ๊ฑฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ปค๋ ๋ฒ์ ์๊ตฌ ์ฌํญ์ด ์ฆ๊ฐํ ์ด์ ๋ ์ด์ ์ปค๋๊ณผ์ ํธํ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๊ณ์ธต์ ์ ์งํ ํ์ ์์ด libstd์์ ์๋ก์ด ์์คํ ํธ์ถ์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- IntoFuture ํน์ฑ์ ์์ ํ๋์ด IntoIterator์ ์ ์ฌํ์ง๋ง "for ... in ..." ๋ฃจํ ๋์ ".await"๋ฅผ ์ฌ์ฉํ๋ค๋ ์ ์์ ํ์์ ๋ค๋ฆ ๋๋ค. IntoFuture์ ๊ฒฐํฉํ๋ฉด ".await" ํค์๋๋ Future ํน์ฑ๋ฟ๋ง ์๋๋ผ Future๋ก ๋ณํ๋ ์ ์๋ ๋ค๋ฅธ ์ ํ๋ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
- Rust-analyzer ์ ํธ๋ฆฌํฐ๋ Rust ๋ฆด๋ฆฌ์ค์ ํจ๊ป ์ ๊ณต๋๋ ์ ํธ๋ฆฌํฐ ๋ชจ์์ ํฌํจ๋์ด ์์ต๋๋ค. ์ด ์ ํธ๋ฆฌํฐ๋ Rustup(Rustup ๊ตฌ์ฑ ์์์ Rust-Analyzer ์ถ๊ฐ)์ ์ฌ์ฉํ์ฌ ์ค์นํ ์๋ ์์ต๋๋ค.
- Cargo ํจํค์ง ๊ด๋ฆฌ์์๋ Rust ๋ฒ์ ๋ฐ ์ ์ฅ์ URL๊ณผ ๊ฐ์ ํจํค์ง ๊ฐ ๊ณตํต ํ๋ ๊ฐ์ ์ค๋ณต์ ์ ๊ฑฐํ๊ธฐ ์ํด ์์ ๊ณต๊ฐ ์์์ด ํฌํจ๋์ด ์์ต๋๋ค. ํ ๋ฒ์ ์ฌ๋ฌ ๋์ ํ๋ซํผ์ ๋น๋ํ๊ธฐ ์ํ ์ง์๋ ์ถ๊ฐ๋์์ต๋๋ค(์ด์ "--target" ์ต์ ์ ๋ ์ด์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค).
- API์ ์๋ก์ด ๋ถ๋ถ์ด ์์ ํ๋ ํน์ฑ์ ๋ฉ์๋ ๋ฐ ๊ตฌํ์ ํฌํจํ์ฌ ์์ ์ ์ธ ๋ฒ์ฃผ๋ก ์ด๋๋์์ต๋๋ค.
- ๋ฏธ๋::์ธํฌํจ์ฒ
- ์ซ์::NonZero*::checked_mul
- ์ซ์::NonZero*::checked_pow
- ์ซ์::NonZero*::saturating_mul
- ์ซ์::NonZero*::saturating_pow
- ์ซ์::NonZeroI*::abs
- ์ซ์::NonZeroI*::checked_abs
- ์ซ์::NonZeroI*::overflowing_abs
- ์ซ์::NonZeroI*::saturating_abs
- ์ซ์::NonZeroI*::unsigned_abs
- ์ซ์::NonZeroI*::wrapping_abs
- ์ซ์::NonZeroU*::checked_add
- ์ซ์::NonZeroU*::checked_next_power_of_two
- ์ซ์::NonZeroU*::saturating_add
- os::unix::ํ๋ก์ธ์ค::CommandExt::process_group
- os::windows::fs::FileTypeExt::is_symlink_dir
- os::windows::fs::FileTypeExt::is_symlink_file
- ์ด์ ์ std::ffi ๋ชจ๋์์ ์์ ํ๋ C ํธํ ์ ํ์ด ์ฝ์ด ๋ฐ alloc ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ถ๊ฐ๋์์ต๋๋ค.
- ์ฝ์ด::ffi::CStr
- ์ฝ์ด::ffi::FromBytesWithNulError
- ํ ๋น::ffi::CString
- alloc::ffi::FromVecWithNulError
- alloc::ffi::IntoStringError
- ํ ๋น::ffi::NulError
- ์ด์ ์ std::os::raw ๋ชจ๋์์ ์์ ํ๋ C ์ ํ์ด core::ffi ๋ฐ std::ffi ๋ชจ๋์ ์ถ๊ฐ๋์์ต๋๋ค(์๋ฅผ ๋ค์ด uint ๋ฐ ulong C ์ ํ์ ๋ํด c_uint ๋ฐ c_ulong ์ ํ์ด ์ ์๋์์ต๋๋ค).
- ffi::c_char
- ffi::c_double
- ffi::c_float
- ffi::c_int
- ffi::c_long
- ffi::c_longlong
- ffi::c_schar
- ffi::c_short
- ffi::c_uchar
- ffi::c_uint
- ffi::c_ulong
- ffi::c_ulonglong
- ffi::c_ushort
- Poll ๋ฉ์ปค๋์ฆ๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์๋๋ก ํ์ ์์ค ํธ๋ค๋ฌ๊ฐ ์์ ํ๋์์ต๋๋ค(ํฅํ์๋ Pull ๋ฐ Pin๊ณผ ๊ฐ์ ํ์ ์์ค ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์๋ ๋จ์ํ๋ API๋ฅผ ์ ๊ณตํ ๊ณํ์
๋๋ค).
- ๋ฏธ๋::poll_fn
- ์์ ::์ค๋น!
- ์์ ๋์ ๋ชจ๋ ์ปจํ ์คํธ์์ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ ๊ฒฐ์ ํ๋ "const" ์์ฑ์ Slice::from_raw_parts ํจ์์์ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ค ์ปดํฉํธํ๊ฒ ์ ์ฅํ๊ธฐ ์ํด Ipv4Addr, Ipv6Addr, SocketAddrV4 ๋ฐ SocketAddrV6 ๊ตฌ์กฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ด ๋ณ๊ฒฝ๋์์ต๋๋ค. ๋ฎ์ ์์ค์ ๊ตฌ์กฐ ์กฐ์์ ์ํด std::mem::transmute๋ฅผ ์ฌ์ฉํ๋ ๋จ์ผ ํฌ๋ ์ดํธ ํจํค์ง์๋ ํธํ์ฑ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค.
- Windows ํ๋ซํผ์ฉ Rust ์ปดํ์ผ๋ฌ ๋น๋์์๋ PGO ์ต์ ํ(ํ๋กํ์ผ ๊ธฐ๋ฐ ์ต์ ํ)๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ ์ปดํ์ผ ์ฑ๋ฅ์ 10-20% ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์ปดํ์ผ๋ฌ๋ ํน์ ๊ตฌ์กฐ์์ ์ฌ์ฉ๋์ง ์๋ ํ๋์ ๋ํ ์๋ก์ด ๊ฒฝ๊ณ ๋ฅผ ๊ตฌํํ์ต๋๋ค.
๋ํ gccrs ํ๋ก์ ํธ(GCC Rust)์์ ์ค๋นํ๊ณ GCC์ ํฌํจํ๋๋ก ์น์ธ๋ Rust ์ธ์ด ์ปดํ์ผ๋ฌ์ ๋์ฒด ๊ตฌํ ๊ฐ๋ฐ์ ๋ํ ์ํ ๋ณด๊ณ ์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ํ๋ฐํธ์๋๋ฅผ ํตํฉํ ํ ํ์ค GCC ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด LLVM ๊ฐ๋ฐ์ ์ฌ์ฉํ์ฌ ๊ตฌ์ถ๋ Rustc ์ปดํ์ผ๋ฌ๋ฅผ ์ค์นํ ํ์ ์์ด Rust ์ธ์ด๋ก ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์ด ์์กฐ๋กญ๊ฒ ์งํ๋๊ณ ์์์น ๋ชปํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋ ํ, Rust ํ๋ฐํธ์๋๋ ๋ด๋
13์๋ก ์์ ๋ GCC 13 ๋ฆด๋ฆฌ์ค์ ํตํฉ๋ ๊ฒ์
๋๋ค. Rust์ GCC XNUMX ๊ตฌํ์ ๋ฒ ํ ์ํ์ด๋ฉฐ ์์ง ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ง ์์ต๋๋ค.
์ถ์ฒ : opennet.ru