上善若水 수련하는 블로그

IT-소프트웨어 (80)

C++를 대체할 차세대 언어로 부상하는 Rust | IT-소프트웨어
上善若水 2015.02.07 00:10
안녕하세요. Rust를 포함해서 이런 저런 언어를 여러 해 동안 다뤄 온 사람인데... Rust에 대한 글을 싫어하진 않지만 몇 가지 지적은 해야 할 것 같아서 답을 답니다.

- 메시지 패싱은 Rust에서도 지원됩니다. 공유 메모리 모델도 지원하지만 근본적으로는 설명하신 대로 락을 걸어야 하기 때문에 사용이 좀 귀찮고요, 공유 메모리가 필요하지 않은 경우 메시지 패싱이나 Future(promise라고도 하는 것)을 흔히 씁니다.

- C 라이브러리와의 호환성은 JNI 같은 예외를 제외하면 굉장히 많은 언어에서 반자동 내지 자동으로 지원하기 때문에 사용성이 큰 차이를 보이지 않습니다. (파이썬도 최근에 cffi라는 걸출한 물건이 나왔죠.) 오히려 C++가 문제인데, 이 점에서는 D가 더 앞서 있습니다. C 호환성은 어디까지나 기존 라이브러리를 사용할 수 있다 정도의 문제고 실제로는 각 언어의 컨벤션에 맞도록 새로이 바인딩을 만드는 게 장기적으로 낫다는 것도 빼 놓을 수 없겠고요.

- GC에 대한 혐오(?)는 사실 개인차가 있는 부분이겠고, GC를 쓰는지 안 쓰는지 여부 자체는 다른 요소가 같고 프로그래머가 충분히 신경을 썼다는 전제 하에 성능에 큰 영향을 미치지 않는다는 게 중론입니다. GC는 일반적인 성능보다는 최악의 상황에서 예측하기 어렵다는 것이 오히려 더 큰 문제겠지요. (하스켈 같은 "순수" 함수형 언어가 비판받는 것도 이 부분입니다. 순수 함수형 언어는 코드만 보고 성능 예측이 어렵습니다. 성능을 가지고 튜닝하려면 결국 ByteString 같은 비순수적 요소를 써야 하죠.)

- Rust가 언어 차원에서 내장 GC를 지원하지 않을 뿐 필요하다면 GC를 구현하는 건 가능합니다. Arena/TypedArena가 대표적인 간단한 GC 모델이고요(옛날 Objective-C 코드에서 잘 볼 수 있는 autorelease 같은 것으로, 쓰레기를 모아 놓았다가 한 방에 다 버리는게 목적이죠), Rust로 만들어지는 브라우저 서보(Servo)는 파이어폭스 자바스크립트 엔진의 GC 구현을 재활용해서 쓰고 있습니다.

- 개인적으로 D는 언어 자체는 큰 문제가 없었으나 커뮤니티 빌딩에 크게 실패한 것이 메인스트림으로 들어가지 못 한 이유라고 보고 있습니다. D1/D2가 나뉜 것도, D 표준 라이브러리 싸움도, DMD/GDC/LDC로 이어지는 구현체의 어중간함도, 그리고 한동안 멀쩡한 패키지 매니저가 없던 것도(...) 다 그 탓이거든요. 최근 들어 많이 나아지고는 있습니다만 그간의 인식을 해소하려면 더 시간이 들 듯 합니다. Rust는 이런 문제를 피하려고 상당한 노력을 들였고 성과를 보는 중이라 생각합니다.

- Rust의 타입 시스템은 다른 메인스트림 언어에 비해 진일보한 것이 사실이지만, 타입 시스템이라는 게 다 그렇듯 타입 시스템만으로 표현 못 하는 게 있으면 런타임에 해야 하는 일이 생기지요... 흔히 볼 수 있는 것으로 RefCell이라 하여, Rust에서는 뭔가를 바꾸려면 다른 참조를 모조리 배제해야 하는데 변경 가능한 참조가 여럿이 될 경우 타입 시스템만으로 충족이 안 되기 때문에 가벼운 런타임 체크가 추가되는 게 있습니다. (그 밖에 꽤 많은 구현 문제가 있습니다...) 다만 Rust의 타입 시스템에 완벽하게 만족하는 코드를 짠다면 런타임 오버헤드가 없는 것은 사실입니다.
감사합니다. 일부 의견에 대해서는 호불호의 문제도 있고, 일부는 좀더 검증을 해 봐야 알 수 있는 것들도 있네요.
안녕하세요? 좋은 글 잘 읽고 갑니다. 다양한 언어 자체에 관심이 많아서, 이런 글을 읽고 나면 참 즐겁습니다. C++ 라이브러리를 이용해서 프로그램을 짜야하는데, C++로 하기는 싫고 새로운 언어도 배울 겸 글을 찾고 있었는데, Rust가 있었네요. 감사합니다.
Rust vs C++ 이라면, Rust가 좋은데... 진입장벽이 좀 있다는 것이 파악되었습니다. 러닝 커브(Learning Curve)가 문제가 되더군요. 저희 회사에서는 Go 언어를 쓰는 것으로 가고 있습니다.
등록
텍스티콘 텍스티콘