Victoree's Blog

[0] Rust 주요 특징을 알아보자 본문

Rust

[0] Rust 주요 특징을 알아보자

victoree 2023. 2. 15. 23:56
728x90

What is Rust

1. 정형화된 컴파일 언어

  • rustc는 백엔드로 LLVM(Low Level Virtual Machine)을 사용함

2. statically-typed

  • 상수, 변수, 함수 등에 대한 타입을 컴파일 타입에 확인하는 언어

3. 메모리 안정성

  • Buffer Overflow나 Dangling Pointer와 같은 메모리에 접근할 때 생길 수 있는 문제에 대해 얼마나 보호받는가.
    • Buffer Overflow : 해당 영역에 할당된 메모리 버퍼보다 데이터가 넘치게 되면, 해당 정보를 덮어쓰고 오류를 발생시킬 수 있음
    • Dangling Pointer : 포인터가 해제된 메모리영역을 가르켜 더 이상 메모리가 유효하지 않은 경우.
  • Rust는 컴파일 시 메모리 안정성을 확인함으로 컴파일 이후에는 이를 걱정할 이유가 없음

4. Borrow Checker

  • 안전한 Concurrrent Programming이 가능함
  • 여러 Process가 겹치는 기간동안 교차되어 실행되면, 두개의 스레드가 동시에 메모리에 접근하게 되어 Data-race와 같은 오류를 발생시킬 수 있음.
  • Rust는 컴파일 시 borrow checker를 이용하여 이를 방지함

5. Zero-cost Abstraction

What you don’t use, you don’t pay for. And further: what you do use, you couldn’t hand code any better.

  • 쓰지 않는 기능에 대해서는 성능에 영향을 주지 않는다.
  • 쓰는 기능에 대해서는 추상적으로 코드를 작성하더라도 컴파일할 떄는 가장 low-level하게 실행한다.

Rust는 Compile 시

  • 초기화되지 않은 변수, 메모리 누수, double-frees(동일한 메모리 공간에 메모리 해제를 2번 시도하여 발생하는 취약점), use-after-free(이미 free 된 메모리 위치에 접근하려고 할 때 발생하는 temporal memory error), NULL 포인터, lock이 걸린 잊혀진 뮤텍스, 스레드간 data race, 이터레이터 무효화 가 없도록 보장한다.

Rust는 런타임 시

  • 정의되지 않은 동작이 없도록 보장한다.
    • Array aceess 시 범위를 체크함 (flag를 통해 bounds 체크를 무효화 할수없음.. 반드시 받아야 함)
    • Interger overflow를 체크함 (compile-time flag를 통해 정의됨)
      Q. 어떤 경우에 무효화 옵션을 키게 될까?
728x90
Comments