Rust์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ํฌ์ธํฐ๋ฅผ ์กฐ์ํ ๋ ์ค๋ฅ๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ํด์ ๋ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ก์ธ์คํ๋ ๊ฒ, ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ๋ฒํผ ์ค๋ฒ๋ฐ ๋ฑ๊ณผ ๊ฐ์ ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ์กฐ์์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐํฌํ๊ณ ์ด์
๋ธ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ฉฐ ํ๋ก์ ํธ๋ณ ์ข
์์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ํจํค์ง ๊ด๋ฆฌ์๊ฐ ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค.
์ฃผ์
- ์ค๋ซ๋์ ์ ๊ฑฐ๋จ
๋ถ์์ ์ ์์ ๋ถ๋ ์์์ ์ซ์ ์ฌ์ด์ ๋ณํ์ ์ํํ ๋. Rust ์ปดํ์ผ๋ฌ๋ LLVM์ ๋ฐฑ์๋๋ก ์ฌ์ฉํ๋ฏ๋ก ์ ํ ๋ณํ ์์ ์ ๋ค์๊ณผ ๊ฐ์ LLVM ์ค๊ฐ ์ฝ๋ ๋ช ๋ น์ด๋ฅผ ํตํด ์ํ๋์์ต๋๋ค.fptoui , ์ฌ๊ธฐ์๋ ํ๋์ ์ค์ํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๊ฒฐ๊ณผ ๊ฐ์ด ๋์ ์ ํ์ ๋ง์ง ์์ผ๋ฉด ์ ์๋์ง ์์ ๋์์ ๋๋ค. ์๋ฅผ ๋ค์ด, f300 ์ ํ์ ๋ถ๋ ์์์ ๊ฐ 32์ ์ ์ ์ ํ u8๋ก ๋ณํํ๋ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ๋ ์์ธกํ ์ ์์ผ๋ฉฐ ์์คํ ๋ง๋ค ๋ค๋ฅผ ์ ์์ต๋๋ค. ๋ฌธ์ ๋ ์ด ๊ธฐ๋ฅ์ด "์์ ํ์ง ์์"์ผ๋ก ํ์๋์ง ์์ ์ฝ๋์ ๋ํ๋๋ค๋ ๊ฒ์ ๋๋ค.Rust 1.45๋ถํฐ ์ ํ ํฌ๊ธฐ ์ค๋ฒํ๋ก์ ๋์์ ์๊ฒฉํ๊ฒ ๊ท์ ๋๋ฉฐ "as" ๋ณํ ์์ ์ ์ค๋ฒํ๋ก๋ฅผ ํ์ธํ๊ณ ๊ฐ์ด ๋์ ์ ํ์ ์ต๋๊ฐ ๋๋ ์ต์๊ฐ์ผ๋ก ๊ฐ์ ๋ก ๋ณํ๋๋๋ก ํฉ๋๋ค(์ ์์ ๊ฒฝ์ฐ 300์ 255๋ก ๋ณํ๋ฉ๋๋ค.) ์ด๋ฌํ ๊ฒ์ฌ๋ฅผ ๋นํ์ฑํํ๊ธฐ ์ํด ์์ ํ์ง ์์ ๋ชจ๋์์ ์๋ํ๋ ์ถ๊ฐ API ํธ์ถ "{f64, f32}::to_int_unchecked"๊ฐ ์ ๊ณต๋ฉ๋๋ค.
fn ์บ์คํธ(x: f32) -> u8 {
x๋ฅผ u8๋ก
}fn ๋ฉ์ธ() {
too_big = 300.0;
too_small = -100.0;
nan = f32::NAN;x: f32 = 1.0;
let y: u8 = ์์ ํ์ง ์์ { x.to_int_unchecked() };println!("too_big_casted = {}", Cast(too_big)); // ์ถ๋ ฅ 255
println!("too_small_casted = {}", Cast(too_small)); // 0์ ์ถ๋ ฅ
println!("not_a_number_casted = {}", Cast(nan)); // 0์ ์ถ๋ ฅ
} - ์์ ํ๋ ์ฌ์ฉ
์ ์ฐจ์ ๋งคํฌ๋ก ํจ์ํ ํํ์, ํ ํ๋ฆฟ, ๋ช ๋ น๋ฌธ. ์ด์ ์๋ ์ด๋ฌํ ๋งคํฌ๋ก๋ฅผ ๋ชจ๋ ๊ณณ์์ ํธ์ถํ ์ ์์๊ณ ์ฝ๋์ ํน์ ๋ถ๋ถ์์๋ง ํธ์ถํ ์ ์์์ต๋๋ค(๋ค๋ฅธ ์ฝ๋์ ์ฝํ์ง ์๊ณ ๋ณ๋์ ํธ์ถ๋ก). ํจ์์ ์ ์ฌํ๊ฒ ๋งคํฌ๋ก๋ฅผ ํธ์ถํ ์ ์๋ ๋ฐฉ์์ ํ์ฅํ๋ ๊ฒ์ ์น ํ๋ ์์ํฌ๊ฐ ์๋ํ๋๋ก ํ๊ธฐ ์ํ ์๊ตฌ ์ฌํญ ์ค ํ๋์์ต๋๋ค.๋ก์ผ Rust์ ์์ ์ ์ธ ๋ฆด๋ฆฌ์ค์์. ์ด์ ์๋ Rocket์์ ํธ๋ค๋ฌ๋ฅผ ์ ์ํ ๋ ์ถ๊ฐ์ ์ธ ์ ์ฐ์ฑ์ ์ป์ผ๋ ค๋ฉด "proc_macro_hygiene"์ด๋ผ๋ ์คํ์ ๊ธฐ๋ฅ์ ํ์ฑํํด์ผ ํ๋๋ฐ, ์ด๋ Rust์ ์์ ๋ฒ์ ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ด์ ์์ ์ ์ธ ์ธ์ด ๋ฆด๋ฆฌ์ค์ ๋ด์ฅ๋์ด ์์ต๋๋ค. - ๋ฒ์ ๊ฐ์ ๋ฐ๋ณตํ๊ธฐ ์ํด "char" ์ ํ์ ๋ฒ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค(ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):
'a'..='z'์ ์ฑ๋์ ๋ํด {
print!("{}", ch);
}
println!(); // "abcdefghijklmnopqrstuvwxyz"๋ฅผ ์ธ์ํฉ๋๋ค. - ์์ ํ๋ API๋ฅผ ํฌํจํ์ฌ API์ ์๋ก์ด ๋ถ๋ถ์ด ์์ ์ ์ธ ๋ฒ์ฃผ๋ก ์ด์ ๋์์ต๋๋ค.
ํธ::as_ptr,
BTreeMap::remove_entry,
Rc::as_ptr,
rc::์ฝํจ::as_ptr,
rc::์ฝํจ::from_raw,
rc::์ฝํจ::into_raw,
str::strip_prefix,
str::strip_suffix,
sync::์ฝํจ::as_ptr,
๋๊ธฐํ::์ฝํจ::from_raw,
sync::์ฝํจ::into_raw,
๋ฌธ์::UNICODE_VERSION,
๋ฒ์::resolved_at,
๋ฒ์:: located_at,
์คํฌ::mixed_site,
์ ๋์ค::ํ๋ก์ธ์ค::CommandExt::arg0. - Rustc ์ปดํ์ผ๋ฌ๋ "target-feature" ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ๋์ ํ๋ซํผ ๊ธฐ๋ฅ์ ์ฌ์ ์ํ๋ ์ง์์ ์ถ๊ฐํ์ต๋๋ค(์: "-C target-feature=+avx2,+fma"). ์๋ก์ด ํ๋๊ทธ๋ ์ถ๊ฐ๋์์ต๋๋ค:
์ถฉ๋ ์ฒ๋ฆฌ ์ ๋ต์ ๊ด๊ณ์์ด ํด์ ํธ์ถ ํ ์ด๋ธ์ ์์ฑํ๋ "force-unwind-tables" ์์ฑ๋ rlib์ LLVM ๋นํธ์ฝ๋๊ฐ ํฌํจ๋๋์ง ์ฌ๋ถ๋ฅผ ์ ์ดํ๋ โโ"embed-bitcode"์ ๋๋ค. Cargo์์๋ ๋น๋ ์๊ฐ๊ณผ ๋์คํฌ ๊ณต๊ฐ ์๋น๋ฅผ ์ต์ ํํ๊ธฐ ์ํด "embed-bitcode" ํ๋๊ทธ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ต๋๋ค. - mipsel-sony-psp ๋ฐ Thumbv7a-uwp-windows-msvc ํ๋ซํผ์ ๋ํ ์ธ ๋ฒ์งธ ์์ค์ ์ง์์ด ์ ๊ณต๋์์ต๋๋ค. ์ธ ๋ฒ์งธ ์์ค์๋ ๊ธฐ๋ณธ ์ง์์ด ํฌํจ๋์ง๋ง ์๋ํ๋ ํ ์คํธ ๋ฐ ๊ณต์ ๋น๋ ๊ฒ์๋ ํฌํจ๋์ง ์์ต๋๋ค.
์ถ๊ฐ์ ์ผ๋ก ์ฃผ๋ชฉํ ์ ์๋ ๊ฒ์
์ด ๊ธฐ์ฌ๋ ํ์ ์์ค ํ๋ก๊ทธ๋๋ฐ ๋ฐ OS ๊ฐ๋ฐ์์ ์๊ตฌ๋๋ ๊ธฐ์ ์ ์์ฐํ๋ ๋ฐ ์ ๋
ํ๋ ์๋ฆฌ์ฆ ์ค ์ฒซ ๋ฒ์งธ์
๋๋ค.
์ถ์ฒ : opennet.ru