Rust์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ๊ฐ๋ฐ์๊ฐ ํฌ์ธํฐ ์กฐ์์ผ๋ก๋ถํฐ ํด๋ฐฉ๋๊ณ , After-Free ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค, ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ๋ฒํผ ์ค๋ฒ๋ฐ ๋ฑ๊ณผ ๊ฐ์ ๋ฎ์ ์์ค์ ๋ฉ๋ชจ๋ฆฌ ์กฐ์์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐํฌํ๊ณ ์ด์
๋ธ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ฉฐ ํ๋ก์ ํธ๋ณ ์ข
์์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ํจํค์ง ๊ด๋ฆฌ์๊ฐ ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค.
์ฃผ์
- ๋งคํฌ๋ก๋ ์์ ์กฐ๊ฐ์ ์ฌ์ฉํ์ฌ ํน์ฑ(trait), ๊ตฌํ(impl) ๋๋ ์ธ๋ถ ๋ธ๋ก์ ๋ํ ์ฝ๋๋ก ๋ณํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด:
๋งคํฌ๋ก ๊ท์น! mac_trait {
($i:ํญ๋ชฉ) => {
ํน์ฑ T { $i }
}
}
mac_trait! {
fn foo() {}
}๋ค์ ์ธ๋๋ก ์ด์ด์ง ๊ฒ์ ๋๋ค:
ํน์ฑ T {
fn foo() {}
} - ๊ธฐ๋ณธ ํ์, ์ฐธ์กฐ ๋ฐ ์ด์ง ์ฐ์ฐ์ ์ ํ ๊ฐ์ง๊ฐ ํฅ์๋์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ด์ ์ ์ค๋ฅ๋ฅผ ์ผ์ผ์ผฐ๋ ๋ค์ ์ฝ๋๋ ์ด์ ์ปดํ์ผํ ์ ์์ต๋๋ค(Rust๋ ์ด์ 0.0๊ณผ &0.0์ด f32 ์ ํ์ด์ด์ผ ํ๋ค๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฒฐ์ ํฉ๋๋ค):n: f32 = 0.0 + &0.0;
- ์๋ก์ด ํ๊ฒฝ ๋ณ์ CARGO_BIN_EXE_{name}์ด Cargo์ ์ถ๊ฐ๋์์ต๋๋ค. ์ด๋ ํตํฉ ํ ์คํธ๋ฅผ ๊ตฌ์ถํ ๋ ์ค์ ๋๋ฉฐ ํจํค์ง์ "[[bin]]" ์น์ ์ ์ ์๋ ์คํ ํ์ผ์ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ๊ฒฐ์ ํ ์ ์๋๋ก ํด์ค๋๋ค.
- If ๋ฌธ์์๋ "#[cfg()]"์ ๊ฐ์ ์์ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ชจ๋์ ๊ฐ์ ธ์ค์ง ์๊ณ ๋ ์ ์ ๋ฐ ๋ถ์ ์ ํ์ ์ง์ ๊ด๋ จ ์์๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด, "use std::u32" ๋ฐ "use std::f32"๋ฅผ ๋จผ์ ์ง์ ํ์ง ์๊ณ ๋ u32::MAX ๋๋ f32::NAN์ ์ฆ์ ์์ฑํ ์ ์์ต๋๋ค.
- ์๋ก์ด ๋ชจ๋์ด ์ถ๊ฐ๋์์ต๋๋ค
์์์ ์ธ , ์๋ฅผ ๋ค์ด ๋งคํฌ๋ก๋ฅผ ์์ฑํ๊ณ ํด๋น ์ ํ์ด ์จ๊ฒจ์ง์ง ์์๋์ง ํ์ธํด์ผ ํ๋ ๊ฒฝ์ฐ Rust ๊ธฐ๋ณธ ์ ํ์ ๋ค์ ๋ด๋ณด๋ ๋๋ค. - ์์ ํ๋ API๋ฅผ ํฌํจํ์ฌ API์ ์๋ก์ด ๋ถ๋ถ์ด ์์ ์ ์ธ ๋ฒ์ฃผ๋ก ์ด์ ๋์์ต๋๋ค.
์ผ๋จ::is_completed,
f32::LOG10_2,
f32::LOG2_10,
f64::LOG10_2,
f64::LOG2_10 ๋ฐ
iter::once_with.
์ถ์ฒ : opennet.ru