【问题标题】:Could Arc be implemented over Clojure?Arc 可以在 Clojure 上实现吗?
【发布时间】:2011-08-10 10:47:00
【问题描述】:

我已经阅读了很多关于 Arc 的内容,它似乎提供了一些好东西。由于 Arc 是一个 lisp 而 Clojure 是一个 Lisp 我想知道 Arc 是否可以在 Clojure 之上实现?

【问题讨论】:

    标签: clojure arc-lisp


    【解决方案1】:

    我可以立即看到的最重要的问题; Arc 有真正的尾调用优化,而 clojure 没有,因为 JVM 限制。 AFAIK,这意味着您至少必须放弃将 Arc 函数作为 JVM 方法直接调用的能力,而且您不能将 Arc 函数直接映射到 Clojure 函数,这可能意味着您会损失一些性能。

    可能意味着您将无法使用普通的 clojure 轻松创建 Arc 的编译/高效版本。另一方面,如果您知道自己在做什么,那么“玩具”解释器应该不会太难。

    【讨论】:

    • 没有什么可以阻止 Clojure 中的 Arc 实现以与 recur 相同的方式自动消除尾递归调用。同样,在一般情况下,类似的自动转换可以针对蹦床。
    • 是的,但据我了解这个问题,您必须“蹦床”每个非自递归的尾调用,以提供与 Arc 相同的保证。这意味着您必须在任何地方使用延续传递。这当然可以做到,但 clojure 不使用它是有原因的。
    【解决方案2】:

    在 Clojure 中实现 Arc 编译器听起来很有趣,尽管由于上面讨论的 TCO 问题,将其编译为 JVM 字节码可能有点困难。仅仅因为它是用 Clojure 编写的,并不意味着它需要针对 JVM。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-14
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      相关资源
      最近更新 更多