RUST · GENERICS

제네릭 단형화 컴파일 파이프라인

Rust 제네릭은 런타임에 타입을 검사하는 방식이 아니라 컴파일 시점에 사용된 구체 타입별 코드로 바뀌어 실행 비용을 줄입니다.

컴파일 변환 흐름

monomorphization
generic fn<T>타입 매개변수를 가진 함수나 구조체를 작성합니다.
call sitesi32, f64 같은 구체 타입으로 호출됩니다.
monomorphize컴파일러가 타입별 버전을 생성합니다.
typed machine code각 타입에 맞는 코드가 최적화됩니다.
runtime실행 중 동적 타입 비용 없이 호출됩니다.
제네릭호출 타입단형화코드 생성실행

트레이드오프

perf
빠른 실행동적 디스패치 비용 없이 구체 타입 코드가 실행됩니다.
코드 크기많은 타입으로 쓰면 생성 코드가 늘 수 있습니다.
컴파일 시간특화 코드 생성은 컴파일 시간을 늘릴 수 있습니다.
트레이트 객체동적 디스패치가 필요할 때는 trait object를 고려합니다.