logo
Published on

RUST 언어를 살펴보자

Authors

What is Rust Lang

What Microsoft Guide Said

Microsoft Learn Rust 에서는 Rust 를 효율적 이고 안전한 소프트웨어를 개발할 수 있는 오픈소스 프로그래밍 언어로 표현한다. 메모리를 관리하고 하위 수준 세부 정보를 제어할 수 있으며 반복 및 인터페이스 등 개략적인 정보도 활용할 수 있다. 몇가지 이점을 살펴보자.

  1. 형식 안전(아마도 type safety?)
  • 컴파일러는 잘못된 형식이 발견되면 어떤 작업도 적용되지 않도록 한다.
  1. 메모리 안전
  • Rust 포인터는 항상 유효한 메모리만 참조한다.
  1. 데이터 경합 없음
  • Rust 빌림(borrow) 검사기는 프로그램의 여러 부분이 동일한 값을 동시에 변경할 수 없도록 한다. 이는 스레드 안전을 보장한다.
  1. 무비용 추출
  • 최소한의 성능 비용으로, 또는 성능 비용 없이 반복, 인터페이스, 함수 프로그래밍 같은 상위 수준의 개념을 사용할 수 있다.
  • 추상화는 기본 코드를 직접 작성하는것 처럼 작동한다.
  1. 최소 런타임
  • Rust 에는 최소한의 선택적 런타임이 있다. 메모리를 효율적으로 관리할 수 있도록 GC 도 존재하지 않는다. 이러한 측면에서 Rust 는 C, C++ 과 가장 유사하다고 할 수 있다.

What Rust Official Book Said

Rust 공식 가이드북의 '들어가기에 앞서' 파트 에서는 아래와 같이 설명한다.

콕 집어서 말할 순 없지만, 러스트 프로그래밍 언어는 권한 부여 (empowerment) 에 근간을 두고 있습니다: 여러분이 지금 어떤 종류의 코드를 작성하고 있건 간에, 러스트는 여러분에게 더 많은 권한을 부여하여 프로그래머가 다양한 분야에서 이전보다 더 자신감 있게 프로그래밍할 수 있도록 도와줍니다.

Java 나 Python 과 같이 내가 알아서 해줄게 느낌이 아닌, 너에게 충분한 권한을 줄테니 능력대로 잘 구현해바 라고나 할까? 특히 C, C++ 이 그러한데, 이 분야 에서는 심혈을 기울에 코드를 작성하지 않으면 망가지거나 붕과하기 쉽다고 한다.

하지만 Rust 는 이러한 문제를 해결하기 위해 일반적인 프로그래머에게 친숙하고 세련된 도구를 제공한다고 한다. 특히 Rust 라는 언어는 속도와 메모리 측면에서 효율적으로 신뢰할 수 있는 코드로 자연스럽게 안내되도록 디자인 되었다는 부분이 제일 궁금해 졌다. 실제로 가이드를 한 사이클 경험해 보면 이 부분을 수긍하게 되었으면 좋겠다.

저수준 언어에 익숙한 개발자들에게는 아래의 이점이 있다고 한다.

  • Rust 에서 별렬화를 도입하는 것은 크게 위험하지 않은 도전이다. -> Rust 가 고전적인 실수를 잡아준다!
  • 실수로 인한 충돌이나 취약점을 발생시키지 않을 것이라는 확신을 가지고 작업할 수 있다. -> How?

또한 저수준 언어에만 국한되지 않는다고 한다. CLI, 웹 서버 등을 작성할 수 있을 정도로 표현력이 풍부하고 개발자 친화적으로 설계되어 있다고 한다.

제일 인상적인 설명 을 소개한다.

여태 프로그래밍 언어 디자인에 있어 저수준 (low-level) 제어와 고수준 (high-level) 문법은 양립하기 어려웠지만, 러스트는 이러한 충돌에 도전합니다. 강력한 기술적 능력과 뛰어난 개발자 경험 간의 균형을 유지함으로써, 러스트는 (메모리 사용과 같은) 저수준 제어에 전통적으로 동반되는 귀찮은 것들 없이 이를 제어할 수 있게 해 줍니다.

Useful to who?

Developers

숙련자와 초심자 등 다양하게 구성된 대규모 개발팀 간 협업 시 생산적인 도구로 인정받고 있다고 한다. 저수준 코드는 미묘하게 버그가 발생하기 쉬운데, 숙련된 개발자에 의해 실행된 대규모 테스트나 면밀한 코드 검증을 통해 버그를 발견할 수 있다.

Rust 는 컴파일러가 동시성 버그 등 찾기 어려운 버그가 있는 코드의 컴파일을 거부함을 통해 수문장 역할을 한다. 이는 개발팀이 로직 개발에 더 집중할 수 있는 환경을 만들어 준다.

Rust 는 아래의 현대적인 개발자 도구를 도입하기도 했다.

  • Cargo 라는 기본 구성에 포함된 의존성 관리자 및 빌드 도구를 포함함. 이는 Rust 생태계에서 의존성을 고통없이 일관되게 추가하고 컴파일 하고 관리할 수 있게 되었다.
  • Rustfmt 도구는 개발자들 사이에서 코딩 스타일을 통일 시킨다.
  • Rust 언어 서버 (lsp) 는 코드 자동완성과 인라인 에러 메시지를 결합해 IDE 의 편의성을 높인다.

Who Think Speed and Safety is Important

Rust 는 속도와 안전성을 중요하게 여기는 사람을 위한 언어이다. (여기서 속도란 코딩속도, 실행속도 모두를 지칭)

  • 기존 언어는 불안정성으로 인해 레거시 수정을 꺼려함 -> Rust 는 컴파일러 검사 기능을 통해 안정적인 리팩토링을 지원한다.
  • 비용 없는 추상화, 즉 컴파일러가 생성하는 저수준 코드를 개발자가 직접 작성한 만큼 빠르게 만들 수 있도록 노력 -> 안정적인 코드가 빠른 코드가 되도록 함

References

  1. Rust 공식 가이드 페이지
  2. Rust 공식 가이드 북 한글 번역본
  3. Microsoft Learn Rust (자동 번역 된것으로 보이며 어색한 표현이 많다.)