์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋ฆด๋ฆฌ์ค , Mozilla ํ๋ก์ ํธ์ ์ํด ์ค๋ฆฝ๋์์ต๋๋ค. ์ด ์ธ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ค์ ์ ๋๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํ๋ฉฐ ๊ฐ๋น์ง ์์ง๊ธฐ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋์ ์์ ๋ณ๋ ฌ์ฑ์ ๋ฌ์ฑํ๊ธฐ ์ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. .
Rust์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ๊ฐ๋ฐ์๊ฐ ํฌ์ธํฐ ์กฐ์์ผ๋ก๋ถํฐ ํด๋ฐฉ๋๊ณ , After-Free ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค, ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ๋ฒํผ ์ค๋ฒ๋ฐ ๋ฑ๊ณผ ๊ฐ์ ๋ฎ์ ์์ค์ ๋ฉ๋ชจ๋ฆฌ ์กฐ์์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐํฌํ๊ณ ์ด์ ๋ธ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ฉฐ ํ๋ก์ ํธ๋ณ ์ข ์์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ํจํค์ง ๊ด๋ฆฌ์๊ฐ ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค. , ํ ๋ฒ์ ํด๋ฆญ์ผ๋ก ํ๋ก๊ทธ๋จ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํธ์คํธํ๊ธฐ ์ํด ์ ์ฅ์๊ฐ ์ง์๋ฉ๋๋ค. .
์ฃผ์ :
- " ์์ฑ์ ์ฌ์ฉํ์ฌ ๊ตฌ์กฐ(struct) ๋ฐ ์ด๊ฑฐํ(Variant ๋ธ๋ก์ด ์๋ enum)์ ํ์ํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.]", ์ด๋ ์ ์ธ๋ ๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ์ ํฅํ ์๋ก์ด ํ๋์ ๋ณํ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ณต๊ฐ์ ์ผ๋ก ์ ์ธ๋ ํ๋๊ฐ ์๋ ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ์ง ๋ชจ๋ ๊ฐ๋ฐ์๋ "#[non_exhaustive]"๋ฅผ ์ฌ์ฉํ์ฌ ํฅํ ์๋ก์ด ํ๋๊ฐ ์ถ๊ฐ๋ ์ ์๋ ๊ตฌ์กฐ์ฒด๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ์ง๊ธ๊น์ง๋ ์ด๋ฌํ ์ํฉ์์ ๊ฐ๋ฐ์๋ ํ๋๋ฅผ ๋น๊ณต๊ฐ๋ก ์ ์ธํ ์ง, ์๋๋ฉด ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ํ๋ ๋ชฉ๋ก์ ๋ฐ์ธ๋ฉํ ์ง ์ ํํด์ผ ํ์ต๋๋ค. ์๋ก์ด ์์ฑ์ ์ด๋ฌํ ์ ํ์ ์ ๊ฑฐํ๊ณ ์ด์ ์ ์ปดํ์ผ๋ ์ธ๋ถ ์ฝ๋๋ฅผ ์์์ํฌ ์ํ ์์ด ํฅํ ์๋ก์ด ํ๋๋ฅผ ์ถ๊ฐํ ์ ์๋๋ก ํฉ๋๋ค. ํฌ๋ ์ดํธ ํจํค์ง์์ "match" ์น์ ์ ๋ณํ์ ๋น๊ตํ ๋, ํฅํ ์ถ๊ฐ๋ ์ ์๋ ํ๋๋ฅผ ํฌํจํ๊ธฐ ์ํด "_ => {...}" ๋ง์คํฌ๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ํ๋๋ฅผ ์ถ๊ฐํ ๋ ์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค.
- mac!() ์ ์ฐจ์ ๋งคํฌ๋ก๋ฅผ ํ์ ์ปจํ ์คํธ์์ ํธ์ถํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, "expand_to_type"์ด ์ ์ฐจ์ ๋งคํฌ๋ก์ธ ๊ฒฝ์ฐ ์ด์ "type Foo = expand_to_type!(bar);"๋ผ๊ณ ์์ฑํ ์ ์์ต๋๋ค.
- "extern { โฆ }" ๋ธ๋ก์์ "bang!()" ๋งคํฌ๋ก๋ฅผ ํฌํจํ ์ ์ฐจ์ ๋ฐ ์์ฑ ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ(์:
๋งคํฌ๋ก_๊ท์น!ํญ๋ชฉ ๋ง๋ค๊ธฐ { ($name:ident) => { fn $name(); } }
์ธ๋ถ {
make_item!(์ํ);
make_item!(๋ฒ ํ);
}์ธ๋ถ "C" {
#[๋ด_์์ด๋ดํฐํฐ_๋งคํฌ๋ก] fn foo();
} - ๋งคํฌ๋ก์์ "macro_rules!" ์์๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ ๋๋ค. "macro_rules!" ์์ฑ์ ํจ์ํ ๋งคํฌ๋ก("mac!()")์ ์์ฑํ ๋งคํฌ๋ก( "#[mac]") ๋ชจ๋์์ ๊ฐ๋ฅํฉ๋๋ค.
- $m:meta ๋งคํ ์์์์ ์์์ ํ ํฐ ์ด๊ฑฐํ ๊ฐ('[TOKEN_STREAM]', '{TOKEN_STREAM}' ๋ฐ '(TOKEN_STREAM)')์ ๋ํ ์ง์, ์:
๋งคํฌ๋ก_๊ท์น! ๋ฉํ_์๋ฝ { ($m:meta) => {} }
๋ฉํ๋ฅผ ์๋ฝํ์ธ์!(my::path);
๋ฉํ ์๋ฝ!(my::path = "lit" );
๋ฉํ ์๋ฝ!(my::path(abc));
๋ฉํ ์๋ฝ!(my::path[abc]);
๋ฉํ ์๋ฝ!(my::path {abc}); - Rust 2015 ๋ชจ๋์์๋ NLL(๋น์ดํ์ ์๋ช
) ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ๋น๋ฆผ ๊ฒ์ฌ๊ธฐ์์ ๊ฐ์ง๋ ๋ฌธ์ ์ ๋ํ ์ค๋ฅ ์ถ๋ ฅ์ด ํ์ฑํ๋ฉ๋๋ค. ์ด์ ์๋ Rust 2018 ๋ชจ๋์์ ์คํํ ๋ ๊ฒฝ๊ณ ๊ฐ ์ค๋ฅ๋ก ๋์ฒด๋์์ต๋๋ค.
๋ณ๊ฒฝ ์ฌํญ์ด Rust 2015 ๋ชจ๋๋ก ํ์ฅ๋ ํ ๊ฐ๋ฐ์๋ ๋ง์นจ๋ด ๋ค์์ ์ํํ ์ ์์์ต๋๋ค. ์ค๋๋ ๋์ถ ๊ฒ์ฌ๊ธฐ์์.๋น๋ฆฐ ๋ณ์์ ์๋ช ์ ๊ณ์ฐํ๋ ์๋ก์ด ๋ฉ์ปค๋์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ฒ์ฆ ์์คํ ์ ๊ธฐ์กด ๊ฒ์ฆ ์ฝ๋์์๋ ๋ฐ๊ฒฌ๋์ง ์์๋ ๋ช ๊ฐ์ง ๋ฌธ์ ์ ์ ํ์ ํ ์ ์์์ต๋๋ค. ์ด๋ฌํ ๊ฒ์ฆ ๊ณผ์ ์์ ๋ฐ์ํ๋ ์ค๋ฅ๋ ๊ธฐ์กด ์ฝ๋์์ ํธํ์ฑ์ ์ํฅ์ ๋ฏธ์น ์ ์์ผ๋ฏ๋ก, ์ฒ์์๋ ์ค๋ฅ ๋์ ๊ฒฝ๊ณ ๊ฐ ํ์๋์์ต๋๋ค.
- ์์ ๋์ ๋ชจ๋ ์ปจํ ์คํธ์์ ์ฌ์ฉ ๊ฐ๋ฅ์ฑ์ ๊ฒฐ์ ํ๋ "const" ํ๋๊ทธ๋ is_power_of_two ํจ์(๋ถํธ ์๋ ์ ์์ ๊ฒฝ์ฐ)์ ์ ์ฉ๋ฉ๋๋ค.
- API์ ์๋ก์ด ๋ถ๋ถ์ด ์์ ์ ์ธ ์นดํ
๊ณ ๋ฆฌ๋ก ์ด๋๋์์ผ๋ฉฐ, ์ฌ๊ธฐ์๋ ์์ ํ๋ todo!() ๋งคํฌ๋ก์ slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value ๋ฉ์๋๊ฐ ํฌํจ๋ฉ๋๋ค.
์ต์ ::as_deref, ์ต์ ::as_deref_mut, ์ต์ ::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32,f64}::from_be_bytes, {f32,f64}::from_le_bytes, ๊ทธ๋ฆฌ๊ณ {f32,f64}::from_ne_bytes. - ํ๋ฌผ ํจํค์ง ๊ด๋ฆฌ์์์
์ปดํ์ผ๋ฌ ๊ฒฝ๊ณ ๋ฅผ ๋์คํฌ์ ์บ์ฑํฉ๋๋ค. "cargo metadata" ๋ช ๋ น์ ์ด์ "์ข ์์ฑ ํด๊ฒฐ ๊ทธ๋ํ์์ ์ง์ ๋ ๋์ ํ๋ซํผ์ ๋ฐ์ธ๋ฉ๋ ํจํค์ง๋ง ํ์ํฉ๋๋ค. ์ ํจํ TLS ๋ฒ์ ์ ์ ์ํ๊ธฐ ์ํด http.ssl-version ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
"์น์ ์ ๊ฒ์ํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค."๋ฒ์ " ํค๋ฅผ ์ง์ ํ์ง ์๊ณ . - rustc ์ปดํ์ผ๋ฌ๋ thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64, mips64el-unknown-linux-muslabi64 ๋์ ํ๋ซํผ์ ๋ํด ๋ ๋ฒจ XNUMX ์ง์์ ์ ๊ณตํฉ๋๋ค. ๋ ๋ฒจ XNUMX์ ๊ธฐ๋ณธ์ ์ธ ์ง์์ ์๋ฏธํ์ง๋ง, ์๋ํ๋ ํ ์คํธ๋ ๊ณต์ ๋น๋๋ ์ ๊ณต๋์ง ์์ต๋๋ค.
์ถ์ฒ : opennet.ru
