왜 Rust 언어인가?

Jason Jaewoo Kim
usingrust
Published in
6 min readAug 5, 2019

목차

  • 시작하기 전에
  • 성능과 제어에서 우위에 있는 언어는?
  • 메모리안전성을 유지할 수 있는 언어는?
  • 그외의 측면들
  • 향상된 Rust 컴파일러 속도

2019년 7월 16일 Microsoft Security Response Center(MSRC)에서 소프트웨어 보안을 유지하면서 효율성이 좋은 시스템프로그래밍 언어로 “Rust”를 높게 평가했습니다.

또한, 2019년 7월 22일에는 C/C++언어를 대체할 수있는 시스템프로그래밍언어로 무엇이 좋은지에 대해 가장 유력한 대안으로 Rust를 꼽았습니다.

MSRC에 따르면, 메모리 안전성을 갖춘 널리 사용되고 있는 언어는 많습니다. C#, F#과 같은 .NET지원언어외 Swift, Go, Python, Rust등이 있습니다.

하지만, 시스템 프로그래밍 언어는 운영체제커널 등 다른 소프트웨어를 기반으로 동작되는 시스템을 만드는데 사용합니다. C/C++언어가 제공하는 같은 속도나 예측가능한 성능이 필요합니다.

따라서, 가비지컬렉션이 메모리 안정성을 확보하고 있는 언어는 시스템 프로그래밍 언어로 최적이지 않습니다. 이것이 예측할 수없는 성능의 일시적인 저하와 불필요한 오버헤드의 원인이 될 수 있기 때문입니다. 하지만 C/C++언어는 메모리 안전성을 제공합니다.

MRSC는 성능과제어, 안전성, 그외의 측면을 기준으로 3가지 언어와의 장점을 비교했습니다.

성능과 제어에서 우위에 있는 언어는?

C/C++ 시스템 프로그래밍 언어에서 필수적인 성능과 제어기능을 제공합니다. 사실 Rust는 이들 언어와 똑같이, 런타임을 최소화하고 런타임을 사용하지 않는 것도 가능합니다. Rust표준라이브러리는 C/C++언어와 똑같이 Rust를 지원하는 플랫폼의 libc에 의존합니다. 표준 라이브러리는 옵션이기 때문에 운영체제가 없는 플랫폼에서도 Rust코드는 동작이 가능합니다.

또한, Rust는 C/C++언어와 마찬가지로 메모리를 할당하는 타이밍과 양을 개발자가 치밀하게 결정할 수 있어 개발자는 프로그램 성능 정확하게 예측할 수 있습니다. 실행속도, 제어, 에측가능성이라는 관점에서 성능은 Rust와 C/C++언어와 동등하다는 것이 MSRC결론입니다.

메모리안전성을 유지할 수 있는 언어는?

Rust언어는 안전성을 보장한다는 점에서 C/C++언어와는 크게 다릅니다. Rust언어는 개발자가 고의적으로 위반하지 않으면 전체 메모리 안전성을 갖추고 있고, 런터임 오버헤드를 증가시키지 않고 메모리손상 오류를 방지하는 구조로 되어 있습니다.

메모리 안전성이 중요한 문제인 이유는 마이크로소프트 보안문제중 70%가 메모리의 안전성에 관한 것이기 때문입니다. 즉, 마이크로소프트 소프트웨어가 Rust로 만들면 70%정도의 문제를 해결할 수 있는 가능성이 높다는 것입니다. 시스템 프로그래밍, 안전성을 정적으로 보장할 수 있는 처리 이외를 설명해야 합니다. 하지만 Rust언어는 이런 처리를 랩핑하고 안전하게 추상화합니다.

Rust이전에는 코드에 대한 의견이나 프로그래밍 규약에 의해 메모리의 안전성을 보장하는 경우가 많았습니다. Rust언어는 메모리 안전성이 보장되지 않는 처리는 명시적으로 마크할 필요가 있고 표시되는 않는 경우에는 컴파일러가 안전하지 않다는 것을 감지하는 구조입니다.

이런 구조는 보안 담당자에게도 장점이며 메모리 안전성에 관한 취약성을 조사시 해당 영역을 한정할 수 있기 때문입니다.

그외의 측면들

Rust언어에 대해 MSRC에서 관심을 가지는 것은 다음과 같습니다.

  • 안전성 보장이 철저하고, 컴파일된 프로그램은 확실하게 실행된다는 안정감
  • null포인터의 안전성과 데이터충돌 안전성(두개 이상의 스레드에서 하나의 메모리영역에 대한 비동기 접근할수없음)이 메모리 안전성을 확장한 형태로 정적인 강제 실행
  • 다양한 형식 시스템(예로 값이 있는 enum, 테레이트시스템)을 채용한 것으로 프로그램에 버그가 적어짐
  • 기존 Rust 커뮤니티의 건전한 생태계

MSRC는 Rust는 Stack Overflow의 가장 사랑받는 언어순위에서 4년연속 선두를 유지하고 있다는 것도 하나의 이유로 이야기합니다.

향상된 Rust 컴파일러 속도

Mozilla는 Rust성능추적에 사용되는 표준 벤치마크 프로그램의 컴파일속도를 2019년 1월 1일부터 2019년 7월 24일까지 비교한 결과를 공개했습니다.

출처: https://blog.mozilla.org/nnethercote/2019/07/25/the-rust-compiler-is-still-getting-faster/

결과를 보면 29가지 벤치마크 프로그램의 컴파일에 대한 결과를 비교하였고, 디버그빌드(debug), 최적화빌드(opt), 체크빌드(check)세가지를 사용하여 컴파일시간을 측정했습니다.

avg열은 각 빌드타임의 컴파일시간 변화율을 평균으로 보여줍니다. avg열 값 대부분은 -20~-40%의 범위로 min(감소율 최대값)은 -12.4~51.3%사이이고 max열값과 대부분은 -10%보다 좋게 나옵니다.

2017년 11월 측정한 결과에 비하면 컴파일 속도향상은 약 2배이상으로 나타나고 있습니다. 이처럼 앞으로 Rust의 단점으로 보였던 컴파일속도도 상당히 빨라졌고 앞으로도 계속 발전될 것으로 예상됩니다.

결론

Rust언어는 앞으로 안전한 시스템 소프트웨어 개발의 새로운 물결을 만들어낼 것으로 생각합니다. 이유는 저수준 시스템을 만드는데 필요한 성능과 제어기능을 제공하면서 동시 소프트웨어 개발자들에게 강력한 보안적인 프로그램 개발을 가능하게 하기 때문입니다.

그러나 이런 발표에도 앞으로 개선해야할 부분도 있습니다. 예로 Rust언어의 안전하지 않은 슈퍼세트의 대규모 이용을 제한하는 방법과 C++처럼 높은 상호운용성이 부족하다는 점등입니다.

그렇지만, 이런저런 이슈도 있지만 앞으로 많은 사람들이 시스템 프로그래밍 요구에 대응하는 언어로 Rust언어를 고려하면 좋을 것 같습니다.

--

--