개발/Etc

완벽한 언어 RUST

희묭 2022. 12. 24. 16:53

Rust

누군가에게 왜 러스트를 좋아하세요라고 질문을 받는다면 간략하게 대답할 수 있는 말은 "러스트는 완벽하니까요" 라는 표현말고는 달리 생각나는 게 없습니다.

프로그래밍을 위해 필요한 언어는 힙영역의 관리 부분에서 자신의 결함을 노출하고 그걸 감수하면서 사용하는 언어가 99%였습니다

 

C, C++ 을 대표로 힙영역을 개발자가 컨트롤 할수 있는 언어가 있고

Java, C#, Python 을 대표로 힙영역을 가비지컬렉터가 대신 처리해주는 언어로 세상은 양분되어 있었습니다.

그러나 Rust는 제 3의 길을 걷는 언어입니다.

오랜기간 양분되어 각자의 길을 걷고있던 프로그래머들이 이 러스트에 열광하는 이유도 여기에 있습니다.

 

매니지드언어 개발자들은 인간의 실수를 늘 두려워하고 언매니지먼드언어 개발자들은 자신들이 컨트롤하지 못하는 영역을 늘 우려합니다.

고로 과거 프로그래밍이라는 것은 완벽해질 수 없는 행위였었다고 생각합니다.

그리고 그것을 Rust는 깨부숩니다.

불완전한 영역을 완전한 영역으로의 가져옴으로서 러스트는 비로소 완벽한 언어라는 칭호를 달아주기 손색이 없는 언어가 되었습니다.

 

러스트가 제시한 제3의 길은 소유권입니다.

fn main() {

    let test_str = "안녕하세요".to_string();

    test_fn(test_str);

    println!("main : {}",test_str); //에러
}

fn test_fn(test_str : String){
    println!("test_fn : {}",test_str);
}

 

소유권에대한 이론적 설명은 복잡하지만 간단히 말하면 객체의 복사를 제약하는 방식입니다.

이로인해서 러스트에서 힙영역의 데이터는 리턴값이 없는한 최종 소유권을 가지고있는 함수의 종료시점에 같이 소멸되고 이는 사실상 컴파일 시점에서 반드시 소멸될 시기가 결정되게 됩니다.

fn main() {

    let test_str = "안녕하세요".to_string();

    let return_str = test_fn(test_str);

    println!("main : {}",return_str); //성공
}

fn test_fn(test_str : String) -> (String){
    println!("test_fn : {}",test_str);
    return test_str
}

이를 위해 러스트는 철저히 자신이 지정한 룰에 맞는 코딩을 강요합니다.

하지만 이것은 대다수의 개발자들에게 지지받는데

이전 언어들은 컴파일이 끝나더라도 내가 짠 코드들이 문제가 있을지 모른다라는 불안감에 항상 노출되었습니다.

버그가 있어도 없어도 문제

그러나 러스트는 최소한 컴파일 단계를 통과하면 대부분의 버그들중 탑픽을 차지하고있는 메모리문제로부터 자유로워집니다, 남는건 비즈니스 로직이죠

 

물론 그만큼 러닝커브도 높고 기존의 객체지향언어들로부터 전환이 어려운 구조적인 문제가 있지만 러스트는 일단 완벽에 다다를 수 있는 길을 제시했고 개발자들은 그래 우리에겐 러스트가 제시한 길이 있다라고 말을 할수 있게 되었습니다.