Post

Future of Rust And Carbon

Rust 는 Client 를 작업하기엔 아직 환경이 갖춰질 시간이 필요하다.
현존하는 모든 3D API가 언어 수준의 안정성을 전혀 고려하지 않고 설계된 RAW API 이고, GUI 툴킷이 쓸만한게 없다. 사실 딱히 Rust 자체가 GUI용으로 많이 쓰이는 최신 언어(Dart 같은…) 들과 다르게 GUI 를 만들기에 유리한 구조로 설계 되지도 않았다.

그리고 특수한 케이스가 아닌 이상 C++ 로 GUI를 만드는 것은 현 시점에서는 무모하다고 생각 한다. 아마 소형 임베디드 기기 정도가 예외가 아닐까… 그런데 난 20년전 스펙이 그렇게도 낮았던 초기형 Mp3 Player 에서도 Flash 기반의 GUI를(FlashLight긴 했지만..) 몇번 본적이 있는걸 보면 그 시점에도 C++로 GUI를 하는것이 그다지 현실적이지 않다는 생각은 당시에도 마찬가지였나보다.

Rust는 새로운 Server(혹은 OS의 API를 거의 쓰지 않는 모든 SW) 를 만들 경우 반드시 사용해야만 한다고 생각하고, 앞으로 더 많이 쓰일 것이라 생각한다. 환경의 성숙도는 이미 C++을 압도하고 있다.
더 많은 기능을 제공하는 표준 라이브러리와 C++에선 제대로 돌아가지도 않는 패키지 관리자, C++보다 훨씬 나은 환경을 제공하는 개발툴등이 이미 존재한다. 개인적으론 개발툴로는 CLion 을 추천한다.
훨씬 사용하기 편한 라이브러리들을 이용하여, 안정적인 코드를 만들어낼 수 있다.
기존에 C/C++ 로 되어 있는 코드가 있다면, 앞으로 추가되는 모듈을 Rust로 작성하고 서로 최소한의 연결만을 하는 방식으로 안전성을 확보할 수 있을 것이라 생각한다. 그리고 같은 수준의 인력과 돈이 투입되면 당연히 제약이 많은 언어 쪽이 최적화에 유리하니 현재처럼 C++에 투자를 하던 빅테크 기업들이 다같이 Rust에 투자를 하는 상황에선 곧 바이너리의 절대 성능도 Rust가 앞서게 될 것이라 본다.

고로 Rust 는 Web이 아닌 서버, 미들웨어, 커널, 컴파일러 등에서 엄청 잘 나갈 것으로 생각된다.(이미 ruby 의 jit컴파일러가 rust로 전환 완료. typescript 트랜스파일러가 rust로 개발되어 도입중). 분명 HW 컨트롤 등 Rust의 제약 안에서는 너무 괴로운 작업들이 있겠지만… 그런 난감한 작업은 unsafe 쓰는게 맞다. 커널 등의 LowLevel SW나 API라 해도 모든 코드가 꼭 포인터 떡칠을 해야 되는건 아니고, 그래야만 하는 부분이 일부 있을 뿐인데 그거 쪼금 귀찮다고 C/C++ 로 바꾸는건 집에 바퀴벌레 하나 생겼다고 집을 태워버리는 것과 마찬가지라 생각한다. 마침 Linux 도 Rust 공식 지원 한다고 하니 참고자료도 많아질거다… ZDNet기사 보러가기

Carbon 은 이제 막 나온 언어라서 개발 툴 들의 지원이 전혀 없다 그리고 앞으로도 안그래도 복잡해서 엉망진창으로 돌아가는 C++이 섞여있는(지금도 C++용 intellisense 등은 다른 언어용에 비교하면 처참…) 이상 개발툴의 완성도를 기대하기 어렵다고 생각한다.

~~ C++로 작성된 3D/Client는 위에서 말한것과 마찬가지로 Rust 에서 사용하기가 전혀 좋지 않다. 그래서 Carbon 으로 전환하여 얻을 메리트가 없을 것으로 생각된다. ~~ 조금 더 만져보고 생각이 바뀌었다. 3D Api Call은 Unsafe로 만들더라도, 연결되는 로직 부분에서는 메리트가 충분 하다. 사실 Unity 등의 게임 엔진도 C++로 만든 코어에 스크립트를 올리지 않던가. 그냥 Rust Script 라고 생각해도 문제 없겠다.

C++로 작성된 Server 에 Carbon 을 붙일 경우, Rust 에서 아무리 안전하게 만들었더라도, 그 데이터가 C++ 로 넘어가버리면 그 안전성에 대한 보장이 전혀 안된다. 따라서 기존 코드를 Carbon 으로 전환해서 얻을 메리트가 상당히 줄어든다고 본다. Rust를 프로젝트에 도입 할 경우, DLL(so) 단위로 도입하여 서로의 영역을 침범하지 않는 형태로 최소한의 연결을 하는 쪽이 바람직하다고 생각한다. 프로그래밍 언어 개발 권위자들이 C++에 Rust 를 붙이는 것을 Carbon 말고도 이것저것 만들고 있는데… (CppFront, Carbon,Etc..) 그 중 C++의 모든 기능을 가져가는 언어는 없다. 레거시를 다 가져갈 이유도 없겠지만… 당장 Carbon 도 다중상속을 허용하지 않고 있고…

Carbon은 google에서 만들었는데 KilledByGoogle 링크 에서 볼 수 있는 것 처럼 구글은 지들이 만들어 놓고 지들은 안쓰기 / 금방 버리기 의 달인이다. 오랫동안 유지되어야 하는 코드를 구글의 기술을 빌리기는 무섭고, 이는 나만이 아니라 많은 사람들이 비슷하게 생각할것이라 본다. 그러니까 저런 사이트가 나왔겠지…

뭐 결론적으로 Rust는 한정된 영역에서라면 지금 당장 도입해서 아주 잘 쓸수 있고, 앞으로도 잘 쓰일것 같고, Carbon 은 제대로 된 개발툴 하나 못나오고 망할거라 예상하고있다. 애초에 만든 당사자 부터가 그냥 웬만하면 Rust쓰라는 판인데 뭘 …

쪼금 아쉬운건… 내가 더이상 Native가 반드시 필요한 개발을 하지 않는 다는 것. 현실적으로 꼭 Native여야 하는 프로젝트는 거의 없고, 오래만들어온 레거시 프로젝트이거나 그냥 관성에 의해서 하거나, 아니면 별 생각이 없어서 그냥 Native를 쭉 쓰고 있는 경우가 대부분이다. 그리고 난 그런 일을 하고 있지 않다.
내가 생각했을때 반드시 Native 여야 하는 프로젝트는… 모든 Kernal, 모든 Driver, 모든 Hypervisor, 모든 3D Core, 모든 Codec, 모든 WebBrowser, 특정 WebServer, 특정 Database… 또 뭐가 있으려나?

This post is licensed under CC BY 4.0 by the author.