Rust์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ๊ฐ๋ฐ์๊ฐ ํฌ์ธํฐ ์กฐ์์ผ๋ก๋ถํฐ ํด๋ฐฉ๋๊ณ , After-Free ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค, ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ๋ฒํผ ์ค๋ฒ๋ฐ ๋ฑ๊ณผ ๊ฐ์ ๋ฎ์ ์์ค์ ๋ฉ๋ชจ๋ฆฌ ์กฐ์์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐํฌํ๊ณ ์ด์
๋ธ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ฉฐ ํ๋ก์ ํธ๋ณ ์ข
์์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ํจํค์ง ๊ด๋ฆฌ์๊ฐ ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค.
์ฃผ์
- Rustc ์ปดํ์ผ๋ฌ์์
์ ๊ณต๋ ์ฝ๋ ํ๋กํ์ผ๋ง ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ต์ ํ ์ง์(PGO, Profile-Guided Optimization),
ํ๋ก๊ทธ๋จ ์คํ ์ค ๋์ ๋ ํต๊ณ ๋ถ์์ ๋ฐํ์ผ๋ก ๋ณด๋ค ์ต์ ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ํ๋กํ์ผ์ ์์ฑํ๋ ค๋ฉด "-C profile-generate" ํ๋๊ทธ๊ฐ ์ ๊ณต๋๊ณ , ์ด์ ๋ธ๋ฆฌ ์ค์ ํ๋กํ์ผ์ ์ฌ์ฉํ๋ ค๋ฉด "-C profile-use"(์ฒ์์๋ ํ๋ก๊ทธ๋จ์ด ์ฒซ ๋ฒ์งธ ํ๋๊ทธ๋ก ์ด์ ๋ธ๋๊ณ ์คํ๋๊ณ ์์ฑ๋ ํ) ํ๋กํ์ ๋ ๋ฒ์งธ ํ๋๊ทธ๋ก ๋ค์ ์กฐ๋ฆฝ๋ฉ๋๋ค. - ์ฝ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น ๋ฅด๊ฒ ํ ์คํธํ ๋ ํธ๋ฆฌํ '์นด๊ณ ๋ฐ' ๋ช ๋ น ์คํ ์, ํจํค์ง์ ์คํ ํ์ผ์ด ์ฌ๋ฌ ๊ฐ ์์ ๊ฒฝ์ฐ ์คํํ ์คํ ํ์ผ์ ์๋์ผ๋ก ์ ํํด ์คํํ ์ ์๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ค. ์คํ๋ ๊ธฐ๋ณธ ํ์ผ์ ํจํค์ง ๋งค๊ฐ๋ณ์๊ฐ ์๋ [package] ์น์ ์ default-run ์ง์๋ฌธ์ ํตํด ๊ฒฐ์ ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด "cargo run"์ ์คํํ ๋๋ง๋ค "-bin" ํ๋๊ทธ๋ฅผ ํตํด ํ์ผ ์ด๋ฆ์ ๋ช ์์ ์ผ๋ก ์ง์ ํ๋ ๊ฒ์ ํผํ ์ ์์ต๋๋ค.
- ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ ๊ณต๋์๋ "cargo Vendor" ๋ช
๋ น
๋ณ๋์ ํจํค์ง . ์ด ๋ช ๋ น์ ์ฌ์ฉํ๋ฉด ์ข ์์ฑ์ ๋ก์ปฌ ๋ณต์ฌ๋ณธ์ผ๋ก ์์ ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. "cargo Vendor"๋ฅผ ์คํํ ํ ํ๋ก์ ํธ ์ข ์์ฑ์ ๋ชจ๋ ์์ค ์ฝ๋๊ฐ crates.io์์ ๋ก์ปฌ ๋๋ ํฐ๋ฆฌ๋ก ๋ค์ด๋ก๋๋๋ฉฐ, ๊ทธ๋ฐ ๋ค์ ์์์ ์ก์ธ์คํ์ง ์๊ณ ๋ ์์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. io(๋ช ๋ น์ ์คํํ ํ ํด๋น ๋๋ ํฐ๋ฆฌ๋ฅผ ๋น๋์ ์ฌ์ฉํ๋๋ก ๊ตฌ์ฑ ๋ณ๊ฒฝ์ ๋ํ ํํธ๊ฐ ํ์๋ฉ๋๋ค). ์ด ๊ธฐ๋ฅ์ ๋ฆด๋ฆฌ์ค์ ํจ๊ป ํ๋์ ์์นด์ด๋ธ์ ๋ชจ๋ ์ข ์์ฑ์ ํจํค์งํ์ฌ Rustc ์ปดํ์ผ๋ฌ ์ ๊ณต์ ๊ตฌ์ฑํ๋ ๋ฐ ์ด๋ฏธ ์ฌ์ฉ๋์์ต๋๋ค. - ์ด์ ์ ํ ๋ณ์นญ์ ์ฌ์ฉํ์ฌ ์ด๊ฑฐํ ์ต์ ์ ๋ํ ๋งํฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค(์: "fn increment_or_zero(x: ByteOption) ํจ์์ ๋ณธ๋ฌธ์์ "ByteOption::None => 0"์ ์ง์ ํ ์ ์์). MyType<.. >>>::option => N) ๋๋ ์์ฒด ์ก์ธ์ค(c &self ๋ธ๋ก์์ "Self::Quarter => 25"๋ฅผ ์ง์ ํ ์ ์์)
- ๋งคํฌ๋ก์ ์ด๋ฆ ์๋ ์์๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. "const"์์ ์์ ์ด๋ฆ์ ์ ์ํ๋ ๋์ ์ด์ "_" ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต๋์ง ์๋ ์๋ณ์๋ฅผ ๋์ ์ผ๋ก ์ ํํ์ฌ ๋งคํฌ๋ก๋ฅผ ๋ค์ ํธ์ถํ ๋ ์ด๋ฆ ์ถฉ๋์ ํผํ ์ ์์ต๋๋ค.
- ์ ๋ ฌ์ ์ฌ์ฉํ์ฌ AlignN<T> ๊ตฌ์กฐ๋ฅผ ์ ์ํ ๋ค์ AlignN<MyEnum>์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ์ ์ฌํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ด๊ฑฐํ๊ณผ ํจ๊ป "#[repr(align(N))" ํน์ฑ์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค.
- BufReader::buffer, BufWriter::buffer ๋ฐ
์ ::from_mut,
์ ::as_slice_of_cells,
DoubleEndedIterator::nth_back,
์ต์ ::xor
{i,u}{8,16,64,128,size}::reverse_bits, Wrapping::reverse_bits ๋ฐ
์ฌ๋ผ์ด์ค::copy_within.
์ถ๊ฐ์ ์ผ๋ก ์ฃผ๋ชฉํ ์ ์๋ ๊ฒ์
์ถ์ฒ : opennet.ru