Rust 실행 속도가 빠른 이유

5837 단어 Rust

목적



Rust의 실행 속도가 빠른 이유를 알고 있습니다.

요약



① 직접 기계어로 컴파일된다.
② 제로 코스트 추상화
③ GC 없음

Rust 실행 속도



다양한 알고리즘에서 속도 비교
왼쪽에서 C++, Rust, C
수치가 낮을수록 빠릅니다. Rust는 C, C++와 같은 정도로 빠르다고 여겨지고 있다.


Rust 컴파일러

Rust 컴파일



Rust는 C, C++와 마찬가지로 직접 기계어를 생성하고 있다. Rust 컴파일러는 기계어 생성에 LLVM을 사용합니다.
Rust 정보

파이썬은 런타임에 바이트 코드 (중간 코드)를 생성하고 가상 머신 PVM (python virtual machine)에서 실행하기 때문에 느립니다.
참고

어셈블러 확인



cargo rustc --release -- --emit asm으로 최적화된 어셈블러를 출력 가능.
\target\release\deps에 .s 파일이 생성된다.

제로 비용 추상화



추상화의 비용(실행 속도의 저하나 메모리 사용량의 증가)을 한없이 0으로 하고 있기 때문에 빠르다.
원래 C++의 개념. (제로 오버헤드 원칙)

정적 디스패치로 사전에 대응하는 함수 등을 생성하고 있기 때문에 오버헤드가 없어지는, 인라인화 등 최적화하기 쉽다.
동적 디스패치에도 대응하고 있기 때문에, 실행시에 형태가 정해지는 경우에도 대응 가능.

qiita.rs
//共通のメソッドを実装するように促す仕組み
//これがないと同じ名前の関数は使用できない
trait  Show{
  fn show(&self);
}

struct Car;
struct RacingCar;

//implで構造体にメソッドを持たせる
impl Show for Car{
  fn show(&self){
    println!("Car");
  }
}

impl Show for RacingCar{
  fn show(&self){
    println!("RacingCar");
  }
}

fn main() {
  let car=Car{};
  car.show();//静的ディスパッチ

  let caa=RacingCar{};
  caa.show();//静的ディスパッチ

  let Car_vec:Vec<Box<dyn Show>>=vec![Box::new(Car),Box::new(RacingCar)];
  for i in Car_vec{
    i.show();//動的ディスパッチ
  }

}



파이썬은 동적 형식 언어이기 때문에 최적화가 어렵고 느립니다. 왜 파이썬이 느린가?

제로 비용 추상화의 효과 확인



참고

가비지 컬렉션(GC) 없음



가비지 콜렉션이란: 프로그램이 더 이상 사용하지 않는 메모리 영역을 자동으로 해제하여 다른 프로그램을 사용할 수 있도록 하는 것.

GC가 있는 언어는 메모리의 관리를 생각하지 않고 코드를 쓸 수 있는 대신에 GC가 행해지는 것으로 처리가 정지하기 때문에 실행 속도가 느려진다.

자바 GC : 세대 별 가비지 컬렉션

GC 정리

어떻게 가비지 컬렉션을 없애?
소유권과 차용의 구조에 의한다.

좋은 웹페이지 즐겨찾기