https://www.itworld.co.kr/news/186713

10년이 채 되지 않는 기간 동안 2개의 새로운 프로그래밍 언어가 엔터프라이즈 개발의 주요 언어로 부상했다. 구글에서 만들어진 고(Go), 모질라에서 탄생한 러스트(Rust)다.

2개의 언어 모두 현대 소프트웨어 개발의 필수 요소인 정교하고 통합된 툴체인, 메모리 안전성, 오픈소스 개발 모델, 강력한 사용자 커뮤니티를 제공한다.

이렇게 비슷한 부분을 제외하면 러스트와 고는 서로 극명하게 다른 언어다. 서로 다른 목적으로, 다른 요구를 해결하고 다른 종류의 프로그램을 작성하도록 만들어졌다.

따라서 러스트와 고를 비교할 때는 어느 언어가 '객관적으로 더 우수한가'가 아니라, 주어진 프로그래밍 작업에서 '어떤 언어가 더 적합한가'의 시각에서 봐야 한다. 이를 염두에 두고 러스트와 고의 주요 차이점과 각 언어가 적합한 작업의 종류에 대해 살펴보자.

성능 측면에서의 러스트 vs. 고

러스트의 대표적인 장점은 안정성, 사용의 용이함과 함께 성능인데, 이 가운데서도 성능을 가장 큰 장점으로 볼 수 있다. 러스트 프로그램은 메모리 취급 및 처리를 위한 러스트의 제로 코스트(zero-cost) 런타임 추상화 덕분에 C 및 C++와 대등하거나 거의 근접한 속도로 실행된다.

물론 러스트 프로그램도 어떻게 작성되느냐에 따라 느려질 수 있지만, 최소한 러스트는 안전이나 편리함을 위해 선택의 여지없이 성능을 희생하지는 않는다. 러스트의 비용이라면 개발자가 메모리 관리를 위한 러스트의 추상화를 배우고 마스터해야 한다는 점이다.

반면 고는 개발자 편의성을 위해 어느 정도의 런타임 속도를 희생한다. 메모리 관리는 고 런타임이 담당하므로 런타임 관련 오버헤드가 필연적으로 발생한다. 그러나 많은 시나리오에서 이 타협은 무시해도 되는 수준이다.

고는 프로그래머가 모든 객체에 대해 강력한 형식을 요구해야 한다는 작은 대가를 치르는 대신 기본적으로 파이썬(Python)과 같은 다른 편의성 중심 언어에 비해 몇 배 더 빠른 속도를 제공한다(파이썬의 편리성과 유연성에는 성능 측면에서 상당한 비용이 따른다).

요약하자면 러스트는 전체적으로 더 빠르지만 대부분의 일상적인 사용례에서 러스트와 고 사이의 속도 차이는 미미하다. 성능이 절대적인 요구 사항인 상황에서는 여러 측면에서 러스트가 고보다 우수하다.

메모리 관리 측면에서의 러스트 vs. 고

러스트와 고의 메모리 관리는 언어들의 성능 특성과 밀접하게 관련된다.

러스트는 메모리 관리를 위해 제로 코스트 추상화를 통한 컴파일 타임 소유권 전략을 사용한다. 이는 러스트 프로그램은 라이브 상태가 되기 전에 대부분의 메모리 관리 문제를 포착할 수 있음을 의미한다. 메모리 안전성이 확보되지 않은 러스트 프로그램은 컴파일이 되지 않는다.

개발 세계의 상당 부분이 잘못된 메모리 관리 탓에 안전하지 않은 것으로 드러난 소프트웨어 위에서 돌아가고 있음을 감안한다면, 러스트의 접근 방법은 진작에 도입되었어야 마땅하다.

앞서 언급했듯이 러스트의 이 안정성에 따르는 대가는 비교적 높은 학습 난이도다. 프로그래머는 러스트의 메모리 관리 기능을 적절히 사용하는 방법을 알아야 하며 이를 위해서는 시간과 연습이 필요하다. C, C++, C# 또는 자바에서 건너온 개발자가 러스트를 익히려면 코드를 쓰는 방법에 관한 생각의 변화가 필요하다.

참고로 서드파티 프로젝트를 사용한 추가 요소의 형태로 러스트에 가비지 수집을 도입할 수 있다. 이미 'gc crate'라는 프로젝트가 존재하지만 여전히 초기 상태다. 그러나 러스트의 기반 패러다임은 가비지 수집을 사용하지 않는다.

고도 러스트와 마찬가지로 메모리 안전성을 제공하는데, 메모리 관리가 런타임에 자동으로 처리되는 방식이다. 프로그래머는 수천 라인의 고 코드를 쓰면서도 메모리 할당이나 해제에 대해서는 전혀 생각하지 않아도 된다.

런타임 가비지 수집기의 경우 프로그래머에게 어느 정도 통제 기능이 있다. 가비지 수집 임계값을 변경하거나 수동으로 수집을 트리거해서 가비지 수집 주기로 인해 다른 작업이 방해를 받는 경우를 방지할 수 있다.