Rust와 .NET의 용어를 서로 비교한 글입니다.
.NET에 Nuget이 있다면 Rust에는 Crate가 있다는 점 등등 용어적 유사점을 설명합니다.
4개의 좋아요
굿! 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개의 좋아요