Mozilla ํ๋ก์ ํธ์ ์ํด ์ค๋ฆฝ๋์์ง๋ง ํ์ฌ๋ ๋ ๋ฆฝ์ ์ธ ๋น์๋ฆฌ ์กฐ์ง์ธ Rust Foundation์ ํ์์ผ๋ก ๊ฐ๋ฐ๋ Rust 1.66 ๋ฒ์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ถ์๊ฐ ๋ฐํ๋์์ต๋๋ค. ์ด ์ธ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ค์ ์ ๋๊ณ ๊ฐ๋น์ง ์์ง๊ธฐ ๋ฐ ๋ฐํ์(๋ฐํ์์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ณธ ์ด๊ธฐํ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ก ์ถ์๋จ)์ ์ฌ์ฉ์ ํผํ๋ฉด์ ๋์ ์์ ๋ณ๋ ฌ์ฑ์ ๋ฌ์ฑํ ์ ์๋ ์๋จ์ ์ ๊ณตํฉ๋๋ค.
Rust์ ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ํฌ์ธํฐ๋ฅผ ์กฐ์ํ ๋ ๊ฐ๋ฐ์๋ฅผ ์ค๋ฅ๋ก๋ถํฐ ๋ณดํธํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ํด์ ๋ ํ ์ก์ธ์ค, null ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ๋ฒํผ ์ค๋ฒ๋ฐ ๋ฑ๊ณผ ๊ฐ์ ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐฐํฌ, ๋น๋ ์ ๊ณต ๋ฐ ์ข ์์ฑ ๊ด๋ฆฌ๋ฅผ ์ํด ํ๋ก์ ํธ๋ Cargo ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ๊ฐ๋ฐํฉ๋๋ค. crates.io ์ ์ฅ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํธ์คํ ์ ์ํด ์ง์๋ฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ปดํ์ผ ์๊ฐ์ ์ฐธ์กฐ ํ์ธ, ๊ฐ์ฒด ์์ ๊ถ ์ถ์ , ๊ฐ์ฒด ์๋ช (๋ฒ์) ์ถ์ ๋ฐ ์ฝ๋ ์คํ ์ค ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค์ ์ ํ์ฑ ํ๊ฐ๋ฅผ ํตํด Rust์์ ์ ๊ณต๋ฉ๋๋ค. Rust๋ ๋ํ ์ ์ ์ค๋ฒํ๋ก์ ๋ํ ๋ณดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ์ฌ์ฉํ๊ธฐ ์ ์ ๋ณ์ ๊ฐ์ ํ์ ์ด๊ธฐํ๊ฐ ํ์ํ๋ฉฐ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ค๋ฅ๋ฅผ ๋ ์ ์ฒ๋ฆฌํ๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ณ ์ฐธ์กฐ ๋ฐ ๋ณ์ ๊ฐ๋ ์ ์ ์ฉํ๊ณ , ๊ฐ๋ ฅํ ์ ์ ์ ํ ์ง์ ์ ์ ๊ณตํ์ฌ ๋ ผ๋ฆฌ์ ์ค๋ฅ๋ฅผ ์ต์ํํฉ๋๋ค.
์ฃผ์ ํ์ :
- ์ ์ ํํ์ด ์๋ ์ด๊ฑฐํ("#[repr(Int)]" ํน์ฑ)์์ ์ด๊ฑฐํ์ ํ๋๊ฐ ํฌํจ๋์ด ์๋๋ผ๋ ํ๋ณ์(์ด๊ฑฐํ์ ๋ณํ ๋ฒํธ)์ ๋ช ์์ ์ผ๋ก ํ์ํ ์ ์์ต๋๋ค. #[repr(u8)] enum Foo { A(u8), # ํ๋ณ 0 B(i8), # ํ๋ณ 1 C(bool) = 42, # ํ๋ณ 42 }
- ๋จ์ํ ๋ฐ์ ๊ฐ์ ๋ฐํํ๋ core::hint::black_box ํจ์๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์ปดํ์ผ๋ฌ๋ ์ด ํจ์๊ฐ ๋ฌด์ธ๊ฐ๋ฅผ ํ๊ณ ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์ํํ๊ฑฐ๋ ์์ฑ๋ ๊ธฐ๊ณ ์ฝ๋๋ฅผ ๊ฒ์ฌํ ๋ black_box ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฃจํ์ ๋ํ ์ปดํ์ผ๋ฌ ์ต์ ํ๋ฅผ ๋นํ์ฑํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์๋ ์์ ์์ black_box(v.as_ptr())๋ ์ปดํ์ผ๋ฌ๊ฐ ๋ฒกํฐ v๊ฐ ์ฌ์ฉ๋์ง ์๋๋ค๊ณ ์๊ฐํ์ง ์๋๋ก ํฉ๋๋ค. std::hint::black_box ์ฌ์ฉ; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
- "cargo" ํจํค์ง ๊ด๋ฆฌ์๋ ๋ช ๋ น์ค์์ Cargo.toml ๋งค๋ํ์คํธ์ ์ข ์์ฑ์ ์ ๊ฑฐํ ์ ์๋ "remove" ๋ช ๋ น์ ์ ๊ณตํฉ๋๋ค.
- API์ ์๋ก์ด ๋ถ๋ถ์ด ์์ ํ๋ ํน์ฑ์ ๋ฉ์๋ ๋ฐ ๊ตฌํ์ ํฌํจํ์ฌ ์์ ์ ์ธ ๋ฒ์ฃผ๋ก ์ด๋๋์์ต๋๋ค.
- proc_macro::์คํฌ::source_text
- u*::{checked_add_signed, Overflowing_add_signed, saturating_add_signed, Wrapping_add_signed}
- i*::{checked_add_unsigned, Overflowing_add_unsigned, saturating_add_unsigned, Wrapping_add_unsigned}
- i*::{checked_sub_unsigned, Overflowing_sub_unsigned, saturating_sub_unsigned, Wrapping_sub_unsigned}
- BTreeSet::{์ฒ์, ๋ง์ง๋ง, pop_first, pop_last}
- BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
- WASI๋ฅผ ์ฌ์ฉํ ๋ stdio ์ ๊ธ ์ ํ์ ๋ํ AsFd ๊ตฌํ์ ์ถ๊ฐํฉ๋๋ค.
- Impl TryFrom > ์์<[T; ์]>
- ์ฝ์ด::ํํธ::๋ธ๋๋ฐ์ค
- ๊ธฐ๊ฐ::try_from_secs_{f32,f64}
- ์ต์ ::์์ถ ํด์
- ํ์ค::os::fd
- "..X" ๋ฐ "..=X" ๋ฒ์๋ ํ ํ๋ฆฟ์์ ํ์ฉ๋ฉ๋๋ค.
- Rustc ์ปดํ์ผ๋ฌ์ ํ๋ฐํธ ์๋์ LLVM ๋ฐฑ์๋๋ฅผ ๋น๋ํ ๋ LTO(Link Time Optimization) ๋ฐ BOLT(Binary Optimization and Layout Tool) ์ต์ ํ ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ ์ฝ๋์ ์ฑ๋ฅ์ ๋์ด๊ณ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ค์ ๋๋ค.
- armv5te-none-eabi ๋ฐ thumbv5te-none-eabi ํ๋ซํผ์ ๋ํ ๋ ๋ฒจ XNUMX ์ง์์ ๊ตฌํํ์ต๋๋ค. ์ธ ๋ฒ์งธ ์์ค์ ๊ธฐ๋ณธ ์ง์์ ์๋ฏธํ์ง๋ง ์๋ํ๋ ํ ์คํธ ์์ด ๊ณต์ ๋น๋๋ฅผ ๊ฒ์ํ๊ณ ์ฝ๋ ๋น๋ ๊ธฐ๋ฅ์ ํ์ธํฉ๋๋ค.
- macOS ์ผ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
๋ํ Rust ์ธ์ด์ ํ๋ฐํธ ์๋ ์ปดํ์ผ๋ฌ(gccrs)๊ฐ GCC ์ฝ๋๋ฒ ์ด์ค์ ํฌํจ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ํ๋ฐํธ์๋๋ 13๋
2023์์ ์ถ์๋ GCC 13 ๋ถ๊ธฐ์ ํฌํจ๋ฉ๋๋ค. GCC 13๋ถํฐ ํ์ค GCC ํดํท์ ์ฌ์ฉํ์ฌ LLVM ๊ฐ๋ฐ์ ์ฌ์ฉํ์ฌ ๋น๋๋ rustc ์ปดํ์ผ๋ฌ๋ฅผ ์ค์นํ ํ์ ์์ด Rust ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ ์ ์์ต๋๋ค. GCC XNUMX์ Rust ๊ตฌํ์ ๋ฒ ํ ์ํ์ด๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ง ์์ต๋๋ค.
์ถ์ฒ : opennet.ru