๋ถ๋ฅ:ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
fn main() { println!("hello world"); } |
๋ฌ์คํธ Rust | |
๊ฐ๋ฐ | |
๋ฒ์ | 1.50.0 2021๋ 2์ 11์ผ ์ ๋ฐ์ดํธ |
์น์ฌ์ดํธ | |
1. ๊ฐ์2. ์ญ์ฌ3. ํน์ง
3.1. ์์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ3.2. ์ ๋ค๋ฆญ3.3. ํธ๋ ์ดํธ
4. IDE ์ง์ ํํฉ5. ์ฃผ๋ชฉ๋ฐ๊ณ ์๋ ์ธ์ด3.3.1. ํน์ํ ํธ๋ ์ดํธ
3.4. ํ์ด์ง๋ ๋งคํฌ๋ก3.5. ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ5.1. ๊ฐ๋ฐ์๋ค์ด ๊ฐ์ฅ ์ข์ํ๋ ์ธ์ด5.2. ๋ง์ดํฌ๋ก์ํํธ๋ ์ฃผ๋ชฉํ๊ณ ์๋ ์ธ์ด
6. ์ฌ์ฉ ํํฉ ๋ฐ ์ ๋ง7. ๋์8. ๊ด๋ จ ๋งํฌ1. ๊ฐ์[ํธ์ง]
2010๋
7์ 7์ผ์ ์ฒ์ ๋ฐํ๋๊ณ 2015๋
5์ 15์ผ์ ์์ ๋ฒ์ ์ด ์ ์ ๋ฐํ๋ ์ดํ, ๋ชจ์ง๋ผ ์ฌ๋จ์์ ์ฐ๊ตฌ ๋ชฉ์ ์ผ๋ก ๊ฐ๋ฐ๋๊ณ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด.
C, C++, Go, D์ ๊ฐ์ ์ปดํ์ผ ๊ธฐ๋ฐ์ ์ธ์ด์ด์ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ํ๋ฉฐ, Go๋ณด๋ค๋ ๋ฐ ๋ ๋ฆ๊ฒ ๋์์ง๋ง[1] ๊ทธ๋๋ง ๋น์ทํ ์๊ธฐ์ ๋ฑ์ฅํ๋ค๋ ์ ๊ณผ ๋ ์ธ์ด ๋ชจ๋ C/C++๋ฅผ ์๋ก ๋ค๋ฅธ ๋ฐฉํฅ์์ ๋์ฒดํ๋ ค ํ๋ค๋ ์ ๋๋ฌธ์ ๋ผ์ด๋ฒ ๊ด๊ณ๋ก ์ฎ์ด๊ธฐ๋ ํ๋ค. ๋ฉํฐ์ฝ์ด ํ๋ก์ธ์ฑ์ด ์ค์์๋๋ ํ ์ถ์ธ์ ๋ฐ๋ผ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ ๋ฐ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์๋ ๊ฐ์ ์ ๊ฐ์ง๊ณ ์๋ค.Go, Rust๋ณด๋ค ํจ์ฌ ๋จผ์ ๋ฑ์ฅํ D์ธ์ด๋...
์จ๋ผ์ธ ์์ผ๋ก ์ฝ๋๋ฅผ ์คํ์์ผ ๋ณด๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ๋ก.
Rust ํ๋ก๊ทธ๋๋จธ๋ ์ค์ค๋ก๋ฅผ Rustacean์ด๋ผ๊ณ ์์นญํ๋๋ฐ ์ด ๋๋ฌธ์ธ์ง Rust ํ๋ก๊ทธ๋จ๊ณผ ๊ด๋ จ๋ ๋ฏธ๋์ด์์๋ ๊ฒ[2]์ ์ฐ๊ด๋ ์ด๋ฏธ์ง๊ฐ ๋ง์ด ๋์จ๋ค. ๊ฐ์ด๋๋ถ ํ์ง์๋ ๊ฒ๊ฐ ๋์จ๋ค.
C, C++, Go, D์ ๊ฐ์ ์ปดํ์ผ ๊ธฐ๋ฐ์ ์ธ์ด์ด์ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ํ๋ฉฐ, Go๋ณด๋ค๋ ๋ฐ ๋ ๋ฆ๊ฒ ๋์์ง๋ง[1] ๊ทธ๋๋ง ๋น์ทํ ์๊ธฐ์ ๋ฑ์ฅํ๋ค๋ ์ ๊ณผ ๋ ์ธ์ด ๋ชจ๋ C/C++๋ฅผ ์๋ก ๋ค๋ฅธ ๋ฐฉํฅ์์ ๋์ฒดํ๋ ค ํ๋ค๋ ์ ๋๋ฌธ์ ๋ผ์ด๋ฒ ๊ด๊ณ๋ก ์ฎ์ด๊ธฐ๋ ํ๋ค. ๋ฉํฐ์ฝ์ด ํ๋ก์ธ์ฑ์ด ์ค์์๋๋ ํ ์ถ์ธ์ ๋ฐ๋ผ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ ๋ฐ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์๋ ๊ฐ์ ์ ๊ฐ์ง๊ณ ์๋ค.
์จ๋ผ์ธ ์์ผ๋ก ์ฝ๋๋ฅผ ์คํ์์ผ ๋ณด๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ๋ก.
Rust ํ๋ก๊ทธ๋๋จธ๋ ์ค์ค๋ก๋ฅผ Rustacean์ด๋ผ๊ณ ์์นญํ๋๋ฐ ์ด ๋๋ฌธ์ธ์ง Rust ํ๋ก๊ทธ๋จ๊ณผ ๊ด๋ จ๋ ๋ฏธ๋์ด์์๋ ๊ฒ[2]์ ์ฐ๊ด๋ ์ด๋ฏธ์ง๊ฐ ๋ง์ด ๋์จ๋ค. ๊ฐ์ด๋๋ถ ํ์ง์๋ ๊ฒ๊ฐ ๋์จ๋ค.
2. ์ญ์ฌ[ํธ์ง]
์์ธํ ๋ด์ฉ์ Github์ rust-lang/rust ๋ฆด๋ฆฌ์ค ์ฐธ์กฐ.
2018๋ 12์ 6์ผ์ ๋ฐํ๋ 1.31.0 ๋ฒ์ ์ ๊ธฐ์ ์ผ๋ก Rust 2018 Edition์ผ๋ก ์๋์ ์ด ๋ณ๊ฒฝ๋๊ณ (๊ฐ์ด๋ ๋ถ) 1.31.0 ์ด์ ๋ฒ์ ์ Rust 2015 Edition์ผ๋ก ์ ์๋์๋ค.
์๋๋ ๋ชจ์ง๋ผ ์์์ ๊ฐ๋ฐ์์ธ ๊ทธ๋ ์ด๋ ํธ์ด์ ๊ฐ์ธ ํ๋ก์ ํธ์์ผ๋, ๋ชจ์ง๋ผ ์ฌ๋จ์ ์ฐจ๊ธฐ ์น ๋ธ๋ผ์ฐ์ ์์ง ํ๋ก์ ํธ์ธ ์๋ณด(Servo)๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐ์ ์ฐ๊ธฐ ์ํด ํจ๊ป ์ฐ๊ตฌ ํ๋ก์ ํธ๋ก ํธ์ ๋์๋ค.[3] ์์ธํ ๋ด์ฉ์ ์๋ณด ์ฐธ๊ณ .
2018๋ 12์ 6์ผ์ ๋ฐํ๋ 1.31.0 ๋ฒ์ ์ ๊ธฐ์ ์ผ๋ก Rust 2018 Edition์ผ๋ก ์๋์ ์ด ๋ณ๊ฒฝ๋๊ณ (๊ฐ์ด๋ ๋ถ) 1.31.0 ์ด์ ๋ฒ์ ์ Rust 2015 Edition์ผ๋ก ์ ์๋์๋ค.
์๋๋ ๋ชจ์ง๋ผ ์์์ ๊ฐ๋ฐ์์ธ ๊ทธ๋ ์ด๋ ํธ์ด์ ๊ฐ์ธ ํ๋ก์ ํธ์์ผ๋, ๋ชจ์ง๋ผ ์ฌ๋จ์ ์ฐจ๊ธฐ ์น ๋ธ๋ผ์ฐ์ ์์ง ํ๋ก์ ํธ์ธ ์๋ณด(Servo)๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐ์ ์ฐ๊ธฐ ์ํด ํจ๊ป ์ฐ๊ตฌ ํ๋ก์ ํธ๋ก ํธ์ ๋์๋ค.[3] ์์ธํ ๋ด์ฉ์ ์๋ณด ์ฐธ๊ณ .
3. ํน์ง[ํธ์ง]
Rust๋ ํ๋์ ์ธ ์์คํ
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก, C/C++์ ๋๋ฑํ ์์ค์ ์๋๋ฅผ ๋ฌ์ฑํ๋ฉด์ ์์ ์ฑ, ์๋, ๋์์ฑ์ ๋ชฉํ๋ก ํ๋ค. "์์ ํ์ง ์์" ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ "์์ ํ" ์ฝ๋๋ก ์ถ์ํํ ์ ์๋ ๋๊ตฌ ๋ํ ์ธ์ด ์ฐจ์์์ ์ ๊ณตํ๋ค. ์์ ํ ์ฝ๋๋ C++์ RAII(Resource Acquiration Is Initialization)๋ฅผ ๊ฐ์ ํ๊ณ ์ฐธ์กฐํ๋ ๋ณ์์ ์๋ช
์ ์ปดํ์ผ๋ฌ์์ ํ์ธํ๋ค. ๋ํ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก๋ถํฐ ๋ฐ์ ๋ ํ์
์์คํ
์ ๋์
ํ์์ผ๋ฉฐ, ํด๋์ค ๋์ ํธ๋ ์ดํธ(Trait)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋คํ์ฑ์ ๋ฌ์ฑํ๋ค.[4] ํ์
์ด ๊ฐ์ ๋๋ ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํด ์ธ์ด๋ฅผ ํ์ฅํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ฉฐ, ํ๋์ ์ธ ๋ชจ๋ ์์คํ
์ ํตํด ์ฝ๊ฒ ๋ชจ๋ํ๋ ์ ์๋ค. ๋ชจ๋๋ค์ ํฌ๋ ์ดํธ(Crate)๋ผ๊ณ ํ๋ ๋จ์๋ก ๋ฌถ์ฌ์ ์คํ ํ์ผ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฐฐํฌ๋ ์ ์์ผ๋ฉฐ, Cargo๋ผ๋ ํจํค์ง ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์ ํตํด ๋น๋ ๋ฐ ํจํค์ง ๋ฐฐํฌ๋ฅผ ์๋ํํ๊ณ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ Cargo๋ฅผ ํตํด ์๋์ผ๋ก ๋ค์ด๋ก๋๋ฐ์ ์ ์๋ค.
3.1. ์์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ[ํธ์ง]
Rust๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์์ ์ฑ์ด ์๋นํ ๊ณ ๋ ค๋ ์ธ์ด์ด๋ค. Lifetime(์๋ช
)๊ณผ Ownership(์์ ๊ถ)๋ฅผ ์ปดํ์ผ ํ์์ ์ถ์ ํ ์ ์๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ์คํ ์์ญ์ ํ ๋น๋๋ ๊ฐ์ฒด์ ๋ณ์์ ์์ฑ๊ณผ ์๋ฉธ ์๊ธฐ๋ฅผ ์ปดํ์ผ ํ์์ ๋ชจ๋ ๊ฒฐ์ ํ๋ค. ์ฐธ์กฐ์๋ ์๋ช
์ ์๋์ ์ผ๋ก ๊ฒฐ์ ํ ์ ์๋ ๊ฒฝ์ฐ๋ ์๋๋ฐ, ๋ฉ์๋๋ ํจ์์ (๋งค๊ฐ) ๋ณ์์ Lifetime๋ฅผ ๋ช
์ํด์ฃผ์ด์ผ ํ๋ค. ์ด๋ ๋ง์ ํ๋ก๊ทธ๋๋จธ๋ค์ด ์ปดํ์ผ ์๋ฌ๋ฅผ ๊ฒช์๋ ์์ธ ์ค ํ๋์ด๋ค. ์ด๋ฌํ ๊ฐ๋
์ ์ค๋งํธ ํฌ์ธํฐ์ ํผ๋ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์ค๋งํธ ํฌ์ธํฐ๋ ํ ์์ญ์ ํ ๋น๋๋ ๊ฐ์ฒด๋ฅผ ์๋์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ฒ์ผ๋ก ๊ฐ์ฒด์ ์๋ช
์ด ๋ฐํ์์ ๊ฒฐ์ ๋๋ฏ๋ก, ์ ๊ฐ๋
๊ณผ ์ค๋งํธ ํฌ์ธํฐ๋ ์ญํ ์ด ์์ฐํ ๋ค๋ฅด๋ค.
ํ ์์ญ์ ํ ๋นํ๋ ๊ฐ์ฒด์ ๊ฒฝ์ฐ, Rust ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณต๋๋
Rust๋ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ ๋งํผ, Zero-cost abstraction(๋ฌด๋น์ฉ ์ถ์ํ)๋ฅผ ์งํฅํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ ๊ธฐ ์์ง์ ์ฌ์ฉํ์ง ์๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก C/C++์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์คํ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ํ ๋น๋ฐ์ ์ฌ์ฉํ๋ค.[5] ํฌ์ธํฐ์์ ๊ฐ์ ์ง์ ๊ฐ์ ธ์ค๊ฑฐ๋ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๊ธ์ง๋๋ค.
ํ ์์ญ์ ํ ๋นํ๋ ๊ฐ์ฒด์ ๊ฒฝ์ฐ, Rust ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณต๋๋
std::boxed::Box๋ std::rc::Rc๋ฅผ ํตํด ์ค๋งํธ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. std::rc::Rc์ ๊ฐ์ Reference Counting(์ฐธ์กฐ ํ์ ๊ณ์ฐ) ์ค๋งํธ ํฌ์ธํฐ์ ๊ฒฝ์ฐ, ์ํ ์ฐธ์กฐ์ ์ํ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์ฌ์ ํ ๋ฐ์ํ ์ ์๋ค๋ ์ ์ ์ ์ํ์. ์ด ๊ฒฝ์ฐ ์ฐธ์กฐ ํ์๋ฅผ ์ถ๊ฐํ์ง ์๋ std::rc::Weak๋ฅผ ์ํฉ์ ๋ง๊ฒ ์ฌ์ฉํด์ ํด๊ฒฐ ํ ์ ์๋ค.Rust๋ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ ๋งํผ, Zero-cost abstraction(๋ฌด๋น์ฉ ์ถ์ํ)๋ฅผ ์งํฅํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ ๊ธฐ ์์ง์ ์ฌ์ฉํ์ง ์๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก C/C++์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์คํ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ํ ๋น๋ฐ์ ์ฌ์ฉํ๋ค.[5] ํฌ์ธํฐ์์ ๊ฐ์ ์ง์ ๊ฐ์ ธ์ค๊ฑฐ๋ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๊ธ์ง๋๋ค.
unsafe ์ค์ฝํ๋ ํจ์ ๋ด์์๋ ํ์ฉ๋์ง๋ง, ์ด๋ ์์ ํ์ง ์์ ์ฝ๋๋ฅผ ์์ ํ ์ฝ๋๋ก ์ถ์ํ ํ๊ธฐ ์ํด ์กด์ฌํ๋ ๊ฒ์ด๋ค.3.1.1. ์์ ๊ถ๊ณผ ์๋ช [ํธ์ง]
Rust ์ปดํ์ผ๋ฌ๋ "์์ ํ ์ฝ๋"์์ ๋ณ์์ ์์ ๊ถ์ ์ปดํ์ผ ๋จ๊ณ์์ ๋ชจ๋ ์ถ์ ํ ์ ์๋ค. ์ด๋ฅผ ์ด์ฉํด ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ฅผ ์ค๋ฒํค๋ ์์ด ์๋ฌต์ ์ผ๋ก(Implicit) ์ํํจ์ผ๋ก์จ, Rust๋ ๋ฐํ์ ์ค๋ฒํค๋๊ฐ ์๋ ์์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ด๋ฃจ์ด๋ธ๋ค.
Rust์์ ๋ชจ๋ ๊ฐ[6]์ ๊ทธ ๊ฐ์ด ๋์ ๋ ๋ณ์๋ ๊ตฌ์กฐ์ฒด ํ๋, ๋๊ฒจ๋ฐ์ ํจ์ ์ธ์ ๋ฑ์ ์ด๋ฆ์ ๊ท์๋๋ค. ์ด๋ฆ์ ์๊ธฐ์๊ฒ ๊ท์๋ ๊ฐ์ ๋ํ ์์ ๊ถ(Ownership)์ ๊ฐ์ง๋ฉฐ, ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๊ฐ์ ๋์ ํ๋ฉด ๊ทธ ์ด๋ฆ์ผ๋ก ์์ ๊ถ์ด ์ด์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์ธ์ด์ ๋ฌ๋ฆฌ,
ํจ์์ ๋๊ฒจ์ง ์ธ์๋ ํจ์๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ๊ถ์ ๊ฐ์ง๊ฒ ๋๋ค. ํจ์๊ฐ ๋ฐํํ๋ ๋ณ์๋ ํจ์ ๋ฐ๊นฅ ์ค์ฝํ(Scope)๋ก ์์ ๊ถ์ ๋๊ฒจ์ค๋ค.[7] ๋ง์ฝ ์์ ๊ถ์ ๋๊ฒจ์ฃผ์ง ๋ชปํ ์ฑ๋ก ํจ์๋ ํด๋น ์ค์ฝํ๊ฐ ์ข ๋ฃ๋๋ฉด, ๊ฑฐ๊ธฐ์ ๋ฌถ์ฌ ์๋ ๋ณ์๋ ์๋ช ์ด ๋๋๊ฒ ๋๋ค.
์์ ๊ถ ๊ท์น์ ๋ฐ๋ผ ํ๋์ ๊ฐ์ ์ธ์ ๋ ํ๋์ ์ด๋ฆ์ผ๋ก๋ง ์ ๊ทผํ ์ ์๊ฒ ๋๋๋ฐ, ์ค์ ๋ก ์ด๋ ๊ฒ๋ง ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ค๋ฉด ์ ์ฝ์ด ๋๋ฌด ์ฌํ๋ค. ๋ฐ๋ผ์ Rust์์ ๋ค๋ฅธ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋๋ก Borrowed pointer(`&`)[8]๋ฅผ ์ ๊ณตํ๊ณ ์๋ค. Borrowed pointer๋ C๋ C++์์์ ํฌ์ธํฐ์ฒ๋ผ ๋ค๋ฅธ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋๋ฐ, ์ฐธ์กฐ๋๋ ๋ณ์๋ ์ฐธ์กฐํ๋ ๋ณ์๋ณด๋ค ์๋ช ์ด ๊ฐ๊ฑฐ๋ ๊ธธ์ด์ผ ํ๋ค. ์ฝ๊ฒ ๋งํ์๋ฉด, "๋์๊ด์์ ์ฑ ์ ๋น๋ ธ์ผ๋ฉด ์ ์ด๋ ๋์๊ด์ด ๋งํ๊ธฐ ์ ์๋ ์ฑ ์ ๋ฐ๋ฉํ์์ค"์ ๊ฐ๋ค.[9]. ๋ฉํฐ ์ค๋ ๋ ์ฐธ์กฐ์ ๊ฐ์ ์ํฉ์ผ๋ก ์ธํด, ์๋ช ์ ์ปดํ์ผ ํ์์ ๊ฒฐ์ ํ ์ ์๋ ๊ฒฝ์ฐ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
Rust์์ ๋ชจ๋ ๊ฐ[6]์ ๊ทธ ๊ฐ์ด ๋์ ๋ ๋ณ์๋ ๊ตฌ์กฐ์ฒด ํ๋, ๋๊ฒจ๋ฐ์ ํจ์ ์ธ์ ๋ฑ์ ์ด๋ฆ์ ๊ท์๋๋ค. ์ด๋ฆ์ ์๊ธฐ์๊ฒ ๊ท์๋ ๊ฐ์ ๋ํ ์์ ๊ถ(Ownership)์ ๊ฐ์ง๋ฉฐ, ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๊ฐ์ ๋์ ํ๋ฉด ๊ทธ ์ด๋ฆ์ผ๋ก ์์ ๊ถ์ด ์ด์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์ธ์ด์ ๋ฌ๋ฆฌ,
a = b์ ๊ฐ์ ์ฐ์ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณต์ฌ ์ฐ์ฐ์ด ์๋ ์ด๋ ์ฐ์ฐ์ด๋ค. b๊ฐ ๊ฐ์ง๋ ๋ฐ์ดํฐ์ ์์ ๊ถ์ a๋ก ์ด์ ํ๊ฒ ๋๋ฉฐ, b๋ก๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค. ๋ค๋ง, ๋จ์ํ ๊ฐ์ ๋ณต์ฌํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ ์ ์๋ ๊ฒฝ์ฐ, ํด๋น ํ์
์ #[derive(Copy)]์ ๊ฐ์ ๋ง์ปค๋ก Copy Trait์์ ํ์ํ๊ฒ ํ์ฌ, ์ด๋ ์ฐ์ฐ ๋์ ๋ณต์ฌ ์ฐ์ฐ์ ์ํํ๋๋ก ํ ์ ์๋ค. std::vec::Vec๊ณผ ๊ฐ์ด ๊ฐ์ ๋จ์ํ ๋ณต์ฌํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ ์ ์๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ ์ฐ์ฐ์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ฒ ๋๋ฉฐ, ํด๋น ๊ฐ์ฒด์์ Clone Trait์ ๊ตฌํํ์ฌ clone() ๋ฉ์๋๋ฅผ ํตํด ๋ช
์์ ์ธ ๋ณต์ ๋ฅผ ์ ๊ณตํ ์ ์๋ค.ํจ์์ ๋๊ฒจ์ง ์ธ์๋ ํจ์๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ๊ถ์ ๊ฐ์ง๊ฒ ๋๋ค. ํจ์๊ฐ ๋ฐํํ๋ ๋ณ์๋ ํจ์ ๋ฐ๊นฅ ์ค์ฝํ(Scope)๋ก ์์ ๊ถ์ ๋๊ฒจ์ค๋ค.[7] ๋ง์ฝ ์์ ๊ถ์ ๋๊ฒจ์ฃผ์ง ๋ชปํ ์ฑ๋ก ํจ์๋ ํด๋น ์ค์ฝํ๊ฐ ์ข ๋ฃ๋๋ฉด, ๊ฑฐ๊ธฐ์ ๋ฌถ์ฌ ์๋ ๋ณ์๋ ์๋ช ์ด ๋๋๊ฒ ๋๋ค.
์์ ๊ถ ๊ท์น์ ๋ฐ๋ผ ํ๋์ ๊ฐ์ ์ธ์ ๋ ํ๋์ ์ด๋ฆ์ผ๋ก๋ง ์ ๊ทผํ ์ ์๊ฒ ๋๋๋ฐ, ์ค์ ๋ก ์ด๋ ๊ฒ๋ง ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ค๋ฉด ์ ์ฝ์ด ๋๋ฌด ์ฌํ๋ค. ๋ฐ๋ผ์ Rust์์ ๋ค๋ฅธ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋๋ก Borrowed pointer(`&`)[8]๋ฅผ ์ ๊ณตํ๊ณ ์๋ค. Borrowed pointer๋ C๋ C++์์์ ํฌ์ธํฐ์ฒ๋ผ ๋ค๋ฅธ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋๋ฐ, ์ฐธ์กฐ๋๋ ๋ณ์๋ ์ฐธ์กฐํ๋ ๋ณ์๋ณด๋ค ์๋ช ์ด ๊ฐ๊ฑฐ๋ ๊ธธ์ด์ผ ํ๋ค. ์ฝ๊ฒ ๋งํ์๋ฉด, "๋์๊ด์์ ์ฑ ์ ๋น๋ ธ์ผ๋ฉด ์ ์ด๋ ๋์๊ด์ด ๋งํ๊ธฐ ์ ์๋ ์ฑ ์ ๋ฐ๋ฉํ์์ค"์ ๊ฐ๋ค.[9]. ๋ฉํฐ ์ค๋ ๋ ์ฐธ์กฐ์ ๊ฐ์ ์ํฉ์ผ๋ก ์ธํด, ์๋ช ์ ์ปดํ์ผ ํ์์ ๊ฒฐ์ ํ ์ ์๋ ๊ฒฝ์ฐ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
3.1.2. ๋ณ๊ฒฝ์ฑ[ํธ์ง]
Rust ์ธ์ด์์๋ ๋ชจ๋ ๋ณ์์ ๋ณ๊ฒฝ์ฑ(Mutability)์ ๋ช
ํํ๊ฒ ์ปดํ์ผ ํ์์ ๊ตฌ๋ถํ๋ค. ๋ณ์ ์์ ์ ๊ดํ ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ๋ฒ ์ด๊ธฐํ๋ ๋ณ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๊ณ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ค.
mutํค์๋๋ฅผ ํตํด ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ณ์๋ฅผ ์ ์ธํ ์ ์๋ค.- ์ฐธ์กฐ์ ๊ฒฝ์ฐ, ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ณ์๋ฅผ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ณ์๋ก ์ฐธ์กฐํ ์ ์๋ค.
- ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ฐธ์กฐ ๋ณ์(Mutable reference)๋ ์ค์ฝํ ๋ด์์ ๋ ๊ฐ ์ด์ ์ ์ธ๋ ์ ์๋ค.
์ด๋ฌํ ๊ฐ๋ ์ ๋์์ฑ์ ์ ์ดํ๊ธฐ ์ํด ์ค๊ณ๋ ๊ฒ์ ์๋๋ค. ๋ฉํฐ ์ค๋ ๋์์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ณ์๋ฅผ ๋ฝ์ด๋ ๋ฎคํ ์ค ์์ด ๊ณต์ ํ๋ ๊ฒ์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์์ ๋ฐ๋์งํ ๋ฐฉ๋ฒ์ด ์๋๋ค. ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์๋, ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ณ์๋ฅผ
std::sync::Arc๋ std::sync::Mutex์ ๊ฐ์ด ๋์์ฑ ์ ์ด๋ฅผ ์ ๊ณตํ๋ ํ์
์ผ๋ก ๋ฌถ์ด์ ์์ ํ๊ฒ ๊ด๋ฆฌํ ์ ์๋ค.3.2. ์ ๋ค๋ฆญ[ํธ์ง]
C++, C#, Java ๋ฑ ๋์ค์ ์ธ ์ ์ ํ์
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์์ ํํ ์ ๊ณตํ๋ ์ ๋ค๋ฆญ(Generic)์ Rust ๋ํ ๊ฐ์ง๊ณ ์๋ค. C#์ด๋ Java์ฒ๋ผ ํ์
์ธ์๋ฅผ ์ ๊ณตํ๋ ์ ๋์ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์์ผ๋ฉฐ, ๋ด๋ถ์ ์ผ๋ก๋ C++์ ํ
ํ๋ฆฟ์ฒ๋ผ ํ์
๋ณ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ์ฝ๋ ์์ฑ์ ํ์ํ ์ ๋ณด๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจ์ํค๊ธฐ ๋๋ฌธ์ C++์๋ ๋ฌ๋ฆฌ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจ๋ ์ ๋ค๋ฆญ ํ์
์ด๋ ํจ์๋ ์ ์ฝ ์์ด ์ธ ์ ์๋ค.[10]
3.3. ํธ๋ ์ดํธ[ํธ์ง]
ํธ๋ ์ดํธ(Trait)๋ ์ผ์ข
์ ์ธํฐํ์ด์ค๋ก, ๊ฐ์ฒด๊ฐ ๊ฐ์ง๋ ๋ฉ์๋์ ๋ชฉ๋ก์ ์ ๊ณตํ๋ ์ญํ ์ ํ๋ค. ์ ํํ์ง ์์ง๋ง ์ฝ๊ฒ ๋งํ์๋ฉด, ํ๋์ ๊ฐ์ฒด๋ ์ฌ๋ฌ (๋ฒ์ฉ) ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ์ ์๋ค. ํธ๋ ์ดํธ๋ ๊ฐ์ฒด์ ๋ฌ๋ฆฌ ๋ณ์๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ ์์์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ
ํธ๋ ์ดํธ๊ฐ ๊ฐ์ง๋ ์ค์ํ ์ญํ ์ค ํ๋๋, ์ ๋ค๋ฆญ ์ธ์์ ํธ๋ ์ดํธ๋ฅผ ์จ์ ์ธ์๋ก ๋ค์ด๊ฐ ํ์ ์ ํ์ํ ์กฐ๊ฑด์ ๋ถ์ด๋ ๊ฒ์ด๋ค.[11] ์๋ฅผ ๋ค์ด ๊ฐ ์ธ ๊ฐ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ์ ๋ค๋ฆญ ํจ์๋ ์ด๋ ๊ฒ ๋ง๋ค ์ ์๋ค.
impl T for A ๋ธ๋ก์ ์์ฑํด์ ์ด๋ค ํด๋์ค์ ํธ๋ ์ดํธ๋ฅผ ๊ตฌํํ๊ฒ ๋๋ฉด, ๊ตฌํ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ํธ๋ ์ดํธ์ ๋ฉ์๋์ ๊ธฐ๋ณธ ๊ตฌํ์ด ์๋ ๊ฒฝ์ฐ, ๊ธฐ๋ณธ ๊ตฌํ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋๋ก ํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.ํธ๋ ์ดํธ๊ฐ ๊ฐ์ง๋ ์ค์ํ ์ญํ ์ค ํ๋๋, ์ ๋ค๋ฆญ ์ธ์์ ํธ๋ ์ดํธ๋ฅผ ์จ์ ์ธ์๋ก ๋ค์ด๊ฐ ํ์ ์ ํ์ํ ์กฐ๊ฑด์ ๋ถ์ด๋ ๊ฒ์ด๋ค.[11] ์๋ฅผ ๋ค์ด ๊ฐ ์ธ ๊ฐ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ์ ๋ค๋ฆญ ํจ์๋ ์ด๋ ๊ฒ ๋ง๋ค ์ ์๋ค.
3.3.1. ํน์ํ ํธ๋ ์ดํธ[ํธ์ง]
๋ช๋ช ํธ๋ ์ดํธ(Trait)๋ ์ปดํ์ผ๋ฌ์๊ฒ ํน์ํ ์ทจ๊ธ์ ๋ฐ๋๋ค. ์ด์ค ๋ช๋ช์ ํน์ํ ์ฑ์ง์ ๋ํ๋ผ ๋ ์ฐ์ด๊ณ ๋ช๋ช์ ๋ฌธ๋ฒ์ ์ถ๊ฐ ์์(Syntactic Sugar)๋ก์ ์๋ํ๋ค.
Send: ํ์T๊ฐ ์ค๋ ๋ ๊ฒฝ๊ณ์ ์ ๋๋๋ค ์ ์๋๋ก ํ๋ ํธ๋ ์ดํธ. Send๊ฐ ์๋ ํ์ ์ ๋๋ฌผ์ง๋ง ๋ง์ฝ์ thread local storage ๋ฑ์ ํ์ฉํ๋ ์ปค์คํ ํ์ ์ ๋ง๋ค ๊ฒฝ์ฐ์๋ Send๊ฐ ์๋ ์ ์์.Sync: ํ์T์ ๋ ํผ๋ฐ์ค๊ฐ ์ค๋ ๋ ๊ฐ์ ๊ณต์ ๋๋๋ก ํ๋ ํธ๋ ์ดํธ.&T๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ๊ธฐ ์ ์ฉ์ ๋ปํ๊ธฐ ๋๋ฌธ์ ์ค๋ ๋๊ฐ์ ๊ณต์ ๋์ด๋ ๊ด์ฐฎ์ง๋ง ๊ฐ๋&T๋ก ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฟ ์ ์๋ ํ์ ์ ๊ฒฝ์ฐ์๋Sync๋ฅผ ๊ธ์งํ๊ฑฐ๋ ๋๋ atomic operation ์ ์ฌ์ฉํ์ฌ ๊ณต์ ๋๋ ์ํฉ์๋ ๋ฌธ์ ๊ฐ ์๋๋ก ํด์ผํจ. ๋ํ์ ์ธ ์์๋กAtomicUsize๋ฑ์ ํ์ ์ด ์์.Copy:a = b์์ ์ด๋ ์ฐ์ฐ ๋์ ๋ณต์ฌ ์ฐ์ฐ์ ์ํํ๋๋ก ํ๋ ํธ๋ ์ดํธ. ๋จ์ํ ๊ฐ์ ๋ณต์ฌํ๋ ๊ฒ์ผ๋ก ๋ณต์ฌ/๋ณต์ ๋์์ ์์ ํ๊ฒ ์ ๊ณตํ ์ ์๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํด์ผ ํ๋ค.Clone: ์์ ํ ๋ณต์ ๋ฅผ ์ ๊ณตํ๋๋ก ํ๋ ํธ๋ ์ด๋.Deref/DerefMut: ์ค๋งํธ ํฌ์ธํฐ๊ฐ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ.๋ก ์ ๊ทผํ๊ธฐ ์ํด์ ์ ๊ณต๋๋ ํธ๋ ์ดํธ.
์ด ์ธ์ for ๋ฌธ์์ ์ฝ๊ฒ ์ฌ์ฉ๋ ์ ์๋๋ก ํ๋
Iterator/IntoIterator ๋ฑ์ trait ๋ฑ๋ ์กด์ฌํ๋ค.3.4. ํ์ด์ง๋ ๋งคํฌ๋ก[ํธ์ง]
Rust์ ๋งคํฌ๋ก๋ ๋ค์์ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
- ๋งค๊ฐ ๋ณ์์ ์ด๋ฆ์ผ๋ก ์ธํด ํ ์คํธ ์ค๋ณต์ด ๋์ง ์๋๋ก ์๋ ์ฒ๋ฆฌ๋๋ค.
- ๋งคํฌ๋ก์ ์ ๋ ฅ๋ ๋งค๊ฐ ๋ณ์์ ํ์ ์ ์ง์ ํ ์ ์๋ค.
- ๋ฉํ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํ๋ค.
C/C++์์์ ๋งคํฌ๋ก๋ ๋จ์ํ ๋ฌธ์์ด ์นํ์ด๋ค. ์๋ฅผ ๋ค์ด
#define MUL5(x) (x * 5)๋ผ๊ณ ํ๋ค๋ฉด MUL5(3)์ (3 * 5)๋ก ์นํ๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ ๋ฌธ๋งฅ์ ๋ฐ๋ผ ์๋ง์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ๋ง๋ค ์ ์๋ค. Rust๋ LISP์ ํ์ด์ง๋ ๋งคํฌ๋ก ๊ฐ๋
์ ์ฌ์ฉํ๋ค. ๋งคํฌ๋ก๋ ๋จ์ํ ํ
์คํธ๊ฐ ์๋๋ฉฐ, ๋จ์ํ ํ
์คํธ ์ค๋ณต์ด ๋ฌธ์ ๊ฐ ์ ๋๋๋ก ์ปดํ์ผ๋ฌ๊ฐ ์์์ ์ ์ฒ๋ฆฌํ๋ค. ๋จ์ํ ๋ฌธ์์ด ์นํ์ด ์๋๋ผ ๋ฌธ๋ฒ์ ์ผ๋ถ์ด๋ฉฐ, ์ ์ฒ๋ฆฌ๊ธฐ๊ฐ ์๋๋ผ ์ปดํ์ผ๋ฌ๊ฐ ์ฒ๋ฆฌํ๋ค.C/C++์ ๋งคํฌ๋ก์์๋
MUL5(3)์์ 3์ด ๊ณฑ์
์ด ๊ฐ๋ฅํ์ง, ์ค์์ธ์ง ์ด๋ฐ ์ฌ๋ถ๋ฅผ ํ๋จํ ์ ์๋ค. Rust์ ๋งคํฌ๋ก ์์คํ
์์๋ MUL5(x)์ ๋ค์ด์จ ์ธ์๊ฐ ๋ณ์์ ์ด๋ฆ์ธ์ง, ๋ฌธ์์ด์ธ์ง, ๋ค์์คํ์ด์ค์ธ์ง, ๋๋ค ํจ์์ธ์ง ๋ฑ์ ์ ์ ์๋ค.๋ํ, Rust์ ๋งคํฌ๋ก๋ ๋ฉํ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ค. ๋ฉํ ํ๋ก๊ทธ๋๋ฐ์ ์ปดํ์ผ ํ์์ ๋ชจ๋ ๊ฒ์ด ๊ฒฐ์ ๋๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๊ฒ์ผ๋ก์จ, ์ ๋ ฅ๋๋ ๋งค๊ฐ ๋ณ์์ ๋ฐ๋ผ ๋ฃ์ ์ฝ๋๋ฅผ ๊ฒฐ์ ํ๊ฑฐ๋ ๋ฏธ๋ฆฌ ๊ณ์ฐํ๋๋ก ํ ์ ์๋ค.
Rust์์ ์ ๋ค๋ฆญ๊ณผ ๋ฉํ ํ๋ก๊ทธ๋๋ฐ์ด ๋ถ๋ฆฌ๋์ด ์ง์๋๋ ๊ฒ์, C++์์๋ ํ ํ๋ฆฟ ๋ฌธ๋ฒ์ด๋ผ๋ ํ๋์ ๋๊ตฌ๋ฅผ ์ด์ฉํด ์ผ๋ฐํ ํ๋ก๊ทธ๋๋ฐ(์ ๋ค๋ฆญ)๊ณผ ๋ฉํ ํ๋ก๊ทธ๋๋ฐ ๋ ๊ฐ์ง๋ฅผ ์ง์ํ๋ ๊ฒ๊ณผ ๋๋น๋๋ ์ ์ด๋ค. ๋ฌผ๋ก , Rust์์ ๋ฉํ ํ๋ก๊ทธ๋๋ฐ์ด ๋งคํฌ๋ก๋ก ๋ถ๋ฆฌ๋์๋ค๊ณ ํด๋, ๋ฉํ ํ๋ก๊ทธ๋๋ฐ ์์ฒด๊ฐ ์ฌ์ ํ ์ด๋ ค์ด ๊ฒ์ ๋ณํจ์ด ์๋ค.
3.5. ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ[ํธ์ง]
https://areweasyncyet.rs/
Rust๋ ์ธ์ด ์ฐจ์์์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๊ณ ์์ผ๋ฉฐ, Python, C#๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ธ์ด์์ ์ฌ์ฉ๋๋ async/await ๊ตฌ์กฐ์ ๋น๋๊ธฐ ๊ตฌ๋ฌธ์ ๋น์ทํ ํํ๋ก ์ฌ์ฉํ ์ ์๋ค.#
๋ค๋ฅธ ์ธ์ด์์ ํํ ์ฌ์ฉ๋๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ ํจํด ์ค Future ๊ฐ๋ ์ ์ฝ๋ฃจํด[12]์ธ ๋ํ์ ์ธ ์์ด๋ค. ์ด๋ฌํ ๊ฐ๋ ์ ๊ตฌํํ
Rust์์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์์ํด๋ณด๊ณ ์ถ๋ค๋ฉด Asynchronous Programming in Rust[13]๋ฅผ ์ฝ์ด๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค. ์์ง ๋ฏธ์์ฑ์ด๊ธฐ๋ ํ์ง๋ง Rust ์ธ์ด์์ ์ฝ๋ฃจํด๊ณผ ์คํ์๋ฅผ ๊ตฌ์ฑํ๋ ๋๋ต์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋๋ฐ ๋์์ด ๋๋ฉฐ, ๋ถ์กฑํ ๋ด์ฉ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ API ๋ช ์ธ(Specification)๋ ์น์ฌ์ดํธ์์ ๊ด๋ จ ๋ด์ฉ์ ์ฐพ์๋ณด๋ฉด์ ๋ณด์ถฉํ ์ ์๋ค.
Rust๋ ์ธ์ด ์ฐจ์์์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๊ณ ์์ผ๋ฉฐ, Python, C#๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ธ์ด์์ ์ฌ์ฉ๋๋ async/await ๊ตฌ์กฐ์ ๋น๋๊ธฐ ๊ตฌ๋ฌธ์ ๋น์ทํ ํํ๋ก ์ฌ์ฉํ ์ ์๋ค.#
๋ค๋ฅธ ์ธ์ด์์ ํํ ์ฌ์ฉ๋๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ ํจํด ์ค Future ๊ฐ๋ ์ ์ฝ๋ฃจํด[12]์ธ ๋ํ์ ์ธ ์์ด๋ค. ์ด๋ฌํ ๊ฐ๋ ์ ๊ตฌํํ
Future# ํธ๋ ์ดํธ์ async/await ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋๋๋ฐ, ๋ค๋ฅธ ์ธ์ด์ ๋ฌ๋ฆฌ ๋น๋๊ธฐ ํจ์๋ฅผ ์คํํ ์คํ์(Executor)๊ฐ ๋ณ๋๋ก ์กด์ฌํ๋ค. ์คํ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌํ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์, tokio์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ง์ ๊ตฌํํด์ผ ํ๋ค.Rust์์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์์ํด๋ณด๊ณ ์ถ๋ค๋ฉด Asynchronous Programming in Rust[13]๋ฅผ ์ฝ์ด๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค. ์์ง ๋ฏธ์์ฑ์ด๊ธฐ๋ ํ์ง๋ง Rust ์ธ์ด์์ ์ฝ๋ฃจํด๊ณผ ์คํ์๋ฅผ ๊ตฌ์ฑํ๋ ๋๋ต์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋๋ฐ ๋์์ด ๋๋ฉฐ, ๋ถ์กฑํ ๋ด์ฉ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ API ๋ช ์ธ(Specification)๋ ์น์ฌ์ดํธ์์ ๊ด๋ จ ๋ด์ฉ์ ์ฐพ์๋ณด๋ฉด์ ๋ณด์ถฉํ ์ ์๋ค.
4. IDE ์ง์ ํํฉ[ํธ์ง]
IntelliJ IDEA์ CLion์ Rust ํ๋ฌ๊ทธ์ธ์ IntelliJ ํ๋ซํผ๋ต๊ฒ ํ์คํ ๋ฆฌ ๊ธฐ๋ฐ ์ฝ๋ ์ปดํ๋ฆฌ์
, ๋ฆฌํฉํ ๋ง, ๋๋ฒ๊น
, Cargo ํจํค์ง ์ถ์ ๋ฑ ์ฌ๋ฌ๊ฐ์ง ํธ์์ฑ์ ์ ๊ณตํ๋ค. ๋น์ฃผ์ผ ์คํ๋์ค ์ฝ๋๋ IDE๋ ์๋์ง๋ง, ๊ณต์์ผ๋ก Rust ์ธ์ด์ฉ ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํ๋ค. ๋ช๋ช ๋ค๋ฅธ ์ธ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก Rust Language Server์ ํต์ ํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ฉฐ, Cargo ํ๋ก์ ํธ ๋ด์ ๋ชจ๋ ๋ฌธ์ ๋ ์ค๋ฅ๋ฅผ ๋ฐ๋ก ์ฝ๊ฒ ํ์ธํ ์ ์๋ค. ์ฌ์ฉ์ ์๊ฐ ์ ์ rust-analyzer ํ๋ฌ๊ทธ์ธ๋ ์๋๋ฐ ์๊ฐ์ ์ผ๋ก ํ์
ํํธ๋ฅผ ํ์ํ๋ ๋ฑ ๊ณต์ ํ๋ฌ๊ทธ์ธ๋ณด๋ค ๋ ํธ๋ฆฌํ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๋ค. Atom๋ Rust๋ฅผ ํ๋ฌ๊ทธ์ธ ํํ๋ก ์ง์ํ๊ณ ์๋ค.
5. ์ฃผ๋ชฉ๋ฐ๊ณ ์๋ ์ธ์ด[ํธ์ง]
5.1. ๊ฐ๋ฐ์๋ค์ด ๊ฐ์ฅ ์ข์ํ๋ ์ธ์ด[ํธ์ง]
5.2. ๋ง์ดํฌ๋ก์ํํธ๋ ์ฃผ๋ชฉํ๊ณ ์๋ ์ธ์ด[ํธ์ง]
๋น์ฃผ์ผ ์คํ๋์ค๋ฅผ ๊ฐ๋ฐํ ๋ง์ดํฌ๋ก์ํํธ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ด ์ข๊ณ , C ๋ฐ C++๋ฅผ ๋์ฒดํ ์ ์๋ ์์คํ
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ผ๊ณ ๋ฐํ๋ค. ์ฌ์ง์ด Rust์ ์ฃผ๋ชฉ์ฑ์ ํ์ด ๋ฌ๋์ง Rust ๊ฐ์ ์ธ์ด๋ฅผ ์์ฒด์ ์ผ๋ก ๋ง๋ค๊ฒ ๋ค๋ ์์์ด ๋์์ ์ ๋.
6. ์ฌ์ฉ ํํฉ ๋ฐ ์ ๋ง[ํธ์ง]
์ค๋ฒํค๋ ์๋ ์์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ ์์ ์์คํ
ํ๋ก๊ทธ๋๋จธ๋ค์ด ์ฃผ๋ก ์ ํธํ๋ ํธ์ด๋ค. ๋ชจ์ง๋ผ ์ฌ๋จ์์ ๊ฐ๋ฐํ ๋งํผ, ํ์ด์ดํญ์ค์์๋ ์๋น ๋ถ๋ถ์ Rust๋ก ๋์ฒด ํ์๊ณ , ๊ตฌ๊ธ์ ์ฐจ๊ธฐ ์ด์์ฒด์ ์ธ ํจ์์์์ Rust๋ฅผ ์ฌ์ฉ์ค์ด๋ฉฐ, ํ์ด์ค๋ถ๋ ๋ด๋ถ ์์คํ
์ผ๋ถ์ Rust๋ฅผ ์ ์ฉํ ์ํ๋ผ๊ณ ํ๋ค. ๋ ๋ง์์๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ๋ด๋นํ Rust ์์ง๋์ด๋ฅผ ๊ตฌ์ธํ ๋ฐ ์๋ค. # ์ด ์ธ์ด๋ก Redox๋ ์ด์์ฒด์ ๋ ๊ฐ๋ฐ๋๊ณ ์๋ค. ๋ํ ํ์ด์ค๋ถ์ ์ํธํํ ๋ฆฌ๋ธ๋ผ์์๋ ์ฌ์ฉ๋๊ณ ์๋ค. npm๊ณผ Cloudflare๋ ๊ธฐ๋ฐ ์ธ์ด๋ฅผ C์์ Rust๋ก ๊ต์ฒดํ๋ค. 2020๋
๊ธฐ์ค Discord๊ฐ ์๋ฒ์ ํด๋ผ์ด์ธํธ๋จ ์ธ์ด๋ฅผ Golang์์ Rust๋ก ๊ต์ฒดํ์๋ค. ์ฐจ์ธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ธ Deno๋ ์์คํ
๋ฐ์ธ๋ฉ์ Rust๋ก ์์ฑํ์๋ค.
๊ทธ๋ฌ๋ ์ ์ฒด์ ์ผ๋ก ๋ณด๋ฉด ์ฌ์ ํ Rust์ ์ฌ์ฉ๋ฅ ์ ๋ฏธ์งํ ํธ์ด๋ค. TIOBE ์์์์๋ ์์๊ฐ ๋จ์ด์ง๋๋ฐ, ์ด๋ ์ํํธ์จ์ด ์ธํ๋ผ๊ฐ ๊ธฐ์กด ์ธ์ด๋ก ๋๋ถ๋ถ ๊ฐ์ถ์ด์ ธ ์๊ณ , ์ ๋ฌธ ์ธ๋ ฅ์ ๊ตฌํ๊ธฐ ์ฝ์ง๋ ์์ผ๋ฉฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ง์์ด ์ ๊ธฐ ๋๋ฌธ์ผ๋ก ๋ณด์ธ๋ค.# ์์๋ 5๋ ๋์ ๊พธ์คํ ์์นํ๊ณ ์ต๊ทผ Scala์ Kotlin์ ์ ์น๊ณ ์ฌ๋ผ๊ฐ๊ณ ์์ง๋ง, ์ฌ์ ํ ๋๋ถ๋ถ์ ๊ธฐ์ ์ ์์คํ ํ๋ก๊ทธ๋๋ฐ์ ๊ฑฐ์ C/C++๋ง์ ์ฌ์ฉํ๊ณ ์๋ค.
๋ค๋ง, 2019๋ ์คํ ์ค๋ฒํ๋ก์ฐ ๊ฐ๋ฐ์ ์ค๋ฌธ์กฐ์ฌ์์ ๋ฌด๋ ค ํ์ด์ฌ๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ ์น๊ณ 83.5%์ ๋์ ์ ํธ๋๋ก "๊ฐ๋ฐ์๋ค์๊ฒ ๊ฐ์ฅ ์ฌ๋๋ฐ๋ ์ธ์ด" 1์๋ฅผ ์ฐจ์งํ๋ค๋ ์ ์ด๋ ๊ตฌ๊ธ ํธ๋ ๋๋ ๊ฐ์ข ๋ญํน ์ฌ์ดํธ์์์ ์์น๊ฐ ์ฅ๊ธฐ์ ์ผ๋ก๋ ์ฆ๊ฐํ๊ณ ์๋ค๋ ๊ฒ์ ๊ณ ๋ คํ๋ฉด Rust์ ๋ฏธ๋๊ฐ ์ด๋ก์ง ์๋ค.
"Rust๋ ์์ ๊ถ๊ณผ ์๋ช ์ ์ง์ ์ง์ ํด์ค์ผํด ๋ถํธํ๊ณ ๋ฌธ๋ฒ์ด ์ด๋ ต๊ณ ๊ธฐ๋ฅ์ด ๋ง์ ๋ฐฐ์ฐ๊ธฐ ํ๋ค๋ค"๋ ์ฃผ์ฅ์ด ์์ผ๋, "Rust์ ์ฃผ ํ๊ฒ์ด ๋๋ ์ ์ ๋ค์ Rust๋ณด๋ค ํจ์ฌ ๋ ์ด๋ ต๊ณ ๋ถํธํ C/C++๋ฅผ ์ฐ๊ณ ์๊ธฐ์ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค"๋ ๋ฐ๋ก ๋ ์๋ค. ํ์ด์ค๋ถ์ด ๊ณต๊ฐํ ์๋ฃ์ ๋ฐ๋ฅด๋ฉด ์์ฌ ์์ง๋์ด๊ฐ Rust๋ฅผ ๋ฅ์ํ๊ฒ ์ตํ๋๋ฐ ๋๋ฌ์ด๋ฉด ์ถฉ๋ถํ๋ค๊ณ ํ๋ค.
C++ ์ฌ์ฉ์๋ค์ ๊ฐ์ฅ ํฐ ๋ถ๋ง์ ๋์ด๋๊ฐ ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ์ ๊ด๋ จํ ์ค์๋ฅผ ํ๊ธฐ ๋งค์ฐ ์ฝ๋ค๋ ๊ฒ์ด๋ค. Rust์ ์ค๊ณ ๋ชฉํ๊ฐ ๋น๊ต์ ์์ ํ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ ๋งํผ, Rust์์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ์ํด ๋ฌธ๋ฒ์ ๊ฐ์ ํจ์ผ๋ก์จ ๋ฐ์ํ๋ ๋ถํธํจ๊ณผ C++์์ ๋ฉ๋ชจ๋ฆฌ ๋ฒ๊ทธ๋ฅผ ์ฝ๋ ๋ฆฌ๋ทฐ์ ๋๋ฒ๊ฑฐ๋ก ์ผ์ผ์ด ์ฐพ์๋ด๋ ์๊ณ ๋ ๋น๊ต๊ฐ ์๋๋ค. ๊ตฌ๊ธ๊ณผ ๋ง์ดํฌ๋ก์ํํธ์์๋ Rust๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์์ฌ ์ ํ์ ๋ณด์ ๋ฒ๊ทธ ํจ์น ๋น์ฉ์ 70%๋ฅผ ์ ๊ฐํ ์ ์์ ๊ฒ์ด๋ผ๋ ๋ด์ฉ์ ๋ฌธ์๋ ๊ณต๊ฐํ์๋ค. ๊ตฌ๊ธ/๋ง์ดํฌ๋ก์ํํธ/์ธํ ์ ์ด๋ฏธ Rust์ ๊ฐ๋ฐ์ ๊น์ํ ๊ด์ฌํ๊ณ ์์ผ๋ฉฐ, ๊ฐ์ข ์ปจํผ๋ฐ์ค์์ ๊ณต๊ฐ์ ์ผ๋ก ์ด๋ฅผ ์ธ๊ธํ๊ณ ์๋ค.
Rust๋ ๋ชจ์ง๋ผ ์ฌ๋จ์ ํตํ์ฌ ๊ฐ๋ฐ์ด ์์๋๋งํผ ๋ชจ์ง๋ผ์ ์๋นํ ์ฐ๊ด์ด ์๋๋ฐ, 2020๋ 8์ ๊ธฐ๋ถ๊ธ์ผ๋ก ์์ง์ด๋ ๋ชจ์ง๋ผ ์ฌ๋จ์ด ์ฝ๋ก๋๋ก ์ธํด ์๊ธ ์ตํต์ด ์ด๋ ต๋ค๋ ์ด์ ๋ก 250๋ช ์ ๊ฐ์ถํ์ผ๋ฉฐ, ์ด๋ก ์ธํด Rust๊ฐ๋ฐํ์ด ์๋นํ ํผํด๋ฅผ ์ ์์ ๊ฑฐ๋ผ๋ ์ถ์ธก์ด ๋์๋ค. # ๊ทธ๋ฌ๋ ์ผ๊ฐ์์๋ Rust๊ฐ ์ด๋ฏธ ๋ชจ์ง๋ผ์ฌ๋จ ์์์ ๊ธฐ์ฌ๋ณด๋ค ์ธ๋ถ์ ๊ธฐ์ฌ๊ฐ ๋ง์์ง ์ํฉ์ด๋ผ, ํฐ ์ํฅ์ ์์ ๊ฒ์ผ๋ก ๋ณด๊ธฐ๋ ํ๋ค.
2020๋ 9์ TIOBE์์ 18์๋ฅผ ๋ฌ์ฑํ๋ค.
2020๋ 11์ ์๋ง์กด(AWS ํด๋ผ์ฐ๋ ํ)์ด Rust ์ปดํ์ผ๋ฌ์ ๊ณต๋ ๋ฆฌ๋๋ฅผ ๋งก์๋ ํ ๋ฆญ์ค ํด๋ก(Felix Klock)์ ๊ฐ๋ฐ์๋ก ์์ ํ๋ค. ์์ ์ ์ด๋ Matt Asay๋ ํธ์ํฐ๋ฅผ ํตํด AWS์์๋ Rust๊ฐ ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ, ์์ ์ฑ๊ณผ ํผํฌ๋จผ์ค์ ์๋นํ ๊ธฐ์ฌ๋ฅผ ํ๊ณ ์๋ค๊ณ ๋ฐํ๊ธฐ๋ ํ๋ค. Matt Asay ํธ์ํฐ ๋ํ AWS๋ 2019๋ ์ Rust์ ์คํฐ์๊ฐ ๋์์ผ๋ฉฐ, ์ด์ธ์๋ Rust ๊ฐ๋ฐ์๋ฅผ ์ ๊ทน์ ์ผ๋ก ๊ตฌ์ธํ๋ ์ค์ด๋ผ๊ณ ๋ฐํ๊ธฐ๋ ํ๋ค.๊ด๋ จ ๊ธฐ์ฌ ํ ํธ์ผ๋ก๋ ์ด๋ฅผ ๋ชจ์ง๋ผ์ฌ๋จ์ ๊ฐ์ถ์ผ๋ก ์ธํ ํจ๊ณผ๋ผ๊ณ ๋ณด๋ ์์ ๋ ์๋ค.
๊ทธ๋ฌ๋ ์ ์ฒด์ ์ผ๋ก ๋ณด๋ฉด ์ฌ์ ํ Rust์ ์ฌ์ฉ๋ฅ ์ ๋ฏธ์งํ ํธ์ด๋ค. TIOBE ์์์์๋ ์์๊ฐ ๋จ์ด์ง๋๋ฐ, ์ด๋ ์ํํธ์จ์ด ์ธํ๋ผ๊ฐ ๊ธฐ์กด ์ธ์ด๋ก ๋๋ถ๋ถ ๊ฐ์ถ์ด์ ธ ์๊ณ , ์ ๋ฌธ ์ธ๋ ฅ์ ๊ตฌํ๊ธฐ ์ฝ์ง๋ ์์ผ๋ฉฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ง์์ด ์ ๊ธฐ ๋๋ฌธ์ผ๋ก ๋ณด์ธ๋ค.# ์์๋ 5๋ ๋์ ๊พธ์คํ ์์นํ๊ณ ์ต๊ทผ Scala์ Kotlin์ ์ ์น๊ณ ์ฌ๋ผ๊ฐ๊ณ ์์ง๋ง, ์ฌ์ ํ ๋๋ถ๋ถ์ ๊ธฐ์ ์ ์์คํ ํ๋ก๊ทธ๋๋ฐ์ ๊ฑฐ์ C/C++๋ง์ ์ฌ์ฉํ๊ณ ์๋ค.
๋ค๋ง, 2019๋ ์คํ ์ค๋ฒํ๋ก์ฐ ๊ฐ๋ฐ์ ์ค๋ฌธ์กฐ์ฌ์์ ๋ฌด๋ ค ํ์ด์ฌ๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ ์น๊ณ 83.5%์ ๋์ ์ ํธ๋๋ก "๊ฐ๋ฐ์๋ค์๊ฒ ๊ฐ์ฅ ์ฌ๋๋ฐ๋ ์ธ์ด" 1์๋ฅผ ์ฐจ์งํ๋ค๋ ์ ์ด๋ ๊ตฌ๊ธ ํธ๋ ๋๋ ๊ฐ์ข ๋ญํน ์ฌ์ดํธ์์์ ์์น๊ฐ ์ฅ๊ธฐ์ ์ผ๋ก๋ ์ฆ๊ฐํ๊ณ ์๋ค๋ ๊ฒ์ ๊ณ ๋ คํ๋ฉด Rust์ ๋ฏธ๋๊ฐ ์ด๋ก์ง ์๋ค.
"Rust๋ ์์ ๊ถ๊ณผ ์๋ช ์ ์ง์ ์ง์ ํด์ค์ผํด ๋ถํธํ๊ณ ๋ฌธ๋ฒ์ด ์ด๋ ต๊ณ ๊ธฐ๋ฅ์ด ๋ง์ ๋ฐฐ์ฐ๊ธฐ ํ๋ค๋ค"๋ ์ฃผ์ฅ์ด ์์ผ๋, "Rust์ ์ฃผ ํ๊ฒ์ด ๋๋ ์ ์ ๋ค์ Rust๋ณด๋ค ํจ์ฌ ๋ ์ด๋ ต๊ณ ๋ถํธํ C/C++๋ฅผ ์ฐ๊ณ ์๊ธฐ์ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค"๋ ๋ฐ๋ก ๋ ์๋ค. ํ์ด์ค๋ถ์ด ๊ณต๊ฐํ ์๋ฃ์ ๋ฐ๋ฅด๋ฉด ์์ฌ ์์ง๋์ด๊ฐ Rust๋ฅผ ๋ฅ์ํ๊ฒ ์ตํ๋๋ฐ ๋๋ฌ์ด๋ฉด ์ถฉ๋ถํ๋ค๊ณ ํ๋ค.
C++ ์ฌ์ฉ์๋ค์ ๊ฐ์ฅ ํฐ ๋ถ๋ง์ ๋์ด๋๊ฐ ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ์ ๊ด๋ จํ ์ค์๋ฅผ ํ๊ธฐ ๋งค์ฐ ์ฝ๋ค๋ ๊ฒ์ด๋ค. Rust์ ์ค๊ณ ๋ชฉํ๊ฐ ๋น๊ต์ ์์ ํ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ ๋งํผ, Rust์์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ์ํด ๋ฌธ๋ฒ์ ๊ฐ์ ํจ์ผ๋ก์จ ๋ฐ์ํ๋ ๋ถํธํจ๊ณผ C++์์ ๋ฉ๋ชจ๋ฆฌ ๋ฒ๊ทธ๋ฅผ ์ฝ๋ ๋ฆฌ๋ทฐ์ ๋๋ฒ๊ฑฐ๋ก ์ผ์ผ์ด ์ฐพ์๋ด๋ ์๊ณ ๋ ๋น๊ต๊ฐ ์๋๋ค. ๊ตฌ๊ธ๊ณผ ๋ง์ดํฌ๋ก์ํํธ์์๋ Rust๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์์ฌ ์ ํ์ ๋ณด์ ๋ฒ๊ทธ ํจ์น ๋น์ฉ์ 70%๋ฅผ ์ ๊ฐํ ์ ์์ ๊ฒ์ด๋ผ๋ ๋ด์ฉ์ ๋ฌธ์๋ ๊ณต๊ฐํ์๋ค. ๊ตฌ๊ธ/๋ง์ดํฌ๋ก์ํํธ/์ธํ ์ ์ด๋ฏธ Rust์ ๊ฐ๋ฐ์ ๊น์ํ ๊ด์ฌํ๊ณ ์์ผ๋ฉฐ, ๊ฐ์ข ์ปจํผ๋ฐ์ค์์ ๊ณต๊ฐ์ ์ผ๋ก ์ด๋ฅผ ์ธ๊ธํ๊ณ ์๋ค.
Rust๋ ๋ชจ์ง๋ผ ์ฌ๋จ์ ํตํ์ฌ ๊ฐ๋ฐ์ด ์์๋๋งํผ ๋ชจ์ง๋ผ์ ์๋นํ ์ฐ๊ด์ด ์๋๋ฐ, 2020๋ 8์ ๊ธฐ๋ถ๊ธ์ผ๋ก ์์ง์ด๋ ๋ชจ์ง๋ผ ์ฌ๋จ์ด ์ฝ๋ก๋๋ก ์ธํด ์๊ธ ์ตํต์ด ์ด๋ ต๋ค๋ ์ด์ ๋ก 250๋ช ์ ๊ฐ์ถํ์ผ๋ฉฐ, ์ด๋ก ์ธํด Rust๊ฐ๋ฐํ์ด ์๋นํ ํผํด๋ฅผ ์ ์์ ๊ฑฐ๋ผ๋ ์ถ์ธก์ด ๋์๋ค. # ๊ทธ๋ฌ๋ ์ผ๊ฐ์์๋ Rust๊ฐ ์ด๋ฏธ ๋ชจ์ง๋ผ์ฌ๋จ ์์์ ๊ธฐ์ฌ๋ณด๋ค ์ธ๋ถ์ ๊ธฐ์ฌ๊ฐ ๋ง์์ง ์ํฉ์ด๋ผ, ํฐ ์ํฅ์ ์์ ๊ฒ์ผ๋ก ๋ณด๊ธฐ๋ ํ๋ค.
2020๋ 9์ TIOBE์์ 18์๋ฅผ ๋ฌ์ฑํ๋ค.
2020๋ 11์ ์๋ง์กด(AWS ํด๋ผ์ฐ๋ ํ)์ด Rust ์ปดํ์ผ๋ฌ์ ๊ณต๋ ๋ฆฌ๋๋ฅผ ๋งก์๋ ํ ๋ฆญ์ค ํด๋ก(Felix Klock)์ ๊ฐ๋ฐ์๋ก ์์ ํ๋ค. ์์ ์ ์ด๋ Matt Asay๋ ํธ์ํฐ๋ฅผ ํตํด AWS์์๋ Rust๊ฐ ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ, ์์ ์ฑ๊ณผ ํผํฌ๋จผ์ค์ ์๋นํ ๊ธฐ์ฌ๋ฅผ ํ๊ณ ์๋ค๊ณ ๋ฐํ๊ธฐ๋ ํ๋ค. Matt Asay ํธ์ํฐ ๋ํ AWS๋ 2019๋ ์ Rust์ ์คํฐ์๊ฐ ๋์์ผ๋ฉฐ, ์ด์ธ์๋ Rust ๊ฐ๋ฐ์๋ฅผ ์ ๊ทน์ ์ผ๋ก ๊ตฌ์ธํ๋ ์ค์ด๋ผ๊ณ ๋ฐํ๊ธฐ๋ ํ๋ค.๊ด๋ จ ๊ธฐ์ฌ ํ ํธ์ผ๋ก๋ ์ด๋ฅผ ๋ชจ์ง๋ผ์ฌ๋จ์ ๊ฐ์ถ์ผ๋ก ์ธํ ํจ๊ณผ๋ผ๊ณ ๋ณด๋ ์์ ๋ ์๋ค.
7. ๋์[ํธ์ง]
์ด ์ฑ
์ Rust ํํ์ด์ง์ ์๋ the book์ ๊ทธ๋๋ก ์ฑ
์ผ๋ก ์ฎ๊ฒจ ์ค์ ๊ฒ์ด๋ค. ์ค๋ฅธ์ชฝ์ ํ๊ตญ์ด๋ก ๋ฒ์ญ๋ ๋ฒ์ญ์.
8. ๊ด๋ จ ๋งํฌ[ํธ์ง]
- Cargo - Rust์ ์ปค๋ฎค๋ํฐ crates ์ ์ฅ์
- Reddit - ๋ค๋ง ์ฐธ๊ณ ํ๊ธฐ ์ , ๋ ๋ง์์์ ๋๋ฅผ ๋์ ํ์๋ค๊ณผ ๊ณผ์ฅ๋ ๋ฐ์ธ๋ค๋ก ์ธํด Rust ๊ธฐ๋ฐ ์น ํ๋ ์์ํฌ์๋ Actix์ ๊ฐ๋ฐ์ด ์ค๋จ๋๊ณ ํ์ฌ๋ ์ ์ง ๋ฐ ๋ณด์๋ง ์ด๋ฃจ์ด์ง๊ณ ์์์ ์ ์ํ์.
- Awesome Rust - Rust๋ก ๊ตฌํ๋ ๊ฐ์ข ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ์
- This Week in Rust - Rust ์ฃผ๊ฐ ๋ด์ค๋ ํฐ
[1] ์ฒซ ๋ฐํ ๊ธฐ์ค์ผ๋ก, 1.0 ์ ์ํ ๊ธฐ์ค์ผ๋ก๋ Rust๊ฐ 3๋
๋ฆ๊ฒ ๋์๋ค.
[2] ์ ์ฌ๋จ์ด์ธ Crustacean (๊ฐ๊ฐ๋ฅ)๋ฅผ ์ฐ์ํ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
[3] ๊ทธ๋ ์ด๋ ํธ์ด๋ ์ด ๋ค๋ก๋ ํ๋์ ์์ ๊ฐ๋ฐ์๋ก ๊ฐ๋ฐ์ ์ฐธ์ฌํ๊ณ ์๋ค๊ฐ, ํ์ฌ๋ ์์ ๊ฐ๋ฐ์ ์ง์๋ฅผ ๋ด๋ ค๋์ ์ํ์ด๋ค.
[4] ๊ธฐ์กด์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋น๊ตํด์ ์๋นํ ์ฐจ์ด๊ฐ ์๋ค. Rust๋ ์์์ ์ง์ํ์ง ์์ผ๋ฉฐ, ์ธํฐํ์ด์ค ์ญํ ์ ํ๋ ํธ๋ ์ดํธ๋ฅผ ํ๋์ ๊ฐ์ฒด์ ์ฌ๋ฌ ๊ฐ ํฉ์ฑ ํ ์ ์๋ค. ํธ๋ ์ดํธ๋ ๋ง ๊ทธ๋๋ก ๊ฐ์ฒด์ ํน์ฑ์ ๋ํ๋ด๊ธฐ๋ ํ๋ค. ์๋ฅผ ๋ค์๋ฉด
Clone ํธ๋ ์ดํธ๋ ๊ฐ์ฒด๊ฐ ๋ณต์ ๋ ์ ์์์ ๋ํ๋ด๋ ๋์์ ๋ณต์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.[5] 1.32 ์ด์ ์๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์์ธ jemalloc์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์๋๋ ์ข ๋ ๋น ๋ฅด์ง๋ง OS ์
์ฅ์์๋ ํญ์ ์ฌ์ฉํ๋ ๋งํผ๋ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๋ ๊ฒ์ ์๋์๋ค. ์ํ๋ ๊ฒฝ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ๊ฑฐ๋ ์ง์ ๊ตฌํํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์๋ฅผ ๋ฐ๊ฟ ์ ์๋ค.
[6] ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ผ๊ณ ์ดํดํด๋ ๋ฌด๋ฆฌ๋ ์๋ค.
[7] ๊ฐ์ด ์ด๋ํ ๋ ์๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณต์ฌํ ์ง, ๊ทธ๋ฅ ์ฃผ์ด์ง ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ทธ๋๋ก ์ธ์ง ๊ฒฐ์ ํ๋ ๊ฒ์ Rust ์ปดํ์ผ๋ฌ์ ๋ชซ์ผ๋ก, ์ต์ ํํ๊ธฐ์ ๋ฐ๋ผ์๋ ํจ์๋ก ์ธ์๋ฅผ ๋๊ธฐ๊ณ ๋ฆฌํด๋ฐ๋ ๋์ ๋จ ํ ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ๋ ์ผ์ด๋์ง ์์ ์๋ ์๋ค. C++๋ฅผ ์์ฃผ ์ ์๊ณ ์๋ค๋ฉด, RVO๋ผ๋ ์ฝ์ด๊ฐ ์ต์ํ ๊ฒ์ด๋ค.
[8] Borrowed reference๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค
[9] ๊ทธ๋ฌ๋ Rust ์ปดํ์ผ๋ฌ์์ ์๋ช
๊ณผ ๊ด๋ จํ ์ค๋ฅ๋ฅผ ํ์ธํ๋ ๋ฐฉ์์ "์ฑ
์ ๋น๋ฆฐ ์ฌ๋์ด ์์ผ๋ฉด ๊ทธ ์ ์๋ ๋์๊ด ๋ฌธ์ ๋ซ์ง ๋ง์์ค" ๊ฐ ๋๋ค.
[10] ์๋ฏธ๋ถ๋ช
. ๋ณด๋ค ๋ช
ํํ ์์ ํน์ ์ฐธ๊ณ ๋ฌธ์๊ฐ ํ์
[12] ์ฝ๋ฃจํด์ ์๋ธ ๋ฃจํด์ ์ผ์ ์ ์งํ๊ณ ์ฌ๊ฐํ ์ ์๋ ๊ตฌ์ฑ ์์๋ฅผ ๋งํ๋ค. ์ฝ๊ฒ ๋งํด ํ์์ ๋ฐ๋ผ ์ผ์ ์ ์งํ ์ ์๋ ํจ์๋ฅผ ๋งํ๋ฉฐ, ์ด๋ฅผ ํ์ฉํ์ฌ I/O ์ฒ๋ฆฌ๋ฅผ ๊ทน๋ํํ ์ ์๋ค. ์ด๋ ๋จ์ํ ๋๊ธฐํด์ผ ํ๋ ์์
์ด ์ฒ๋ฆฌ๋๊ธฐ ์ ์ ๋ค๋ฅธ ์์
์ ๋จผ์ ์ฒ๋ฆฌํ๋๋ก ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์๋ ๊ณต์ ์์์ ์ ๊ทผ์ด ํ์ํ ๋ ๋ฎคํ
์ค์ ๋ฝ์ ์ป์ง ๋ชปํ๋ ๊ฒฝ์ฐ, ๋ค๋ฅธ ์์
์ ๋จผ์ ์ฒ๋ฆฌํ๋๋ก ํ์ฌ ์ปดํจํ
์์์ ์ฌ์ฉ์ ๊ทน๋ํํ ์ ์๋ค.