2014-01-16 63 views
4

我在做一個應用程序,我想使用ExecutionEngine來加載和執行llvm位碼。我已經設法通過迄今爲止通過clang編譯的非常簡單的C代碼來做到這一點。llvm可以從託管語言執行代碼嗎?

我的想法是,如果我使用llvm這個項目,那麼它可能是更多的語言不可知論比說,特別是選擇lua/python/javascript。但是我很困惑這對管理或腳本語言如何工作,因爲它們經常與具有諸如GC之類的資源的平臺綁定。所以我不確定它是如何通過ExecutionEngine實際工作的。

因此,作爲一個示例場景,假設用戶想編寫一些在我的應用程序中運行的python代碼。然後我希望他們向我提供表示該Python代碼的位代碼,然後我將使用llvm的ExecutionEngine在我的C++應用程序中運行該代碼。

這可能嗎? python可以簡單地編譯成位碼,然後使用ExecutionEngine運行?如果不是,我需要知道什麼才能理解爲什麼不呢?

+1

在這種情況下,LLVM與單純的'dlopen'沒有任何區別。 –

+0

因此python將不得不將其運行所需的所有東西(包括GC)編譯到位代碼中?它可以做到這一點?它實際上是否這樣做? –

+0

編譯Python(或任何其他語言)到LLVM位代碼沒有技術障礙。這是不太可能有現有的編譯器。 – delnan

回答

0

經過一些閱讀和一些對話之後,我相信答案是ExecutionEngine本質上就像執行本機C代碼一樣執行代碼。這意味着如果你想在llvm上執行lua/python/javascript代碼,你需要實際發送該運行時的位碼。然後,運行時可以像往常一樣解析和執行腳本。

據我所知,這些運行時沒有能力直接將它們的腳本編譯成llvm bitcode(還)。

相關問題