개요
러스트에서 강조하고, 이를 자기들의 철학으로 홍보하는 것중 하나가 Zero Cost Abstraction입니다.
이름 그대로 추상화를 하더라도, 추가적인 비용이나 오버헤드가 발생하지 않는다는 것입니다.
예를 들어, 제네릭을 사용하더라도, 러스트 컴파일러는 컴파일 타임에 타입을 추론하고, 이를 최적화하기 때문에, 런타임에는 오버헤드가 발생하지 않습니다.
트레잇과 구조체 등도 마찬가지로 런타임 성능에 영향을 미치지 않습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use std::{ops::Mul, fmt::Display};
pub struct Rectangle<T> {
width: T,
height: T,
}
impl<T> Rectangle<T> {
pub fn new(width: T, height: T) -> Self {
Self {
width, height
}
}
}
impl<T> Rectangle<T>
where T: Mul<Output = T> + Copy + Display
{
pub fn area(&self) -> T {
self.width * self.height
}
}
assert_eq!(Rectangle::<usize>::new(10, 5).area(), 50);
예를 들어 위와 같은 코드에서 추상화된 Rectangle
구조체, 제네릭, 트레잇 그리고 캡슐화된 area
함수를 사용하더라도, 추상화를 위한 런타임 타임의 오버헤드는 전혀 발생하지 않습니다.
물론 때문에 컴파일 타임은 느려질 수 있습니다.