Rust๋?
๋ฌ์คํธ(Rust)๋ ์ฃผ๋ก ์์คํ ํ๋ก๊ทธ๋๋ฐ์ ๋ชฉ์ ์ผ๋ก ์ค๊ณ๋ ์ปดํ์ผ ์ธ์ด๋ก์, ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ, ๋์ ์ฑ๋ฅ, ๋ณํ์ฑ(๋์์ฑ) ๋ณด์ฅ์ ํต์ฌ ๊ฐ์น๋ก ์ผ๋๋ค. ๋ณธ๋ 2006๋ ๊ทธ๋ ์ด๋ ํธ์ด(Graydon Hoare)๊ฐ ๊ฐ์ธ์ ์ผ๋ก ์์ํ ํ๋ก์ ํธ์ด๋ฉฐ, ์ดํ ๋ชจ์ง๋ผ(Mozilla)์ ์ง์๊ณผ ์คํ ์์ค ์ปค๋ฎค๋ํฐ์ ๊ธฐ์ฌ๋ฅผ ํตํด ๋ฐ์ ํ์๋ค. ๋ฌ์คํธ๋ ์ ํต์ ์ธ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(C/C++ ๋ฑ)๊ฐ ์ ๊ณตํด ์จ ์ ์์ค ์ ์ด๋ ฅ๊ณผ ์ฑ๋ฅ์ ์ ์งํ๋ฉด์๋, ๊ณ ๊ธ ์ธ์ด ์์ค์ ์์ ์ฑ ๊ฒ์ฌ์ ํ๋ถํ ํ์ ์์คํ ์ ์ ๊ณตํ๋ค.
๋ฌ์คํธ๋ฅผ ์ดํดํ๊ธฐ ์ํด ์ ๋ ํด์ผ ํ ํต์ฌ ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
์์ ๊ถ(Ownership) ์ ๋
๋ฌ์คํธ ์ปดํ์ผ๋ฌ๊ฐ ์๋ช ์ฃผ๊ธฐ(lifetime)์ ์ค์ฝํ(scope)๋ฅผ ์๊ฒฉํ๊ฒ ์ถ์ ํ์ฌ, ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ค๋ฅ(์: ์ด์ค ํด์ , ๋๊ธ๋ง ํฌ์ธํฐ)๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ๋ค.
์ ํต์ ์ธ ๊ฐ๋น์ง ์ปฌ๋ ์ (GC) ๋ฐฉ์์ด ์๋, ์ปดํ์ผ ์์ ์ ๊ฒ์ฆ์ ํตํด ๋ฐํ์ ๋น์ฉ์ ์ต์ํํ๋ค.
์ ์ฌ์ ๋ฐ์ดํฐ ๊ฒฝํฉ(Data Race) ๋ฐฉ์ง
๋ณํ์ฑ(๋์์ฑ) ํ๋ก๊ทธ๋๋ฐ์์ ๋ฐ์ํ๊ธฐ ์ฌ์ด ๋ฐ์ดํฐ ๊ฒฝํฉ์ ์ปดํ์ผ๋ฌ ๋ ๋ฒจ์์ ์ฐจ๋จํ๋ค.
์์ ํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ด๋ ๊ต์ฐฉ ์ํ(deadlock)๋ฅผ ์ค์ด๊ธฐ ์ํด, ์ค๋ ๋ ๊ฐ ๊ณต์ ์์ ์ฌ์ฉ ์ ์๊ฒฉํ ๋น๋ฆผ ๊ฒ์ฌ(Borrow Checker)๋ฅผ ์๊ตฌํ๋ค.
์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ๊ท ํ
์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก์, C/C++ ์์ค์ ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ์ ์ด์ ์ฑ๋ฅ์ ์ถ๊ตฌํ๋ค.
๋์์ โ์ ๋ก ๋น์ฉ ์ถ์ํ(Zero-cost abstraction)โ ๊ธฐ์กฐ๋ฅผ ์งํฅํ์ฌ, ๊ณ ๊ธ ์ธ์ด ๊ธฐ๋ฅ(์ ๋ค๋ฆญ, ํธ๋ ์ดํธ, ์ดํฐ๋ ์ดํฐ ๋ฑ)์ ํ์ฉ์ด ์ฑ๋ฅ์ ๋ถ์ ์ ์ํฅ์ ์ฃผ์ง ์๋๋ก ์ค๊ณ๋์๋ค.
ํ๋ถํ ํ์ ์์คํ ๊ณผ ํธ๋ ์ดํธ(Trait) ๊ธฐ๋ฐ ๋คํ์ฑ
์ ์ ํ์ ์ธ์ด๋ก์, ๋ฌ์คํธ ์ปดํ์ผ ์์ ์ ํ์ ์ค๋ฅ๋ฅผ ์ต๋ํ ์ฌ์ ์ ๋ฐ๊ฒฌํ ์ ์๋ค.
ํธ๋ ์ดํธ(Trait) ์์คํ ์ ๊ฐ์ฒด ์งํฅ ์ธ์ด์ ์ธํฐํ์ด์ค์ ์ ์ฌํ์ง๋ง, ๋ ์ ๊ตํ ๋คํ์ฑ๊ณผ ํ์ฅ์ฑ์ ์ ๊ณตํ๋ค.
์์ ์ฑ๊ณผ ์ ์ฐ์ฑ์ ๊ณ ๋ คํ ๋ฒ์ฉ์ฑ
์์คํ ํ๋ก๊ทธ๋๋ฐ๋ฟ ์๋๋ผ, ์น ์ ํ๋ฆฌ์ผ์ด์ (ํนํ WebAssembly), ์๋ฒ ๋๋(Embedded) ๋๋ฐ์ด์ค, CLI(Command Line Interface) ๋๊ตฌ ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ํ์ฉ๋๋ค.
์ปค๋ฎค๋ํฐ๊ฐ ๊ตฌ์ถํ ์์ฝ์์คํ (Cargo, crates.io, Rustup ๋ฑ)์ ํตํด ํ๋ก์ ํธ ๊ด๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ง์ํ๋ค.
์คํ ์์ค ์ปค๋ฎค๋ํฐ์ ํ์ฑ ์ํ๊ณ ๋ฌ์คํธ๋ ์คํ ์์ค ํ๋ก์ ํธ๋ก, ๊ณต์ RFC(์์ฒญ-๊ฒํ -์น์ธ) ๊ณผ์ ์ ํตํด ์ธ์ด ์ฌ์์ด ์งํํ๋ค.
์ปค๋ฎค๋ํฐ ์ฃผ๋์ ๋น ๋ฅธ ๋ฐ์ ๋๋ถ์, ์ค๋ฌด ํ๊ฒฝ์์ ์ ์ฉ ๊ฐ๋ฅํ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ๊ฐ ๊พธ์คํ ์ฆ๊ฐํ๊ณ ์๋ค.
์ด๋ ๋ฏ ๋ฌ์คํธ๋ ์์คํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์์ ์ฑ ์ค์ฌ์ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์์ฃผ๋ก ์ค๊ณ๋์์ผ๋, ์ต๊ทผ์๋ ๊ณ ์ฑ๋ฅ ์๋ฒ, ์๋ฒ ๋๋, ์ฌ์ง์ด ์น ํ๋ก ํธ์๋(WebAssembly) ์์ญ์๊น์ง ํ์ฉ์ด ํ์ฅ๋๊ณ ์๋ค. ํนํ, ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ๊ณผ ๋์์ฑ์ ๋ํ ์ปดํ์ผ๋ฌ ์ฐจ์์ ๊ฐ๋ ฅํ ๋ณด์ฅ์ ๋์ ์์ ์ฑ์ ์๊ตฌํ๋ ํ๋ก์ ํธ์์ ์ฃผ๋ชฉ๋ฐ๋ ์์ธ์ด๋ค. ์ด๋ฌํ ํน์ฑ๋ค์ ๋ฌ์คํธ๊ฐ ๊ธฐ์กด์ C/C++ ๊ณ์ด ์ธ์ด๋ค์ด ์ ์งํด ์จ ์ฑ๋ฅ ๋ฐ ์ ์ด๋ ฅ์ ์ด๋ ์ ๋ ๋์ฒดํ๊ฑฐ๋ ๋ณด์ํ ์ ์๋๋ก ํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก, ๋ฌ์คํธ๋ โ๊ณ ์ฑ๋ฅ, ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ, ๋ณํ์ฑโ์ ๋ชจ๋ ๋ง์กฑํ๋ ์ฐจ์ธ๋ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๋ถ์ํ์ผ๋ฉฐ, ์ ์ฐจ ๋ค์ํ ๋๋ฉ์ธ์ผ๋ก ๊ทธ ์ฌ์ฉ ๋ฒ์๊ฐ ํ์ฅ๋๊ณ ์๋ค.
Last updated