컴파일 타임 함수 실행컴파일 타임 함수 실행(Compile-time function execution) 또는 컴파일 타임 함수 평가는 일반적으로 함수를 기계어로 컴파일하고 런타임 시에 실행시키는 컴파일러가 컴파일 타임에 함수를 실행시키는 것이다. 이것은 함수의 인자들이 컴파일 타임에 알려지고 함수가 전역 상태(순수 함수)를 수정하려는 시도를 하지 않을 때 가능하다. 단지 몇몇 인자들만 알게 되더라도 어느 정도의 컴파일 타임 함수 실행을 할 수 있으며, 아무 인자들도 알려지지 않았을 때보다는 더 최적화된 코드를 만들 수 있다. 예시리스프 매크로 시스템은 사용자 정의된 함수들의 컴파일 타임 평가를 사용하는 초기의 예시이다. C++의 메타코드 확장 (Vandevoorde 2003)[1]은 컴파일 타임 함수 평가(CTFE)과 C++ 템플릿 메타프로그래밍을 위한 개선된 문법으로서 코드 인젝션을 허용하는 실험적인 초기의 시스템이었다. 초기 버전의 C++에서, 템플릿 메타프로그래밍은 종종 다음과 같이 컴파일 타임에 값들을 계산하기 위해 사용되었다. template <int N> struct Factorial {
enum {
value = N * Factorial<N - 1>::value
};
};
template <> struct Factorial<0> {
enum { value = 1 };
};
// Factorial<4>::value == 24
// Factorial<0>::value == 1
void foo() {
int x = Factorial<0>::value; // == 1
int y = Factorial<4>::value; // == 24
}
컴파일 타임 함수 평가를 사용함으로써, 계승(factorial)을 계산하는데 사용되는 코드는 C++11 constexpr을 사용하는 런타임 평가를 위해 쓰는 것과 비슷할 것이다. #include <stdio.h>
constexpr int factorial(int n) {
return n ? (n * factorial(n - 1)) : 1;
}
constexpr int f10 = factorial(10);
int main() {
printf("%d\n", f10);
return 0;
}
C++11에서, 이 기법은 일반화된 상수 표현( 각주
외부 링크 |
Portal di Ensiklopedia Dunia