我已經爲JavaScript編寫了一個複雜的數學庫,它具有從人類可讀的數學表達式字符串中生成函數的功能。有沒有辦法在C++中實現相當於運行時生成的函數?有沒有什麼方法可以在運行時編譯C++代碼?
回答
FUZxxl的回答是對的,我建議看看Clang/LLVM設施。
有一個基本的(不太有用)教程file here。以及編寫您的Language on LLVM的廣泛教程。您可以將您生成的庫加載到C++應用程序中。
除非,你有一個性能的關鍵組件,可以採用使用ChaiScript的(注:我在沒有辦法隸屬於它或作者)
感謝您的有用鏈接,我會衡量我的選擇。是的,組件將是性能至關重要的。我移植圖書館的原因是因爲我想提高分形生成程序的速度。 –
您可以執行C++編譯器,讓它生成共享庫並將其加載到程序中以在運行時運行C++代碼。請注意,詳細信息取決於您正在使用的平臺,因爲Windows和POSIX具有加載共享庫的不同機制。
的「編譯語言的方式」是定義你的語法,構建一個解析器,一個AST(抽象語法樹)並解釋/編譯它。當你這樣做時,你基本上是編寫你自己的編譯器/解釋器,這很有趣。如果你想讓它輕鬆工作,你可以看看增強的精神。
感謝您的建議,但不幸的是,我想編譯的字符串在運行時纔會知道,因爲我期望它們來自用戶輸入。我不認爲口譯員的表現足夠滿足我的需求。 –
- 1. 有什麼方法可以將Visual C++代碼編譯到Android?
- 2. 有沒有一種方法可以使用我的C#代碼編譯Javascript?
- 3. 代碼沒有運行但編譯?
- 4. 有沒有什麼辦法可以編寫簡潔的代碼?
- 5. 有沒有什麼辦法可以防止EventListener在執行時執行代碼?
- 6. 有沒有什麼方法可以縮短這個代碼呢?
- 7. 這段代碼爲什麼編譯,但運行時有ClassNotFoundException?
- 8. 有沒有什麼辦法可以在eclipse中編譯GnuTLS?
- 9. 編譯代碼和可執行代碼有什麼區別?
- 10. inno setup編譯器沒有運行我的C/C++代碼
- 11. 編譯現有的C++代碼以在DOS中運行
- 12. 在運行時編譯JUnit測試:「沒有可運行的方法」
- 13. 有沒有一種方法可以在運行時指定方法c#
- 14. 有沒有什麼方法可以查詢數據庫,而無需編寫代碼並運行應用程序
- 15. 有沒有什麼辦法可以「預編譯」Rails中的Markdown?
- 16. ASP.NET MVC 5 - @ C#代碼沒有在運行時被翻譯
- 17. 有什麼地方可以交互地運行Dart代碼嗎?
- 18. 有沒有辦法在運行時用C代碼獲取源代碼行號?
- 19. 在運行時編譯運行代碼
- 20. 有沒有什麼方法可以編譯和運行程序作爲big endian在小端PC?
- 21. C結構代碼編譯但沒有運行
- 22. 有什麼方法可以優化此C#代碼?
- 23. 有什麼方法可以結合這個C#代碼嗎?
- 24. 有什麼方法可以找出硒是否在使用代碼運行?
- 25. 是否有可能編譯運行時沒有運行庫lib的代碼?怎麼樣?
- 26. 爲什麼下面的C代碼編譯沒有錯誤?
- 27. 爲什麼我的C代碼沒有被編譯爲EXE
- 28. 有沒有辦法在撤銷方法時看到執行什麼代碼?
- 29. MySQL ODBC在C#.NET項目中失敗,但沒有運行時編譯代碼
- 30. 有沒有一種方法可以在Twig模板中編寫多行代碼?
請限制它爲C或C++,否則它有點寬泛。 – fuz
@FUZxxl在那裏,它是固定的。 –
你可以調用編譯器;)。說真的,我認爲LLVM人員在某些時候做了一些C++ JIT工作,你可以看看(雖然我可能記錯了)。 –