2014-01-16 5 views
4

응용 프로그램을 만들고 있는데 ExecutionEngine을 사용하여 llvm 비트 코드를로드하고 실행하고 싶습니다. 지금까지 clang을 통해 컴파일 된 정말 간단한 C 코드로이 작업을 수행했습니다.llvm에서 관리되는 언어의 코드를 실행할 수 있습니까?

제가 생각하기에이 프로젝트에 llvm을 사용하면 말보다 더 많은 언어에 몰입 할 수 있습니다. 특별히 lua/python/javascript를 선택하는 것입니다. 그러나 GC와 같은 리소스가있는 플랫폼에 묶인 경우가 많기 때문에 관리 언어 또는 스크립팅 언어에서 이것이 어떻게 작동하는지 혼란 스럽습니다. 따라서 ExecutionEngine을 통해 실제로 어떻게 작동하는지 확신 할 수 없습니다.

예를 들어, 사용자가 내 응용 프로그램에서 실행되는 일부 파이썬 코드를 작성하려고한다고 가정합니다. 그런 다음 Python 코드를 나타내는 비트 코드를 전달하여 llvm의 ExecutionEngine을 사용하여 내 C++ 응용 프로그램에서 실행하도록합니다.

이것이 가능합니까? 파이썬을 단순히 비트 코드로 컴파일 한 다음 나중에 ExecutionEngine을 사용하여 실행할 수 있습니까? 그렇지 않다면 왜 이해해야하는지 알 필요가 있습니까?

+1

이 경우 LLVM은 단순한'dlopen'과 다르지 않습니다. –

+0

파이썬은 GC를 포함하여 실행해야하는 모든 것을 비트 코드에 컴파일해야할까요? 그럴 수 있니? 실제로 그렇게합니까? –

+0

파이썬 (또는 다른 언어)을 LLVM 비트 코드로 컴파일하는 데 기술적 인 장애물이 없습니다. 기존 컴파일러가있을 가능성은 거의 없습니다. – delnan

답변

0

일부 읽기 및 일부 대화 후에 나는 대답은 ExecutionEngine이 본질적으로 C 코드 인 것처럼 코드를 실행한다는 것입니다. 즉, llvm의 lua/python/javascript 코드 ontop을 실행하려면 해당 런타임의 비트 코드를 실제로 보내야합니다. 그런 다음 런타임은 평상시처럼 스크립트를 구문 분석하고 실행할 수 있습니다.

내가 알고있는 한,이 런 타임에는 스크립트를 llvm 비트 코드로 직접 컴파일 할 수있는 기능이 없습니다.

관련 문제