4

做一些語言如Ruby(如果運行MRI,我的意思是不編譯爲字節代碼)每次執行時(例如,方法或循環體的執行)都需要執行實際分析?我的意思是,執行一個循環,你需要解析它的身體N次?語言被解釋爲什麼意味着什麼?

我一直認爲,所有這些方案都被解析一次在引導,轉化在'強類型的陳述樹等,是不是真的?

回答

4

我就被現在的意思,並說,幾乎所有的編程語言解釋,無論是軟件(紅寶石,Python和Java的)或硬件(C,C++)解釋:)

對於一個真正的答案,雖然我不知道內部的Ruby實現,但我確信他們不會一遍一遍地解析語句。雖然在原始實現中沒有使用字節碼(或者它們已經遷移了嗎?),但它們使用了一些中間表示(當您想爲其編寫C-extensions時可以很好地看到它),因此只需重複執行那些代碼即可。

+0

「他們使用一些中間表示(你可以很好地看到它時,你想要寫C-擴展它)」 - 假設它被保存在內存中,那會是什麼表現看起來很相像? – Bubba88 2010-05-13 12:08:01

+0

對於用C編寫的原始實現,它是一系列名爲「VALUE」的結構。這裏有一點洞察:http://www.rubyinside.com/how-to-create-a-ruby-extension-in-c-in-under-5-minutes-100.html – LukeN 2010-05-13 12:09:26

+0

「雖然不使用字節碼在原來的實現(或者他們已經遷移了嗎?)「官方的ruby解釋器從版本1.9開始使用字節碼。 – sepp2k 2010-05-13 12:45:35

4

解釋是一個定義非常鬆散的詞。即使機器代碼指令也被處理器解釋。

一般要區分它們運行之前被編譯不具有編譯過程,並另一個程序中運行的語言和語言之間進行,被稱爲解釋。後一種語言通常被稱爲interpreted languages

線不是清楚在一些情況下:

  • 某些語言既可以編譯或解釋,例如PHP。
  • 某些解釋代碼可能會在運行時編譯爲本地機器指令(JIT compilation)。
  • 某些編譯語言可能具有exec功能,該功能允許在運行時生成和執行代碼,繞過正常的編譯過程。