Rust (러스트)

2022. 1. 9. 16:21Programming

    목차
반응형

History

2010년 7월 Mozilla 재단에서 최초 공개한 프로그래밍 언어이다. 2021년 Rust foundation으로 분리되었으며 Google, Amazon, MS 등이 회원사로 참여하고 있다. 또한 최근 AOSP에서도 Rust를 C++, Java, Kotlin에 이어 AOSP를 구현하는데 사용하는 하나의 언어로 선택하였으며, 구글의 세로운 OS인 '퓨시아'에서 Rust를 사용하고 있다.

Stackoverflow에서 2016년 부터 현재(2021년)까지 개발자들이 가장 좋아하는 언어 1위를 기록하고 있다.

특징

  • C/C++과 동등한 수준의 성능을 보여주면서 동시에 안전성, 동시성을 강화하였다.
  • Trait이라는 (interface와 유사한) 개념을 사용하여 다형성을 지원한다.
  • null 포인터 에러가 언어 차원에서 존재할 수 없다.
    • Option라는 generic enum에서 None으로 지정하는 것이 null 포인터에 해당한다.
  • 안전한 메모리 관리
    • ownership와 lifetime 개염을 이용하여 compile 단계에서 메모리를 관리한다.
    • Debug mode의 경우 integer overflow등을 runtime에 잡아낼 수 있다.
    • system 프로그래밍 언어이기에 gabage collection을 수행하지 않는다.
  • 변수의 가변성을 compile time에 정의한다.
    • mut keyword를 지정해야 변경 가능한 변수 선언이 가능하다.
    • 기본적으로 변수는 read only이다.
  • 에러관리
    • 예외가 없다.
    • Result<T, E>로 에러를 묶어서 처리한다.
    • 이를 보고 panic을 발생시킬 것인지, 에러를 처리할 것인지를 결정한다.
    • Zero-cost abstraction 철학에 부합
      • C++의 경우 exception 처리를 위해 stack을 rewind 수행하며 이때 보통 5,000~10,000의 CPU cycle을 사용한다.
  • enum
    • Rust의 enum은 각 밧을 구조체나 tuple로 정의할 수 있다.
  • Trait
    • 객체의 특성과 interface를 제공한다. 
  • Hygenic macro
    • 단순한 문자열 치환이 아니라 LISP의 하이지닉 매크로 개념을 사용한다. 
    • compiler에서 수행하는 수행한다. 즉, Rust의 문법 중 일부이다. 
  • 비동기
  • Generic

 

Rust 사용 고려 이유

  구글과 마이크로소프트에서는 Rust를 사용할 경우 자사 제품의 보안 버그 패치 비용의 70%를 절감할 수 있을 것이라는 내용의 문서도 공개하였다. 구글/마이크로소프트/인텔은 이미 Rust의 개발에 깊숙히 관여하고 있으며, 각종 컨퍼런스에서 공개적으로 이를 언급하고 있다.

 

  Rust의 출시 배경은 C++의 안전하지 않은 메모리 관리의 위험을 제거하고자 하는데 있다. 코드리뷰와 정적 분석 tool 및 동적 분석 tool을 사용해야 거를 수 있는 잠재적인 문제들을 Rust는 애초에 발생할 여지를 주지 않는다는 것이 Rust의 장점이자 탄생 목적이다. 메모리 안전성은 보안성 및 생산성 측면에서 상당한 이점을 가져다 준다. 

 

 

점유율

  • C++로 구현된 기존 infra
    • 대부분의 H/W 리소스의 접근은 C/C++을 통해서 지원한다. 
    • CUDA 등도 C++로만 사용할 수 있다. 
  • 언어 수명
    • Rust는 아직 신성 언어이다. 
  • 불편함
    • 안전성을 우선시 하기에 이를 위해 지켜야 하는 엄격한 문법이 불편하다. 
    • 객체의 수명을 개발자가 직접 지정해야 할 경우 여기서 발생하는 에러와 복잡성이 발생한다. 

 

 

 

반응형

'Programming' 카테고리의 다른 글

맥에서 boost 설치 및 위치 확인  (0) 2022.09.22
gtest 사용  (0) 2022.09.21
C++ map/vector  (0) 2022.03.01
안드로이드 스튜디오 설치 (Android Stuido)  (0) 2021.12.23
도대체 임베디드가 뭔가요? (embbedded system)  (0) 2021.12.19