Rust์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ๊ฐ๋ฐ์๊ฐ ํฌ์ธํฐ ์กฐ์์ผ๋ก๋ถํฐ ํด๋ฐฉ๋๊ณ , After-Free ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค, ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ๋ฒํผ ์ค๋ฒ๋ฐ ๋ฑ๊ณผ ๊ฐ์ ๋ฎ์ ์์ค์ ๋ฉ๋ชจ๋ฆฌ ์กฐ์์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐํฌํ๊ณ ์ด์
๋ธ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ฉฐ ํ๋ก์ ํธ๋ณ ์ข
์์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ํจํค์ง ๊ด๋ฆฌ์๊ฐ ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค.
์ฃผ์
- ์ข ์์ฑ ๋ฉํ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋ฉด ์ปดํ์ผ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ข ์ ํฌ๋ ์ดํธ ํจํค์ง์ ๋น๋๊ฐ ์ฆ์ ์์๋๋ ํ์ดํ๋ผ์ธ ์ปดํ์ผ ๋ชจ๋(ํ์ดํ๋ผ์ธ)๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ํจํค์ง๋ฅผ ์ปดํ์ผํ ๋ ์ข ์์ฑ์ ์์ ํ ์ด์ ๋ธํ ํ์๋ ์์ผ๋ฉฐ ์ ํ ๋ชฉ๋ก, ์ข ์์ฑ ๋ฐ ๋ด๋ณด๋ธ ์์๊ฐ ํฌํจ๋ ๋ฉํ๋ฐ์ดํฐ๋ง ์ ์ํ๋ฉด ๋ฉ๋๋ค. ๋ฉํ๋ฐ์ดํฐ๋ ์ปดํ์ผ ํ๋ก์ธ์ค ์ด๊ธฐ์ ์ ๊ณต๋๋ฏ๋ก ๋งํฌ๋ ํจํค์ง๋ฅผ ํจ์ฌ ๋ ์ผ์ฐ ์ปดํ์ผํ ์ ์์ต๋๋ค. ๋จ์ผ ํจํค์ง๋ฅผ ๋น๋ํ ๋ ์ ์๋ ๋ชจ๋๋ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋น๋๊ฐ ๋ถ๊ธฐ๋ ์ข ์์ฑ์ ํฌํจํ๋ ํจํค์ง๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ ์ ์ฒด ๋น๋ ์๊ฐ์ 10-20% ์ค์ผ ์ ์์ต๋๋ค.
- ์๋ชป๋ ๊ธฐ๋ฅ ์ฌ์ฉ ๊ฐ์ง ๋ณด์ฅ
std::mem::์ด๊ธฐํ๋์ง ์์ ะธstd::mem::์ ๋กํ๋จ . ์๋ฅผ ๋ค์ด std::mem::uninitialized๋ ๋ฐฐ์ด์ ๋น ๋ฅด๊ฒ ์์ฑํ๋ ๋ฐ ํธ๋ฆฌํ์ง๋ง ์ด๊ธฐํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ๊ฐ์ด ์ด๊ธฐํ๋์ง ์์ ์ํ๋ก ์ ์ง๋๋ฏ๋ก ์ปดํ์ผ๋ฌ์ ์คํด๋ฅผ ๋ถ๋ฌ์ผ์ผํต๋๋ค. mem::uninitialized ํจ์๋ ์ด๋ฏธ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ํ์๋์ด ์์ผ๋ฏ๋ก ๋์ ์ค๊ฐ ์ ํ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.์๋ง๋๋จ์ . mem::zeroed์ ๊ฒฝ์ฐ ์ด ํจ์๋ XNUMX ๊ฐ์ ํ์ฉํ ์ ์๋ ์ ํ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.์ ์๋์ง ์์ ๋์์ ์๋ณํ๋ ๋ฐ ๋์์ ์ฃผ๊ธฐ ์ํด ์ ๋ฆด๋ฆฌ์ค์์๋ mem::uninitialized ๋๋ mem::zeroed์ ๊ด๋ จ๋ ๋ช ๊ฐ์ง ๋ฌธ์ ๋ฅผ ๊ฐ์งํ๋ Lint ๊ฒ์ฌ๋ฅผ ์ปดํ์ผ๋ฌ์ ์ถ๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด, null ๊ฐ์ ํ์ฉํ ์ ์๋ ํฌ์ธํฐ ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๋ &T ๋ฐ Box<T> ์ ํ๊ณผ ํจ๊ป mem::uninitialized ๋๋ mem::zeroed๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ํฌ๋ ์ดํธ ํจํค์ง๋ฅผ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ํ์ํ๊ณ ํฅํ ์ญ์ ๋ฅผ ์์ฝํ ์ ์๋๋ก "#[deprecated]" ์์ฑ์ด ํ์ฅ๋์์ต๋๋ค. Rust 1.38๋ถํฐ ์ด ์์ฑ์ ๋งคํฌ๋ก์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ํ์ ๋ชจ๋์ "#[global_allocator]" ์์ฑ์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ถ๊ฐ๋ ๊ธฐ๋ฅ
ํ์ค::๋ชจ๋ ::์ ํ_์ด๋ฆ , ๋๋ฒ๊น ๋ชฉ์ ์ ์ ์ฉํ ์ ์๋ ์ ํ์ ์ด๋ฆ์ ์ฐพ์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ๋ก๊ทธ๋จ ์คํ ์ค์ ํจ์๊ฐ ์ด๋ค ์ ํ์ผ๋ก ํธ์ถ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.fn gen_value<T: ๊ธฐ๋ณธ๊ฐ>() -> T {
println!("{}์ ์ธ์คํด์ค ์ด๊ธฐํ ์ค", std::any::type_name::<T>());
๊ธฐ๋ณธ๊ฐ::๊ธฐ๋ณธ๊ฐ()
}fn ๋ฉ์ธ() {
let _: i32 = gen_value(); # "i32"๊ฐ ์ธ์๋ฉ๋๋ค
let _: String = gen_value(); # "alloc::string::String"์ ์ธ์ํฉ๋๋ค.
} - ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ฅ ๊ธฐ๋ฅ:
- Slice::{concat, connect, Join}์ ์ด์ &T ์ธ์ &[T] ๊ฐ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- "*const T" ๋ฐ "*mut T"๋ ์ด์ marker::Unpin์ ๊ตฌํํฉ๋๋ค.
- "Arc<[T]>" ๋ฐ "Rc<[T]>"๋ ์ด์ FromIterator<T>๋ฅผ ๊ตฌํํฉ๋๋ค.
- iter::{StepBy, Peekable, Take}๋ ์ด์ DoubleEndedIterator๋ฅผ ๊ตฌํํฉ๋๋ค.
- ascii::EscapeDefault๋ ๋ณต์ ๋ฐ ํ์๋ฅผ ๊ตฌํํฉ๋๋ค.
- ์์ ํ๋ ๋ฉ์๋๋ฅผ ํฌํจํ์ฌ API์ ์๋ก์ด ๋ถ๋ถ์ด ์์ ์นดํ
๊ณ ๋ฆฌ๋ก ์ด์ ๋์์ต๋๋ค.
- <*const T>::cast, <*mut T>::cast,
- ๊ธฐ๊ฐ::as_secs_f{32|64},
- ๊ธฐ๊ฐ::div_duration_f{32|64},
- ๊ธฐ๊ฐ::div_f{32|64},
- ๊ธฐ๊ฐ::from_secs_f{32|64},
- ๊ธฐ๊ฐ::mul_f{32|64},
- ๋๋จธ์ง๊ฐ ์๋ ๋๋์
์ฐ์ฐ
๋ชจ๋ ์ ์ ํ๋ฆฌ๋ฏธํฐ๋ธ์ ๋ํ div_euclid ๋ฐ rem_euclid;
- ํ๋ฌผ ํจํค์ง ๊ด๋ฆฌ์์์ ๋ค์ํ ๊ธฐ๋ฅ์ ํ์ฑํํ๊ธฐ ์ํด "--features" ์ต์ ์ ์ฌ๋ฌ ๋ฒ ์ง์ ํ๋ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ปดํ์ผ๋ฌ๋ ์ธ ๋ฒ์งธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ ๋ฒจ ๋์ ํ๋ซํผ aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc ๋์, armv7-unknown-linux ์ง์ -gnueabi, armv7-unknown-linux-musleabi, ์ก๊ฐํ-unknown-linux-musl ๋ฐ riscv32i-unknown-none-elf. ์ธ ๋ฒ์งธ ์์ค์๋ ๊ธฐ๋ณธ ์ง์์ด ํฌํจ๋์ง๋ง ์๋ํ๋ ํ ์คํธ ๋ฐ ๊ณต์ ๋น๋ ๊ฒ์๋ ํฌํจ๋์ง ์์ต๋๋ค.
์ถ์ฒ : opennet.ru