์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
fn main() {
println!("hello world");
}

๋Ÿฌ์ŠคํŠธ
Rust
๊ฐœ๋ฐœ
๋ฒ„์ „
1.50.0
2021๋…„ 2์›” 11์ผ ์—…๋ฐ์ดํŠธ
์›น์‚ฌ์ดํŠธ

1. ๊ฐœ์š”2. ์—ญ์‚ฌ3. ํŠน์ง•
3.1. ์•ˆ์ „ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
3.1.1. ์†Œ์œ ๊ถŒ๊ณผ ์ˆ˜๋ช…3.1.2. ๋ณ€๊ฒฝ์„ฑ
3.2. ์ œ๋„ค๋ฆญ3.3. ํŠธ๋ ˆ์ดํŠธ
3.3.1. ํŠน์ˆ˜ํ•œ ํŠธ๋ ˆ์ดํŠธ
3.4. ํ•˜์ด์ง€๋‹‰ ๋งคํฌ๋กœ3.5. ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
4. IDE ์ง€์› ํ˜„ํ™ฉ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]์™€ ์—ฐ๊ด€๋œ ์ด๋ฏธ์ง€๊ฐ€ ๋งŽ์ด ๋‚˜์˜จ๋‹ค. ๊ฐ€์ด๋“œ๋ถ ํ‘œ์ง€์—๋„ ๊ฒŒ๊ฐ€ ๋‚˜์˜จ๋‹ค.

2. ์—ญ์‚ฌ[ํŽธ์ง‘]

์ž์„ธํ•œ ๋‚ด์šฉ์€ Github์˜ rust-lang/rust ๋ฆด๋ฆฌ์Šค ์ฐธ์กฐ.
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 ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณต๋˜๋Š” 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)์„ ๊ฐ€์ง€๋ฉฐ, ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋ฉด ๊ทธ ์ด๋ฆ„์œผ๋กœ ์†Œ์œ ๊ถŒ์ด ์ด์ „๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋‹ฌ๋ฆฌ, 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)๋Š” ์ผ์ข…์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ, ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๋Š” ๋ฉ”์„œ๋“œ์˜ ๋ชฉ๋ก์„ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ •ํ™•ํ•˜์ง€ ์•Š์ง€๋งŒ ์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด, ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋Š” ์—ฌ๋Ÿฌ (๋ฒ”์šฉ) ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ํŠธ๋ ˆ์ดํŠธ๋Š” ๊ฐ์ฒด์™€ ๋‹ฌ๋ฆฌ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†์œผ๋ฉฐ ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  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]์ธ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐœ๋…์„ ๊ตฌํ˜„ํ•œ 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. ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์–ธ์–ด[ํŽธ์ง‘]

2015๋…„๋ถ€ํ„ฐ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์„ค๋ฌธ์กฐ์‚ฌ์—์„œ ๋งค๋…„ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์–ธ์–ด ์ค‘์— ํ•˜๋‚˜๋กœ ์„ ์ •๋˜๊ณ  ์žˆ๋‹ค. 2015๋…„์—๋Š” 3์œ„์— ์ง„์ž…ํ–ˆ๋‹ค๊ฐ€, 2016๋…„๋ถ€ํ„ฐ ๋งค๋…„ ์—ฐ์† 1์œ„๋ฅผ ๋‹ฌ์„ฑํ–ˆ๋‹ค. (2017๋…„, 2018๋…„, 2019๋…„, 2020๋…„ ์„ค๋ฌธ์กฐ์‚ฌ ๊ฒฐ๊ณผ)

5.2. ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๋„ ์ฃผ๋ชฉํ•˜๊ณ  ์žˆ๋Š” ์–ธ์–ด[ํŽธ์ง‘]

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 ๊ฐœ๋ฐœ์ž๋ฅผ ์ ๊ทน์ ์œผ๋กœ ๊ตฌ์ธํ•˜๋Š” ์ค‘์ด๋ผ๊ณ  ๋ฐํžˆ๊ธฐ๋„ ํ–ˆ๋‹ค.๊ด€๋ จ ๊ธฐ์‚ฌ ํ•œ ํŽธ์œผ๋กœ๋Š” ์ด๋ฅผ ๋ชจ์งˆ๋ผ์žฌ๋‹จ์˜ ๊ฐ์ถ•์œผ๋กœ ์ธํ•œ ํšจ๊ณผ๋ผ๊ณ  ๋ณด๋Š” ์‹œ์„ ๋„ ์žˆ๋‹ค.

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] ์˜๋ฏธ๋ถˆ๋ช…. ๋ณด๋‹ค ๋ช…ํ™•ํ•œ ์„œ์ˆ  ํ˜น์€ ์ฐธ๊ณ ๋ฌธ์„œ๊ฐ€ ํ•„์š”
[11] C++20์˜ Concepts ๊ธฐ๋Šฅ๊ณผ ์œ ์‚ฌํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.
[12] ์ฝ”๋ฃจํ‹ด์€ ์„œ๋ธŒ ๋ฃจํ‹ด์„ ์ผ์‹œ ์ •์ง€ํ•˜๊ณ  ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋งํ•œ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด ํ•„์š”์— ๋”ฐ๋ผ ์ผ์‹œ ์ •์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•˜๋ฉฐ, ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ I/O ์ฒ˜๋ฆฌ๋ฅผ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋‹จ์ˆœํžˆ ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์ด ์ฒ˜๋ฆฌ๋˜๊ธฐ ์ „์— ๋‹ค๋ฅธ ์ž‘์—…์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋„ ๊ณต์œ  ์ž์›์˜ ์ ‘๊ทผ์ด ํ•„์š”ํ•  ๋•Œ ๋ฎคํ…์Šค์˜ ๋ฝ์„ ์–ป์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ, ๋‹ค๋ฅธ ์ž‘์—…์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜์—ฌ ์ปดํ“จํŒ… ์ž์›์˜ ์‚ฌ์šฉ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.