Lisp(Clojure)和Tcl如何在抽象和元编程能力方面进行比较?

Sta*_*ked 9 lisp tcl clojure

两者似乎都有助于构建可扩展的API和代码生成.

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

你认为他们的优点,缺点是什么......

mik*_*era 13

免责声明:如果我歪曲任何东西,我对Clojure比Tcl更熟悉任何Tclers的牧师.不过这里有一些我一般都知道的观点:

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

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

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

  • 作为一个反补贴点,我注意到如果你可以将实际工作提升到Tcl的C实现中,那么Tcl代码将比JVM代码更快.在Tcl中执行I/O要比在任何基于JVM的系统(其中异步IO仍然*受限制)中更容易. (2认同)
  • 另外,s-exprs没有那么大的优势:Tcl使用`list`来获得大致相同的效果(列表是可评估的无替换命令,这非常有用). (2认同)

use*_*608 8

我认为迈克拉的答案非常好.

我只想补充说,在clojure元编程往往集中在宏,一个没有同行的大型统一元编程解决方案,tcl有几个小的尖锐工具可用于元编程,其中有"未知"命令,可以用来做各种各样的漂亮的技巧.同样有趣的是,尽管clojure只有少量的关键字或"特殊形式",但tcl实际上没有,这使得tcl成为自己的dsl,并且可以改变(或扩展)任何命令的行为.

有一点我不同意mikera的答案是关于clojure的语法更易于进行元编程的部分.对我来说,一个令人不快的惊喜是,实际上,在clojure中有多少句法变异,()[] {}""^ {}#'的各种用法:关键......以及开启和关闭.我完全理解这种类型的语法糖的理由,但实际上我发现tcl的语法更容易处理"火腿"元编程和代码生成.tcl的"一切都是字符串"本质增加了简洁性.

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

我完全同意迈克拉的结论.