Mozilla ํ๋ก์ ํธ์ ์ํด ์ค๋ฆฝ๋์์ง๋ง ํ์ฌ๋ ๋ ๋ฆฝ์ ์ธ ๋น์๋ฆฌ ์กฐ์ง์ธ Rust Foundation์ ํ์์ผ๋ก ๊ฐ๋ฐ๋ Rust 1.65 ๋ฒ์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ถ์๊ฐ ๋ฐํ๋์์ต๋๋ค. ์ด ์ธ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ค์ ์ ๋๊ณ ๊ฐ๋น์ง ์์ง๊ธฐ ๋ฐ ๋ฐํ์(๋ฐํ์์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ณธ ์ด๊ธฐํ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ก ์ถ์๋จ)์ ์ฌ์ฉ์ ํผํ๋ฉด์ ๋์ ์์ ๋ณ๋ ฌ์ฑ์ ๋ฌ์ฑํ ์ ์๋ ์๋จ์ ์ ๊ณตํฉ๋๋ค.
Rust์ ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ํฌ์ธํฐ๋ฅผ ์กฐ์ํ ๋ ๊ฐ๋ฐ์๋ฅผ ์ค๋ฅ๋ก๋ถํฐ ๋ณดํธํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ํด์ ๋ ํ ์ก์ธ์ค, null ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ๋ฒํผ ์ค๋ฒ๋ฐ ๋ฑ๊ณผ ๊ฐ์ ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐฐํฌ, ๋น๋ ์ ๊ณต ๋ฐ ์ข ์์ฑ ๊ด๋ฆฌ๋ฅผ ์ํด ํ๋ก์ ํธ๋ Cargo ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ๊ฐ๋ฐํฉ๋๋ค. crates.io ์ ์ฅ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํธ์คํ ์ ์ํด ์ง์๋ฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ปดํ์ผ ์๊ฐ์ ์ฐธ์กฐ ํ์ธ, ๊ฐ์ฒด ์์ ๊ถ ์ถ์ , ๊ฐ์ฒด ์๋ช (๋ฒ์) ์ถ์ ๋ฐ ์ฝ๋ ์คํ ์ค ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค์ ์ ํ์ฑ ํ๊ฐ๋ฅผ ํตํด Rust์์ ์ ๊ณต๋ฉ๋๋ค. Rust๋ ๋ํ ์ ์ ์ค๋ฒํ๋ก์ ๋ํ ๋ณดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ์ฌ์ฉํ๊ธฐ ์ ์ ๋ณ์ ๊ฐ์ ํ์ ์ด๊ธฐํ๊ฐ ํ์ํ๋ฉฐ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ค๋ฅ๋ฅผ ๋ ์ ์ฒ๋ฆฌํ๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ณ ์ฐธ์กฐ ๋ฐ ๋ณ์ ๊ฐ๋ ์ ์ ์ฉํ๊ณ , ๊ฐ๋ ฅํ ์ ์ ์ ํ ์ง์ ์ ์ ๊ณตํ์ฌ ๋ ผ๋ฆฌ์ ์ค๋ฅ๋ฅผ ์ต์ํํฉ๋๋ค.
์ฃผ์ ํ์ :
- ์ผ๋ฐ ์ฐ๊ด ์ ํ(GAT, Generic Associated Types)์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์ด ๋ค๋ฅธ ์ ํ๊ณผ ์ฐ๊ด๋ ์ ํ ๋ณ์นญ์ ์์ฑํ๊ณ ์ ํ ์์ฑ์๋ฅผ ํน์ฑ๊ณผ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. trait Foo { type Bar<'x>; }
- "let ... else" ํํ์์ด ๊ตฌํ๋์ด "let" ํํ์ ๋ด์์ ์ง์ ํจํด ์ผ์น ์กฐ๊ฑด์ ํ์ธํ๊ณ , ํจํด์ด ์ผ์นํ์ง ์์ผ๋ฉด ์์์ ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค. let Ok(count) = u64::from_str(count_str) else { ๋นํฉ!("์ ์๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์์ต๋๋ค: '{count_str}'"); };
- ์ข ๋ฃํ ๋ธ๋ก์ ์๋ณํ๊ธฐ ์ํด ๋ธ๋ก ์ด๋ฆ(๋ ์ด๋ธ)์ ์ฌ์ฉํ์ฌ ๋ช ๋ช ๋ ๋ธ๋ก์ ์กฐ๊ธฐ์ ์ข ๋ฃํ๊ธฐ ์ํด break ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ = '๋ธ๋ก: { do_thing(); if Condition_not_met() { break '๋ธ๋ก 1; } do_next_thing(); if Condition_not_met() { break '๋ธ๋ก 2; } do_last_thing(); ์ผ };
- Linux์ ๊ฒฝ์ฐ ๊ธฐ์กด macOS ํ๋ซํผ์์๋ง ๊ฐ๋ฅํ๋ ๋๋ฒ๊น ์ ๋ณด๋ฅผ ๋ณ๋๋ก ์ ์ฅํ๋ ๊ธฐ๋ฅ(split-debuginfo)์ด ์ถ๊ฐ๋์์ต๋๋ค. "-Csplit-debuginfo=unpacked" ์ต์ ์ ์ง์ ํ๋ฉด DWARF ํ์์ debuginfo ๋ฐ์ดํฐ๊ฐ ".dwo" ํ์ฅ์๋ฅผ ๊ฐ์ง ์ฌ๋ฌ ๊ฐ์ ๊ฐ๋ณ ๊ฐ์ฒด ํ์ผ์ ์ ์ฅ๋ฉ๋๋ค. "-Csplit-debuginfo=packed"๋ฅผ ์ง์ ํ๋ฉด ํ๋ก์ ํธ์ ๋ชจ๋ debuginfo ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ".dwp" ํ์์ ๋จ์ผ ํจํค์ง๊ฐ ์์ฑ๋ฉ๋๋ค. debuginfo๋ฅผ ELF ๊ฐ์ฒด์ .debug_* ์น์ ์ ์ง์ ํตํฉํ๋ ค๋ฉด "-Csplit-debuginfo=off" ์ต์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- API์ ์๋ก์ด ๋ถ๋ถ์ด ์์ ํ๋ ํน์ฑ์ ๋ฉ์๋ ๋ฐ ๊ตฌํ์ ํฌํจํ์ฌ ์์ ์ ์ธ ๋ฒ์ฃผ๋ก ์ด๋๋์์ต๋๋ค.
- ํ์ค::์ญ์ถ์ ::์ญ์ถ์
- ๋ฐ์ด๋::as_ref
- std::io::read_to_string
- <*const T>::cast_mut
- <*mut T>::cast_const
- ์์ ๋์ ๋ชจ๋ ์ปจํ ์คํธ์์ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ ๊ฒฐ์ ํ๋ "const" ์์ฑ์ <*const T&>::offset_from ๋ฐ <*mut T>::offset_from ํจ์์์ ์ฌ์ฉ๋ฉ๋๋ค.
- LSP(Language Server Protocol) ํ๋กํ ์ฝ ๊ตฌํ์ Rust-Analyzer๋ก ์ด์ ํ๋ ๋ง์ง๋ง ๋จ๊ณ์ ์ผ๋ถ๋ก, ์ค๋๋ Rust Language Server(RLS) ๊ตฌํ์ด ๋ค์์ผ๋ก ์ ํํ๋ผ๋ ์ ์๊ณผ ํจ๊ป ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํ๋ ์คํ ์๋ฒ๋ก ๋์ฒด๋์์ต๋๋ค. ๋ น ๋ถ์๊ธฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ปดํ์ผํ๋ ๋์ MIR ์ค๊ฐ ์ฝ๋์ ์ธ๋ผ์ธ ๋ฐฐํฌ ์ง์์ด ํ์ฑํ๋์ด ์ผ๋ฐ์ ์ธ ํฌ๋ ์ดํธ ํจํค์ง์ ์ปดํ์ผ ์๋๊ฐ 3~10% ํฅ์๋ฉ๋๋ค.
- ์์ฝ๋ ๋น๋ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด Cargo ํจํค์ง ๊ด๋ฆฌ์๋ ๋๊ธฐ์ด์์ ์คํ์ ๊ธฐ๋ค๋ฆฌ๋ ์์ ์ ๋ ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ํ ๋ณผ๋ณด์์ ์๋์ฐจ ์ ๋ณด ์์คํ ์ ๊ตฌ์ฑ ์์๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํด Rust ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ธํฐ๋ทฐ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. Rust๋ก ๊ธฐ์กด ์ฝ๋์ ํ ์คํธ๋ ์ฝ๋๋ฅผ ๋ค์ ์์ฑํ ๊ณํ์ ์์ง๋ง, ์๋ก์ด ์ฝ๋์ ๊ฒฝ์ฐ Rust๋ ์ ๋ ดํ ๋น์ฉ์ผ๋ก ํ์ง์ ํฅ์์ํค๊ธฐ ์ํด ์ ํธ๋๋ ์ต์ ์ค ํ๋์ ๋๋ค. Rust ์ธ์ด ์ฌ์ฉ๊ณผ ๊ด๋ จ๋ ์์ ๊ทธ๋ฃน์ ์๋์ฐจ ํํ AUTOSAR(AUTomotive Open System ARchitecture) ๋ฐ SAE(Society of Automotive Engineers)์๋ ๋ง๋ค์ด์ก์ต๋๋ค.
๋ํ Google์ ์์ง๋์ด๋ง ๋ถ์ฌ์ฅ์ธ David Kleidermacher๋ ์ํธํ ํค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด Android ํ๋ซํผ์์ ์ฌ์ฉ๋๋ ์ฝ๋๋ฅผ Rust๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ๊ณผ ์คํ์์ HTTPS ํ๋กํ ์ฝ์ ํตํ DNS ๊ตฌํ์ Rust๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช
ํ์ต๋๋ค. UWB ์นฉ(Ultra-Wideband) ๋ฐ Tensor G2 ์นฉ๊ณผ ๊ด๋ จ๋ ๊ฐ์ํ ํ๋ ์์ํฌ(Android Virtualization Framework)์ฉ์
๋๋ค. Rust๋ก ์ฌ์์ฑ๋ ์๋ก์ด Bluetooth ๋ฐ Wi-Fi ์คํ๋ Android์ฉ์ผ๋ก ๊ฐ๋ฐ ์ค์
๋๋ค. ์ผ๋ฐ์ ์ธ ์ ๋ต์ ๋จผ์ ๊ฐ์ฅ ์ทจ์ฝํ๊ณ ์ค์ํ ์ํํธ์จ์ด ๊ตฌ์ฑ ์์๋ฅผ Rust๋ก ๋ณํํ ๋ค์ ๋ค๋ฅธ ๊ด๋ จ ํ์ ์์คํ
์ผ๋ก ํ์ฅํ์ฌ ์ ์ฐจ์ ์ผ๋ก ๋ณด์์ ๊ฐํํ๋ ๊ฒ์
๋๋ค. ์๋
์๋ Rust ์ธ์ด๊ฐ Android ํ๋ซํผ ๊ฐ๋ฐ์ ํ์ฉ๋๋ ์ธ์ด ๋ชฉ๋ก์ ํฌํจ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru