Rust <-> .NET

https://ericsink.com/entries/dotnet_rust.html

Rust์™€ .NET์˜ ์šฉ์–ด๋ฅผ ์„œ๋กœ ๋น„๊ตํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.
.NET์— Nuget์ด ์žˆ๋‹ค๋ฉด Rust์—๋Š” Crate๊ฐ€ ์žˆ๋‹ค๋Š” ์  ๋“ฑ๋“ฑ ์šฉ์–ด์  ์œ ์‚ฌ์ ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

4๊ฐœ์˜ ์ข‹์•„์š”

๊ตฟ! C# ๊ฐœ๋ฐœ์ž๊ฐ€ Rust์— ์ ‘๊ทผํ•˜๋Š”๋ฐ ์œ ์šฉํ•˜๋ฃจ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

1๊ฐœ์˜ ์ข‹์•„์š”

.NET๊ณผ ๋‹ค๋ฅธ์ 

  1. Rust๋Š” ์Šค์ฝ”ํ”„๋ฅผ ํ†ตํ•ด ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์–ด๋–ค ์‹์— ๋Œ€ํ•˜์—ฌ return ์„ ํ‘œํ˜„ํ•  ๋•Œ๋Š” return ํ‚ค์›Œ๋“œ์™€ ์„ธ๋ฏธ์ฝœ๋ก  ์—†์ด ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

if ๋ฌธ์—์„œ๋„ if (a == b) { } ์ด๊ฒŒ ๋˜์ง€๋งŒ(๋ฌผ๋ก  ์ฃผ์˜ํ•˜๋ผ๊ณ  ์ปดํŒŒ์ผ ์‹œ ์•Œ๋ ค์ค€๋‹ค.), if a == b { } ์—ญ์‹œ ๊ฐ€๋Šฅํ–ˆ์œผ๋ฉฐ, Github ๊ต์œก์ž๋ฃŒ์— ์žˆ๋Š” ๋Œ€๋กœ

let y = {
    let x = 3;
    x + 1
}
fn five() -> i32 {
    5
}

์œผ๋กœ ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ํ‘œํ˜„๋˜์ง€ ์•Š์€ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ค„์˜ ํ‘œํ˜„์‹๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฐ˜ํ™˜ํ˜•์ด ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€.

  1. ๋ฉ”์„œ๋“œ๋Š” Snake ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ๋ฌธ์ž ๋ฐ ์–ธ๋”๋ผ์ธ์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค. (C#์€ ํ”„๋กœํผํ‹ฐ ๋ฐ ๋ฉ”์„œ๋“œ๋Š” ํŒŒ์Šค์นผ ๊ธฐ๋ฒ•)
  2. ์Šค์ฝ”ํ”„๋ฅผ ์žก์„ ๋•Œ C#์€
if (true)
{
}

๋ฐ˜๋ฉด,

if true {
}

์ด๋Ÿฐ ์‹์œผ๋กœ ์ž๋ฐ”๊ธฐ๋ณธ์Šคํƒ€์ผ์ฒ˜๋Ÿผ ์žก๋Š”๋‹ค.

  1. Rust์—์„œ๋Š” GC๊ฐ€ ์—†์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œ๋ฅผ ํ•ด์•ผํ•˜๋Š”๋ฐ, ์ด๋•Œ ์ด์ค‘ ํ•ด์ œ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฒ„๊ทธ๊ฐ€ ์ผ์–ด๋‚˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Rust์—์„œ๋Š” ์Šค์ฝ”ํ”„๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ ์†Œ์œ ๊ถŒ์ด๋ผ๋Š” ๊ฐœ๋…์„ ํ†ตํ•ด ์ž๋™ํ•ด์ œ๋ฅผ ํ•˜๊ณ ์žˆ๋‹ค.
    Rust๋Š” ๊ฐ’์„ ๋Œ€์ž…ํ•  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณต์‚ฌ๊ฐ€ ์•„๋‹ˆ๋ผ Move์˜ ๊ฐœ๋…์œผ๋กœ ๊ฐ’์ด ์ด๋™ํ•˜๋Š” ๊ฐœ๋…์„ ๊ฐ–๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•ด๋‹น ํƒ€์ž…์ด Copy Trait ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๊ฐ’์ด ๋ณต์‚ฌ ๋˜๋Š” ๊ฐœ๋…์ด๊ณ , Drop Trait ์„ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ์Šค์ฝ”ํ”„๋ฅผ ๋ฒ—์–ด๋‚ฌ์„๋•Œ Heap์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ๋‹ค. C#์œผ๋กœ ์น˜๋ฉด ValueType์„ ์ƒ์†๋ฐ›๋Š” ๊ธฐ๋ณธ Stack ์ €์žฅ ๊ฐ’๋“ค์ด Rust์—์„œ Copy Trait์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๊ณ , String ๊ฐ™์€ Reference Type์€ Drop Trait์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.
    Trait์€ Interface์™€ ์™„์ „ํžˆ ๊ฐ™์ง€๋Š” ์•Š์ง€๋งŒ ์œ ์‚ฌํ•œ ๊ฐœ๋… ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์„ ๋“ฏํ•˜๋ฉฐ, Drop Trait์€ C#์˜ IDisposable์˜ ๋Š๋‚Œ์ด๋ฉฐ ๋งˆ์น˜ using๋ฌธ์˜ ์Šค์ฝ”ํ”„๋ฅผ ๋ฒ—์–ด๋‚ฌ์„ ๋•Œ ์ž๋™์œผ๋กœ Dispose ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์›๋ฆฌ์™€ ์œ ์‚ฌ ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋œ๋‹ค.
2๊ฐœ์˜ ์ข‹์•„์š”