2011-04-21 47 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。

另一方面,弧解释器将是非常合理的。

相关问题