Lisp, Tcl, Perl 등과 같이 런타임 중에 코드 내에서 lambda/proc/sub를 쉽게 정의하고 평가할 수있는 해석 언어가 있습니다 그것은 같은 세션 내에서.필요에 따라 함수를 어셈블하고 빠르게 계산하기
해석 된 것보다 훨씬 빠르게 실행되는 C++와 같은 컴파일 된 언어가 있지만 런타임 중에 컴파일 된 프로그램 내에서 함수를 정의하고 실행하면 쉽지 않습니다.
런타임시 함수를 정의 : 예를 들어, 초기의 입력 데이터에 기초하여 데이터의 분석 모델을 도출
여기서 문제는 다음과 같이한다.
예를 들어 들어오는 데이터를 분석하기 위해 파생 된 분석 모델을 적용하는 것과 같이 반복적으로 위 기능을 실행하십시오. 내가 본
하나의 해결책은 아주 예쁜하지 않았다 :
분석적 모델을 나타내는 절차는 초기 입력 데이터를 기반으로 임베디드 티클에서 파생되었다.
룩업 테이블은 낙천적으로 말하면 적용 범위를 포괄하는 샘플 포인트 배열에 대해 Tcl의 절차를 평가함으로써 만들어졌습니다.
조회 테이블이 Tcl 인터프리터에서 이진 (C++에서 개발 됨)으로 다시 전달되었습니다.
그런 다음 들어오는 데이터는 찾아보기 테이블의 "close enough"값 사이를 보간하여 분석되었습니다.
위의 해결 방법은 효과적이지만 개념적이며 계산적인 문제가 있습니다. 따라서 질문 : C++ 내에서 함수를 순전히 정의하고 동일한 런타임 세션 내에서 실행 가능하게 할 수 있습니까?
개념적으로 말하자면, 문자열로 함수를 만들고, 메모리에 컴파일하고, 실행중인 바이너리로 연결하는 등의 작업을 수행 할 수 있습니까?
많은 효율적인 Lisp 컴파일러가 있습니다. .NET 및 JVM과 같은 JIT로 컴파일 된 VM이 있습니다. 임베딩 가능한 C 컴파일러 (tcc, clang)가 있습니다. 또한 강력한 최적화 컴파일러의 모든 이점을 통해 LLVM IR을 직접 생성하는 것이 매우 쉽습니다. –
심지어 C++ 인터프리터도 널리 사용됩니다 (CINT 및 ROOT 참조). –