https://ericsink.com/entries/dotnet_rust.html
Rust์ .NET์ ์ฉ์ด๋ฅผ ์๋ก ๋น๊ตํ ๊ธ์
๋๋ค.
.NET์ Nuget์ด ์๋ค๋ฉด Rust์๋ Crate๊ฐ ์๋ค๋ ์ ๋ฑ๋ฑ ์ฉ์ด์ ์ ์ฌ์ ์ ์ค๋ช
ํฉ๋๋ค.
4๊ฐ์ ์ข์์
dimohy
5์ 1, 2021, 8:18์ค์
2
๊ตฟ! C# ๊ฐ๋ฐ์๊ฐ Rust์ ์ ๊ทผํ๋๋ฐ ์ ์ฉํ๋ฃจ๊ฒ ๊ฐ์ต๋๋ค
1๊ฐ์ ์ข์์
.NET๊ณผ ๋ค๋ฅธ์
Rust๋ ์ค์ฝํ๋ฅผ ํตํด ํํ์์ ์ฌ์ฉํ๋ฉฐ ์ด๋ค ์์ ๋ํ์ฌ return ์ ํํํ ๋๋ return ํค์๋์ ์ธ๋ฏธ์ฝ๋ก ์์ด ํํํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
if ๋ฌธ์์๋ if (a == b) { } ์ด๊ฒ ๋์ง๋ง(๋ฌผ๋ก ์ฃผ์ํ๋ผ๊ณ ์ปดํ์ผ ์ ์๋ ค์ค๋ค.), if a == b { } ์ญ์ ๊ฐ๋ฅํ์ผ๋ฉฐ, Github ๊ต์ก์๋ฃ ์ ์๋ ๋๋ก
let y = {
let x = 3;
x + 1
}
fn five() -> i32 {
5
}
์ผ๋ก ์ธ๋ฏธ์ฝ๋ก ์ผ๋ก ํํ๋์ง ์์ ๊ฐ์ฅ ๋ง์ง๋ง ์ค์ ํํ์๊ฐ์ ๋ฐํํ๋ค. ๋ฐํํ์ด ์๋ ๋ฉ์๋๋ ๋ง์ฐฌ๊ฐ์ง.
๋ฉ์๋๋ Snake ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์๋ฌธ์ ๋ฐ ์ธ๋๋ผ์ธ์ผ๋ก ์์ฑํ๋ค. (C#์ ํ๋กํผํฐ ๋ฐ ๋ฉ์๋๋ ํ์ค์นผ ๊ธฐ๋ฒ)
์ค์ฝํ๋ฅผ ์ก์ ๋ C#์
if (true)
{
}
๋ฐ๋ฉด,
if true {
}
์ด๋ฐ ์์ผ๋ก ์๋ฐ๊ธฐ๋ณธ์คํ์ผ์ฒ๋ผ ์ก๋๋ค.
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๊ฐ์ ์ข์์