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