1
在運行時需要引用符號(在R7RS中很小,如果很重要),是否存在Scheme中的任何情況?我正在研究編寫一個編譯器,並且如果運行時符號解引用不是必需的,那麼我會在編譯時執行它,因爲這更容易,可能效率更高。Scheme運行時符號解引用
舉個例子:
(define (fac n)
(if (> n 1)
(* n (f (- n 1)))
1))
; When I compile this, I know from the last line what fac is and can compile this as a direct call to my compiled function, fac.
(fac 5)
這可能不是問題,他打算像斯大林一樣編譯(處女方案,加載,執行,退出) – Sylwester 2014-10-20 20:28:25
我花了一段時間纔看到問題。它*是一個問題。所以運行時符號管理是必要的?在這一點上,編譯幾乎是毫無意義的,如果每個變量的引用都必須通過一個運行時庫,那麼對編譯進行解釋是否有任何好處? – Tyler 2014-10-21 03:44:36
@泰勒*變量*管理是必要的...你可能想澄清在q。正是你所說的「符號」管理的意思(Scheme沒有像一些Lisp那樣的動態符號查找)。以上隻影響頂級和其他環境中的變量,而編譯器無法證明它們永遠不會被修改 - 您可以在本地範圍或模塊中永久捕獲的任何內容都可爲優化提供充足的機會。正確捕獲算術運算符通常可以讓一個好的編譯器產生非常快的代碼。 – Leushenko 2014-10-21 04:47:30