[Rust] 00. Start

tangle0307·2021년 12월 23일
0

새롭게 익힐 프로그래밍 언어로 Rust를 선택했다.

Why Rust?

프로그래밍 언어론을 공부하던 중 strict한 type system을 가진 함수형 프로그래밍이 가능한 언어가 필요해졌고, 처음에는 scala를 사용했다.
그러다가 ML을 하기 위해 python을 쓰려던 중 두 언어를 같이 배우는 게 귀찮아서 ML을 돌릴 수 있으면서 함수형이면서 type이 strict한 Rust를 시작했다.

Stackoverflow의 설문에서 개발자의 언어 만족도가 가장 높았기에 언젠가 해야지라고 생각하고 있었던 언어인데, 꽤 빠르게 시작하게 되었다.

Rust의 장점?

아직 많이 써본게 아니기 때문에 글들을 둘러보면서 느낀 장점을 정리해봤다.

안전한 메모리 관리 / 가변성 관리

메모리 관리의 안전성이 상당히 부각된 언어이다.
오버헤드가 없는(!) 안전한 메모리 관리를 위해 소유권(Ownership)과 수명(Lifetime)이라는 개념을 사용해 컴파일 단계에서 메모리 관리를 한다.
Rust에서 모든 값은 어떤 이름에 귀속이 되며, 이름은 그 값에 대한 소유권을 가지며, 다른 변수에 대입할 경우 그 소유권이 이전되며, 기존 변수는 파기된다.
이때 Stack뿐만 아니라 Heap에 할당된 값도 그 값의 소유권을 가진 변수가 scope를 나가면 할당이 해제된다.
할당을 해제하지 않기 위해서는 return이나 외부 reference에 소유권을 넘겨주는 방식 뿐이다.
이러한 Strict한 성질때문에 컴파일 타임에 reference와 valued의 수명을 비교하여 dangling pointer를 방지한다.
또한 가변성을 명확하게 컴파일 타임에 구분한다.

Pattern Matching

match 키워드를 사용해 사실상 destructure가 가능한 switch-case를 구현할 수 있다.
또한, enum의 variant로 하나의 값이 아닌 구조체나 tuple로도 정의 가능하다.

다음은 Rust 공식 홈페이지의 Pattern Syntax 예시 코드이다.

enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}

fn main() {
    let msg = Message::ChangeColor(0, 160, 255);

    match msg {
        Message::Quit => {
            println!("The Quit variant has no data to destructure.")
        }
        Message::Move { x, y } => {
            println!(
                "Move in the x direction {} and in the y direction {}",
                x, y
            );
        }
        Message::Write(text) => println!("Text message: {}", text),
        Message::ChangeColor(r, g, b) => println!(
            "Change the color to red {}, green {}, and blue {}",
            r, g, b
        ),
    }
}

위 코드에서 msg의 type에 따라서 destructure와 switch-case가 동시에 구현되는 것을 볼 수 있다.

Type soundness

타입 시스템의 관리 하에 컴파일 단계에서 타입, 소유권, 가변성, 수명, 에러로 인한 비정상적 종료를 모두 검사 가능하다. 이때문에 컴파일을 통과한 프로그램은 런타임 오류에 대해 거의 면역(!)이라 볼 수 있다.

Rust 공부 계획

우선 공식 document 쭉 흝어보고 leetcode에 있는 문제들을 풀어보면서 Rust와 친숙해지는 게 계획이다..
같이 공부할 사람?
(백준 안사요)

profile
SNU CSE 20

0개의 댓글