我想先從感謝所有那些回答了Compiling multiple languages together我剛纔的問題。現在我想知道是否可以將多種語言編譯在一起,以便它們可以在不同的平臺上運行。編譯多種語言在一起,使他們在不同的平臺上運行
回答
我認爲,不管你是編譯的一種或多種語言,回答你的編譯代碼將在不同平臺上運行是否依賴於虛擬機的存在,如JVM(Java虛擬機)或CLR(公共語言運行時),可以解釋指令並在不同的平臺上執行它們。由於不同的機器體系結構支持不同的指令集(這裏的指令集是指彙編),因此不可能將代碼編譯爲機器語言,以便它可以在不同的平臺上運行。正如你對最後一個問題的迴應所表明的那樣,多種語言將編譯成Java字節碼(例如),它可以鏈接在一起並在任何具有JVM的機器上運行。因爲有許多不同機器體系結構的JVM的實現,所以Java字節碼可以在任何這些體系結構上運行。
如果您編譯爲與機器無關的字節碼(或類似的東西),然後解釋每個目標機器上的字節碼,則這相對容易,因爲它與編譯多種語言以在單臺機器上運行相同。很多人已經解決了這個問題,以不同程度的解決方案。
如果你想編譯絕對機器代碼,你必須包括對每臺機器將運行在機器代碼,然後爲每個目標機器加載器必須知道如何選擇合適的機器代碼。
蘋果試圖與「胖二進制」,在未來的日子時的PowerPC Mac和Mac電腦68K不得不和平共處。它的工作,但它不完全是一個嚎叫的成功。
是的,可以一起編譯多種語言,以便它們可以在多個平臺上工作。有幾個方法:
虛擬機
Scala和Java都編譯到JVM,它運行在多種平臺。另一個例子是.NET,它包含許多種語言,可以通過Mono Project在Windows或Linux上運行。
脂肪的二進制文件
一些文件格式是基於不同的平臺上運行fat binaries。 Apple曾兩次使用它們在硬件實現之間進行轉換。
還有另外一種方法,我剛纔聽說過。
而是分發您的應用程序二進制的機器(或字節碼),你在「大多編譯」的形式分發,在編譯器的中間語言。只要所有語言的編譯器都使用通用中間表單,並且所有後端代碼生成器都使用該通用中間表單,則可以在目標上安裝所需的特定後端,然後分發中間體。
MacOberon使用該方法來同時靶向680X0和PowerPC MAC硬件。他們呼籲「苗條的二進制文件」。完全相同的「二進制」被分配給機器的任何一種風格,而後端通過生成適當的代碼基本上完成了編譯。有趣的是,這種方法並不比傳統方法慢很多,因爲從磁盤物理讀取「二進制」到存儲器中的成本絕對控制着應用程序的啓動時間。
- 1. 針對多種編程語言/平臺
- 2. 在同一種語言中使用CMake和多個編譯器
- 3. 編譯不同的語言在Eclipse上
- 4. 在AWS上編譯其他語言Lambda
- 5. Python如何成爲一種多平臺編程語言?
- 6. JNI編譯在不同的平臺
- 7. Roomba使用哪種平臺/語言?
- 8. 如何在Google協作平臺上支持不同的語言?
- 9. 編譯爲其他平臺
- 10. 每種主要語言和平臺的使用率是多少?
- 11. 翻譯爲多種語言
- 12. 運行時訪問AST的編程語言/平臺
- 13. asp.net是一種編譯語言嗎?
- 14. R是一種編譯語言嗎?
- 15. 如何在Android中使用多種語言,如多種語言
- 16. 什麼可以防止在不同的平臺上編譯的Linux發行版上運行二進制文件?
- 17. 一個源需要在多臺機器上進行不同的編譯
- 18. 我可以編譯Objective-C代碼以在多個平臺上運行嗎?
- 19. 有沒有一種語言可以單向翻譯成多種其他流行語言?
- 20. 哪種語言更適合跨平臺?
- 21. 如何爲該語言的某種語言編寫編譯器?
- 22. Android中的多語言和不同平臺支持
- 23. 他們如何爲同一個庫編寫不同的語言包裝?
- 24. 尋找免費/ oss多窗口文本編輯器(Perl +其他語言)查看/編輯同一文件的不同部分在同一時間(Windows平臺)
- 25. 在網站上的多語言翻譯
- 26. 將一種語言翻譯成另一種語言?
- 27. 標題在其他語言不翻譯
- 28. 兩種不同語言的相同圖像但不適用於其他語言
- 29. 如何在多種平臺上部署
- 30. 將多種語言帶入一個通用編譯器