Rust์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ๊ฐ๋ฐ์๊ฐ ํฌ์ธํฐ ์กฐ์์ผ๋ก๋ถํฐ ํด๋ฐฉ๋๊ณ , After-Free ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค, ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ๋ฒํผ ์ค๋ฒ๋ฐ ๋ฑ๊ณผ ๊ฐ์ ๋ฎ์ ์์ค์ ๋ฉ๋ชจ๋ฆฌ ์กฐ์์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐํฌํ๊ณ ์ด์
๋ธ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ฉฐ ํ๋ก์ ํธ๋ณ ์ข
์์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ํจํค์ง ๊ด๋ฆฌ์๊ฐ ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค.
์ฃผ์
- ํน์ฑ์ด ์์ ํ๋จ
๋ฏธ๋ , async / .await ๋ธ๋ก์ ์ฌ์ฉํ๋ ๋์ ํ๊ฐ๊ฐ ์์ง ์๋ฃ๋์ง ์์์ ์ ์๋ ๊ฐ์ ๋ํ๋ ๋๋ค. Future๋ฅผ ์ฌ์ฉํ์ฌ ์ ์๋ ๋น๋๊ธฐ ๊ฐ์ ์ฌ์ฉํ๋ฉด ์ค๋ ๋์์ ์ ์ฉํ ์์ ์ ๊ณ์ ์คํํ๋ ๋์์ ํน์ ๊ฐ์ ๊ณ์ฐ์ด ์๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. - ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ ํ๋์์ต๋๋ค.
ํ ๋น , ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๊ฐ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ค๋งํธ ํฌ์ธํฐ ๋ฐ ์ปฌ๋ ์ ์ ์ ๊ณตํฉ๋๋ค. ์ด์ std์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ค์ ์ ํ์ ์ฌ์ฉํฉ๋๋ค.๋ฒก , alloc์์ ๋ค์ ๋ด๋ณด๋ ๋๋ค. alloc์ ๋ณ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ std์ ์ฐ๊ฒฐ๋์ง ์์ ์์ฉ ํ๋ก๊ทธ๋จ("#![no_std]")๋ฟ๋ง ์๋๋ผ std ์์ด ์ ์ฌํ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ๋๋ก ์ค๊ณ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ ์๋ฏธ๊ฐ ์์ต๋๋ค. - ๊ฐ์ ์ฌ๋ฐ๋ฅธ ์ด๊ธฐํ ํ์ธ์ ์ฐํํ๋ ค๋ฉด
์ ์ ์ค๊ฐ ์ ํ์๋ง๋๋จ์ , mem::uninitialized ํจ์ ๋์ ๋ ์์ ํ ๋์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. mem::uninitialized ํจ์๋ ๋ฐฐ์ด์ ๋น ๋ฅด๊ฒ ์์ฑํ๋ ๋ฐ ํธ๋ฆฌํ์ง๋ง ์ด๊ธฐํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ๊ฐ์ด ์ด๊ธฐํ๋์ง ์์ ์ํ๋ก ์ ์ง๋๋ฏ๋ก ์ปดํ์ผ๋ฌ์ ์คํด๋ฅผ ๋ถ๋ฌ์ผ์ผํต๋๋ค. MaybeUninit์ ์ฌ์ฉํ๋ฉด ๊ฐ์ด ์ด๊ธฐํ๋์ง ์์์์ ์ปดํ์ผ๋ฌ์ ๋ช ์์ ์ผ๋ก ํ์ํ๊ณ , ์ด์ ๊ด๋ จ๋ ์ ์๋์ง ์์ ๊ฐ๋ฅํ ๋์์ ๊ณ ๋ คํ๊ณ , "maybe_t:" ๋ฐ ๋จ๊ณ๋ณ ์ด๊ธฐํ๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ ๊ฒ์ฌ๋ฅผ ๊ตฌ์ฑํ์ฌ ์๋ฃ๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ".assume_init()" ํธ์ถ์ ์ฌ์ฉํฉ๋๋ค. MaybeUninit์ ์ถํ์ผ๋ก mem::uninitialized ํจ์๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ์ฌ์ฉ์ ๊ถ์ฅํ์ง ์์ต๋๋ค. - ๋น๋ฆฐ ๋ณ์์ ์๋ช ์ ๊ธฐ๋กํ๋ ์์คํ ์ ํ์ฅํ NLL(Non-Lexical Lifetimes) ๊ธฐ์ ์ด Rust 2015 ์ธ์ด์์ ์์ ํ๋์์ต๋๋ค(์ด๊ธฐ์๋ Rust 2018์์๋ง NLL์ ์ง์ํ์ต๋๋ค). NLL์ ์ดํ ์์ค์์ ์๋ช ์ ์ปค๋ฐํ๋ ๋์ ์คํ ํ๋ฆ ๊ทธ๋ํ์ ํฌ์ธํฐ ์งํฉ ์์ค์์ ์ํํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ณ์ ์ฐจ์ฉ ํ์ธ ํ์ง(์ฐจ์ฉ ๊ฒ์ฌ๊ธฐ)์ ๋์ด๊ณ ์ด์ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ์ผ๋ถ ์ ํ์ ์ฌ๋ฐ๋ฅธ ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค. ๋ํ ์๋ก์ด ๋์์ผ๋ก ์ธํด ๋๋ฒ๊น ์ด ํจ์ฌ ์ฌ์์ก์ต๋๋ค.
- ์ฐ๊ด ๋ฐฐ์ด์ ์๋ก์ด ๊ตฌํ์ด ํฌํจ๋์์ต๋๋ค.
ํด์๋งต , ๊ตฌ์กฐ์ ์ ์ฉ์ ๊ธฐ๋ฐ์ผ๋ก์ค์์ค ํ ์ด๋ธ (์๋์ผ๋ก ๋ก๋๋จํด์๋ธ๋ผ์ด::ํด์๋งต , ๋ฌ๋ฆฌ ๋ช ์์ ์ผ๋ก ์ธ๊ธ๋์ง ์๋ ํ(์: SipHash 1-3์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ std::HashMap) ์ํํธ์จ์ด ์ธํฐํ์ด์ค๋ ๋์ผํ๊ฒ ์ ์ง๋๋ฉฐ ๊ฐ๋ฐ์๊ฐ ๋์ ๋๋ ์ฐจ์ด์ ์ ์ฑ๋ฅ ํฅ์๊ณผ ๋ฉ๋ชจ๋ฆฌ ์๋น ๊ฐ์๋ก ๊ท๊ฒฐ๋ฉ๋๋ค. - ํจํค์ง ๊ด๋ฆฌ์ ํ๋ฌผ์์
์ถ๊ฐ ๋คํธ์ํฌ์ ์ก์ธ์คํ์ง ์๊ณ ๋ ์์ ์ ์ํํ ์ ์๋ "--offline" ์ต์ ์ ์ฌ์ฉํ๋ฉด ์ข ์์ฑ ์ค์น ์ ๋ก์ปฌ ์์คํ ์ ์บ์๋ ํจํค์ง๋ง ์ฌ์ฉ๋ฉ๋๋ค. ์ข ์์ฑ์ด ๋ก์ปฌ ์บ์์ ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์คํ๋ผ์ธ์ผ๋ก ์ ํํ๊ธฐ ์ ์ ์ข ์์ฑ์ ๋ก์ปฌ ์บ์์ ๋ฏธ๋ฆฌ ๋ก๋ํ๋ ค๋ฉด "cargo fetch" ๋ช ๋ น์ ์ฌ์ฉํ ์ ์์ต๋๋ค. - ๋งคํฌ๋ก "dbg!"๋ฅผ ํธ์ถํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ์ฌ๋ฌ ์ธ์๋ฅผ ๋ํ๋ ๋๋ค.
- ์์ ๋์ ๋ชจ๋ ์ปจํ
์คํธ์์ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ ๊ฒฐ์ ํ๋ "const" ์์ฑ์ ๋ฉ์๋์ ์ฌ์ฉ๋ฉ๋๋ค.
๋ ์ด์์::from_size_align_unchecked,
mem::needs_drop,
NonNull::๋งค๋ฌ๋ ค ์๊ณ
NonNull::์บ์คํธ; - ์์ ํ๋ ๋ฉ์๋๋ฅผ ํฌํจํ์ฌ API์ ์๋ก์ด ๋ถ๋ถ์ด ์์ ์นดํ
๊ณ ๋ฆฌ๋ก ์ด์ ๋์์ต๋๋ค.
์์ ::์จ์ด์ปค, ์์ ::์ค๋ฌธ์กฐ์ฌ,
VecDeque::rotate_left, VecDeque::rotate_right,
์ฝ๊ธฐ::์ฝ๊ธฐ_๋ฒกํฐ, ์ฐ๊ธฐ::์ฐ๊ธฐ_๋ฒกํฐ,
๋ฐ๋ณต์::๋ณต์ฌ๋จ,
BorrowMut(๋ฌธ์์ด์ฉ) ๋ฐ str::as_mut_ptr.
์ถ์ฒ : opennet.ru