2013-11-23 24 views
2

我知道一些解釋性編程語言(PHP,Python,Java,Smalltalk)正在使用Bytecode作爲執行代碼的中間步驟。不同編程語言的字節碼差異

不同的語言解釋器生成的Bytecode形式有什麼區別,就像不同機器上的Assembly操作碼之間的區別?

另外,可以肯定的是,Bytecode只能用於解釋型語言,對吧?

回答

3

字節碼是由虛擬機執行的指令的通用字,與機器語言是由真實處理器執行的指令的通用術語相同。就像有很多不同的機器指令集一樣,有許多不同的字節碼指令集。一些像Java字節碼一樣是平臺的文檔化部分。按照定義,所有Java虛擬機都執行完全相同的字節碼。其他只是一個實現細節,每個版本都有所不同。

要回答你的最後一個問題:不,那是不正確的。 Java不是一種解釋型語言;它是及時編譯的。 C#是類似的。字節碼可以是許多不同體系結構的一部分。

+0

那麼,實際答案是肯定的? Java字節碼與Python字節碼不同?這些流行語言之間的差異是否顯着? – Reflection

+1

是的,他們是完全不同的。如果有任何相似之處,幾乎沒有。 –

1

正如Ernest所說,它是由不同語言的供應商提供的字節碼實現。雖然已經嘗試標準化字節碼。在微軟的解決方案中找到了合適的解決方案CIL

值得一提LLVM編譯器將成爲不同的字節碼的粘合劑,爲任何CPU指令集提供優化編譯。

+1

CIL不只是一個.NET特定的字節碼嗎?與Java的JIT字節碼相比,它的標準化嘗試是什麼? – Reflection

+0

是的,它是低層次的.NET,也看看這個線程http://stackoverflow.com/questions/95163/differences-between-msil-and-java-bytecode –