2009-05-20 104 views

回答

33

幾乎沒有口譯員真的直接解釋代碼 - 它的效率太低了。幾乎所有的解釋器都使用一些可以輕鬆執行的中間表示。此外,可以對此中間代碼執行小型優化。

Python還存儲了這個代碼,這對下次執行代碼具有巨大的優勢:Python不必再解析代碼;解析是編譯過程中最慢的部分。因此,字節碼錶示相當大地減少了執行開銷。

+1

即使我的TRS-80上的舊MS BASIC使用了一種非常簡單的編碼方案:只要我輸入或編輯了一行,BASIC關鍵字就被摺疊爲單個字節。 – 2009-07-27 17:46:39

+1

@DavidThornley:1980年代的許多計算機都使用MS-Basic的衍生產品,它將關鍵字轉換爲記號,但是保留了文本形式的數字和變量名稱,因此必須計算它們的值或在運行時查看它們。 Atari BASIC做了更多的處理,建立一個變量表並用索引替換它們的名字。它還將數字轉換爲BCD浮點數。只有字符串文字和評論被存儲爲文本。這樣的事情可能會讓Atari BASIC超越其他,除了每行的編號被存儲爲二進制,但GOTO的目標...... – supercat 2014-01-29 16:59:52

+1

...被存儲爲BCD浮點,所以每個GOTO都需要一個BCD到二進制的轉換。不過,有趣的是,Atari BASIC的作者將程序轉換爲解析表示,而不是簡單地用關鍵詞替換關鍵詞。 – supercat 2014-01-29 17:01:34

7

因爲直接從字節碼解釋更快。首先,它避免了需要進行練習。

8

因爲您可以編譯爲.pyc一次並從中解釋很多次。

因此,如果您多次運行腳本,只會產生一次解析源代碼的開銷。

6

一遍又一遍地重新解析和分析源代碼,而不是僅僅執行一次(通常在第一個import上),顯然是一個愚蠢和毫無意義的浪費。

-1

我非常懷疑,原因是性能,儘管這是一個很好的副作用。我會說,認爲圍繞某種高級彙編語言構建的虛擬機比在某些源代碼字符串中查找和替換文本更實用是很自然的。

編輯:

好了,顯然,誰沒有把在我的崗位-1票不留一個合理的評論,說明知之甚少虛擬機(運行時環境)。

http://channel9.msdn.com/shows/Going+Deep/Expert-to-Expert-Erik-Meijer-and-Lars-Bak-Inside-V8-A-Javascript-Virtual-Machine/

2

雖然有一個小的效率方面是它(可以字節碼存儲在磁盤上或在存儲器中),其主要是工程:它允許分開解釋解析。解析器通常是令人討厭的生物,充滿了邊緣情況,不得不遵守隱祕的規則,比如只使用適量的預測和解決移位減少問題。相比之下,解釋非常簡單:它只是一個使用字節碼操作碼的大開關語句。

相關問題