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가 더 잘 나올수도 있는거 아닐까싶다.
-
Comments
-
[me]: 오늘 누군가가 "Rust는 메모리안정성에 병적으로 집착하는 언어"라는 평을 남긴것을 보고 납득이 되더라. 그래서 c++을 완전하게 대체할 언어인지는 아직 잘 모르겠다. GC가 Runtime성능을 희생해서 메모리 안정성을 보장하는 기술이라면, Rust는 Zero cost로 메모리 안정성(leak제외)을 보장하지만, 공부하다보니 또다시 Verbose한 느낌이 들어서 C++ 마려워진다ㅋ. 내 개인적인 바램은 Modern C++의 못생긴 문법을 정돈한 Nim/Zig/Carbon같은 언어가 Low Level의 디폴트로 자리잡고 그 중 Memory Safety가 중요한건 Rust로 짜게되는 미래가 제일 바람직하지 않나 싶다. 물론 프로덕션레벨에선 Rust가 디폴트가 될 수도?
reply
-
[todo]: 댓글로 메모한거 본문으로 옮기기
reply
-
[me]: 더 생각해보니 문법이 예쁘다는 정도로는 c++의 그 거대한 생태계를 움직이진 못할테니, c++/rust 양강구도로 갈 가능성이 높을것 같다.
reply
-
[me]: 메모) 그런데 nullptr없앤것만으로도 Rust넘어갈 이유는 충분한것 같아서 c++보다 문법이 예쁘면서 nullptr없는 언어가 c++을 대체할수도 있을듯
reply
-
-
[me]: Rust가 메모리안정성에 병적으로 집착하는 언어라면, 다른 gc없는 언어들은 자유란 이름으로 메모리를 방임하는게 아닐까?
reply
-
-
[me]: 메모) 오늘 알게된 재밌는 사실: D lang도 @nogc와 @safe를 붙이면 나름 c++대체제로 쓸만할지도? 개그캐 포지션같으면서도 자세히 들여다보면 얘도 나름 진지한 구석이 많은듯 하다.
reply
-