【问题标题】:How do Lisp (Clojure) and Tcl compare in terms of abstraction and metaprogramming abilities?Lisp (Clojure) 和 Tcl 在抽象和元编程能力方面如何比较?
【发布时间】:2011-04-27 18:58:25
【问题描述】:

两者似乎都适合构建可扩展的 API 和代码生成。

它们之间的主要区别是什么?

您认为他们的优势、劣势、...

【问题讨论】:

    标签: clojure lisp tcl


    【解决方案1】:

    免责声明:我对 Clojure 比对 Tcl 更熟悉,所以如果我歪曲任何内容,我向任何 Tclers 道歉。然而,这里有一些我通常知道的点:

    • 两者都非常灵活 - 您可以使用元编程在运行时生成和执行几乎任何您喜欢的代码。
    • Clojure 是一种 JVM 语言,而 Tcl 是相对独立的。
      • 在 JVM 上的优势包括能够为 Java 和 Scala 等其他 JVM 语言的库生成可互操作的代码并充当 DSL。您还可以访问大量 Java 库。
      • 在 JVM 上的缺点是启动时间相对较长。因此,对于运行时间较长的服务器应用程序,您可能更喜欢 Clojure,而不是需要快速执行的命令行工具。
    • Clojure 元编程将编译为本机代码(通过 JVM 中的 JIT)。将取决于您的应用程序,但我预计在大多数情况下这将比 Tcl 执行得更快
    • 这两种语言都是动态的(平均而言,元编程是一件好事!)并支持函数式编程
    • Clojure 包含一些对元编程非常有用的有趣抽象 - 特别是对序列的大量语言内支持
    • 我个人认为 Lisp 语法的简单性对于元编程来说是一个很大的优势 - 当只需要担心一个语法结构(s 表达式)时,生成代码会容易得多。 .

    平均而言,两种语言都非常适合元编程,但如果我在两者之间进行选择:

    • 如果我正在构建服务器端应用程序,或者我特别需要 JVM 互操作性,我会选择 Clojure
    • 如果我想要一个用于在命令行管理脚本/工具的 DSL,我会选择 Tcl

    【讨论】:

    • JVM上有一个Tcl版本(Jaclsourceforge.net/projects/tcljava或Jtcljtcl.kenai.com)。 Tcl'ers wiki 上关于 Tcl 和 Lisp 的页面也可能很有趣:wiki.tcl.tk/13410
    • 作为一个反驳点,我注意到如果你可以将真正的工作提升到 Tcl 的 C 实现中,Tcl 代码将比 JVM 代码运行得更快。在 Tcl 中进行 I/O 比在任何基于 JVM 的系统中(异步 IO仍然该死的有限)要容易得多。
    • 另外,s-exprs 的优势并不大:Tcl 使用list 的效果大致相同(列表是可评估的无替换命令,非常有用)。
    • 感谢您分享您的见解。
    【解决方案2】:

    我认为 mikera 的回答非常好。

    我只想补充一点,在 clojure 元编程倾向于关注宏的地方,一个没有对等的大统一元编程解决方案,tcl 有几个可用于元编程的小工具,其中“未知”命令可用于各种漂亮的技巧。同样有趣的是,尽管 clojure 只有少量关键字或“特殊形式”,但 tcl 实际上没有,这使得 tcl 成为自己的 dsl,并且可以更改(或扩展)任何命令的行为。

    mikera 的回答中我必须不同意的一件事是关于 clojure 的语法更适合元编程的部分。使用 clojure 时对我来说令人不快的惊喜之一实际上是 clojure 中有多少句法变化,以及 () [] {} "" ^{} #' :key ... 等等的各种用法。我完全理解这种语法糖的合理性,但实际上我发现 tcl 的语法更容易处理“笨拙”的元编程和代码生成。并且 tcl 的“一切都是字符串”的性质增加了简单性。

    至于多处理能力、不可变数据结构、纯函数性质以及许多其他 clojure 的独特之处,在 tcl 中确实没有可比性。

    我完全同意 mikera 的结论。

    【讨论】:

      猜你喜欢
      • 2014-08-08
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2011-06-03
      相关资源
      最近更新 更多