Rust์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ๊ฐ๋ฐ์๊ฐ ํฌ์ธํฐ ์กฐ์์ผ๋ก๋ถํฐ ํด๋ฐฉ๋๊ณ , After-Free ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค, ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ๋ฒํผ ์ค๋ฒ๋ฐ ๋ฑ๊ณผ ๊ฐ์ ๋ฎ์ ์์ค์ ๋ฉ๋ชจ๋ฆฌ ์กฐ์์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐํฌํ๊ณ ์ด์
๋ธ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ฉฐ ํ๋ก์ ํธ๋ณ ์ข
์์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ํจํค์ง ๊ด๋ฆฌ์๊ฐ ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค.
์ฃผ์
- ํน์ฑ
FnOnce ,FnMut ะธFn ํ ํ ๋น์ ์ํด ๊ตฌํ๋จ๋ฐ์คํ Box<dyn FnOnce>, Box<dyn FnMut> ๋ฐ Box<dyn Fn>; - ์ถ๊ฐ๋จ
๊ธฐํ ์์ ํ์ง ์์ ํจ์ ํฌ์ธํฐ์ ํด๋ก์ ์บ์คํ (์์ ํ์ง ์์ fn) - ๋งคํฌ๋ก "dbg!"๋ฅผ ํธ์ถํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ๋ณ์๋ฅผ ๊ฒ์ฌํ์ง ์๊ณ stderr์ ํ์ผ ์ด๋ฆ๊ณผ ์ค ๋ฒํธ๋ฅผ ํ์ํ๊ธฐ ์ํ ์ธ์๊ฐ ์์ต๋๋ค. ์ด๋ ์กฐ๊ฑด์ ์์ ์ ๋๋ฒ๊น ํ๋ ๋ฐ ํธ๋ฆฌํฉ๋๋ค.
- ๋ถ๋ ์์์ ์ ํ f32 ๋ฐ f64์ "๋ฉ์๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
์ฌ๋ณธ ยป ํ ์ซ์์์ ๋ค๋ฅธ ์ซ์๋ก ๋ฌธ์๋ฅผ ๋ณต์ฌํฉ๋๋ค. - ์ถ๊ฐ๋ ๋ฐฉ๋ฒ "
์ด ํฌํจ๋์ด ์์ต๋๋ค ", ์ง์ ๋ ๊ฐ์ด ๋ฒ์ ๋ด์ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. - ์ถ๊ฐ๋ ๋ฐฉ๋ฒ
์ฐธ์กฐ:์ :map_split , ๋น๋ฆฐ ๋ฐ์ดํฐ์ ๋ค์ํ ๊ตฌ์ฑ์์์ ๋ํด ๋น๋ฆฐ RefCell ๊ฐ์ ๋ฐ์ํ๊ณ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค. - ์ถ๊ฐ๋ ๋ฐฉ๋ฒ
RefCell::replace_with ํ์ฌ RefCell ๊ฐ์ ๋ฐ๊พธ๊ณ ์ด์ ๊ฐ์ ๊ฒฐ๊ณผ๋ก ๋ฐํํฉ๋๋ค. - ์ถ๊ฐ๋ ๋ฐฉ๋ฒ
ptr::ํด์ ์ฃผ์๊ฐ ์ง์ ๋ ๊ฐ์ด ์๋ ์ฃผ์๋ก ํฌ์ธํฐ๋ ์ฐธ์กฐ๋ฅผ ํด์ํฉ๋๋ค. - ์ถ๊ฐ๋ ๋ฐฉ๋ฒ
์ต์ ::๋ณต์ฌ๋จ Option<&T> ๋๋ Option<&mut T> ์ต์ ์ ๋ด์ฉ์ ๋ณต์ฌํฉ๋๋ค. - ์์ ํ๋ ๋ฉ์๋๋ฅผ ํฌํจํ์ฌ API์ ์๋ก์ด ๋ถ๋ถ์ด ์์ ์นดํ
๊ณ ๋ฆฌ๋ก ์ด์ ๋์์ต๋๋ค.
f32::์นดํผ์ฌ์ธ,
f64::์นดํผ์ฌ์ธ,
RefCell::replace_with,
RefCell::map_split,
ptr::ํด์,
๋ฒ์::ํฌํจ,
๋ฒ์์์::ํฌํจ,
๋ฒ์::ํฌํจ,
๋ฒ์ํฌํจ::ํฌํจ,
RangeToInclusive::ํฌํจ ๋ฐ
์ต์ ::๋ณต์ฌ๋จ; - ํจ์์ "T: Drop" ๋ฐ์ธ๋ฉ์ ์ถ๊ฐํ ๋ ํธ๋ฆฌ๊ฑฐ๋๋ drop_bounds ๊ฒ์ฌ๋ฅผ Clippy(linter)์ ์ถ๊ฐํ์ต๋๋ค.
- ์ปดํ์ผ๋ฌ์ ์๋ก์ด ๋์ ํ๋ซํผ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
wasm32-unknown-wasi(์ธํฐํ์ด์ค๋ด๊ฐ ๊ทธ๋ฌ๋ ๋ธ๋ผ์ฐ์ ์ธ๋ถ์์ WebAssembly๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด) - Rust ํดํท์ ํ์ค C ๋ผ์ด๋ธ๋ฌ๋ฆฌ Musl์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ฐฐํฌํ์ ์ ํฉํฉ๋๋ค.
์ถ์ฒ : opennet.ru