Rust

최근에 Rust공부를 시작했다. 원래도 관심이 있어서 이전에 찍먹해보긴 했는데, 그때 느낀건 문법은 예쁘지만 c++에 비해 코드가 길고 장황해진다는 느낌이라 c++에서 갈아타지 않았다. Rust를 다시 시작하게된건 PS와 거리를 조금 두면서 짧은코드보다 예쁜(그리고 안전한)코드를 작성하는것에 관심이 생겼기 때문이다. 물론 이전에도 그러한 노력의 일환으로 cp.cpp라는 개인알고리즘라이브러리를 관리해왔지만, rust를 사용하면 그러한 목적에 더 가까워질 수 있을것 같아서 사용해보려고 한다. c++이라는 언어자체가 원체 오래되었다보니 legacy때문에 예쁘지 못한 문법이 많이 있는데 비해 Rust의 문법은 세련됬으며 메모리안정성도 제공한다. 물론 비용없는추상화라고 하는게 런타임비용이 없다는것뿐 C++에 비해 컴파일시간도 길고 코드도 길어지는 비용은 존재한다고 생각한다. 그렇지만 그 cost들을 감안해도 rust가 주는 이점은 훨씬 크다고 생각하고 그래서 Rust를 공부하려고 한다. 사실 rust가 c++에 비해 코드가 길어진다기보다는, c++가 프로그래머에게 메모리관리책임을 떠넘기는대신 자유로움을 얻었던거를 다시 컴파일러가 엄격한 메모리체크를 하기 위해 명시적으로 적는 코드가 추가되는것 뿐이지 어쨌든 올바른 프로그램을 작성하기 위해서는 프로그래머 스스로 그러한 메모리의 소유권흐름의 정당성을 체크할 수 있어야했으므로, 그냥 생각으로 검증하던걸 코드로 옮겼다고 볼 수 있고, 이는 프로그래머가 두뇌로 하던 일을 단순히 코드로 적는것에 불과해서 타자를 더 많이친다고 할수는 있어도 코딩을 더 많이한다고 보는건 애매한것 같다. 이외에도 c++에 비해 엄격한 타입체크를 요구한다던지 좀 명시적인걸 요구하는 rust의 특징이 반영되서 길어지는듯 하다. 이전에 rust를 접은건 코드가 길어지는게 별로이기도 했지만, 그 당시에 내가 짜던 대부분의 코드는 메모리문제인 경우보다 코드의 논리문제인 경우가 대부분이었기 때문에(대부분 알고리즘 문제를 푸는 용도로 c++을 사용했었다) 메모리안정성에 대해 별 관심 없었기도 했다. 그러나 최근에 대규모 c++프로젝트인 openvino에서 인턴으로 일하면서 모든 참조를 스마트포인터를 사용하는것을 보면서, 메모리관리하기 편하긴한데 이럴거면 그냥 rust로 짜는게 낫지 않을까? 라는 생각이 들어 다시 공부하게 되었다. 확실히 메모리에 대한 concern이 없어지는건 프로젝트를 진행함에 있어 굉장한 장점이고, 그래서 거의 무조건 GC나 스마트포인터를 사용할텐데, 그걸 런타임비용없이 컴파일러가 보장해주는것도 Rust의 큰 장점인것 같다. 대부분의 c++프로젝트가 스마트포인터를 사용한다면 오히려 실성능은 Rust가 더 잘 나올수도 있는거 아닐까싶다.

rust는 의외로 임베디드에선 메모리크기나 프로그램이 작아서 메모리 관리문제 잘 안생기고, os개발이나 시스템프로그램에 사용될듯. 즉, c++대규모프로그램.