我會問一個關於編譯器的問題,特別是他們如何工作。我相信編譯器總是會編譯成相同的機器代碼,用於編寫不同語法但代碼相同的代碼。這是真的?功能相似的代碼是否被編譯爲相同的結果,而不管語法上的差異?有效的編譯器每次都會編譯完全相同的結果嗎?
例如:
int number = 2;
將編譯爲同樣的事情:
int number;
number = 2;
或
while True:
將是相同的(我在這裏使用python作爲例子):
while 1:
我對.net編譯器和解釋器特別感興趣。 JIT編譯器每次「及時」編譯相同的東西嗎?像Python解釋器這樣的解釋器每次都「解釋」代碼代碼完全一樣嗎?
謝謝!
兩個for循環怎麼樣? – 2012-03-21 00:47:00
你是什麼意思,「做同樣的事情?」最後兩個循環實際上做了不同的事情,因爲即使它們循環五次,循環中的每個循環的值也都不相同。 – templatetypedef 2012-03-21 00:47:45
在某些情況下,'for(int i = 0; i <5; i ++)'可能會被編譯成與'for(int i = 1; i <= 5; i ++)'相同的目標代碼,但是一般情況下你*不希望它,因爲'我'會有不同的值範圍。如果在循環內部使用'i',那麼這種差異就很重要。 – 2012-03-21 00:49:14