2011-04-21 74 views

回答

1

我可以立即看到的最重要的問題; Arc具有真正的tail-call優化,clojure並不是因爲JVM的限制。 AFAIK,這意味着您必須放棄至少能夠直接調用Arc函數作爲JVM方法,並且您不能將Arc函數直接映射到Clojure函數,這可能意味着您會失去一些性能。

可能意味着您無法使用普通clojure輕鬆創建Arc編譯/高效版本。另一方面,如果你知道自己在做什麼,「玩具」解釋器不應該太難。

+2

沒有什麼能夠阻止Clojure中的Arc實現以與重現工作相同的方式自動消除尾遞歸調用。同樣,在一般情況下,類似的自動轉換可以針對蹦牀。 – fogus 2011-04-21 17:04:46

+2

是的,但據我瞭解這個問題,你必須「蹦牀」每一個不是自遞歸的尾部呼叫才能提供與Arc相同的保證。這意味着你必須使用無處不在的延續。這當然可以完成,但是clojure沒有使用它。 – 2011-04-21 17:13:11

1

在Clojure中植入Arc編譯器,雖然將其編譯爲JVM字節碼,但由於上面討論的TCO問題,它可能更難以理解。僅僅因爲它是用Clojure編寫的,並不意味着它需要針對JVM。

另一方面,弧解釋器將是非常合理的。

相關問題