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

Lisp(Clojure)和Tcl在抽象和元编程能力方面有何比较?,clojure,lisp,tcl,Clojure,Lisp,Tcl,两者似乎都有利于构建可扩展API和代码生成 它们之间的主要区别是什么 免责声明:我比Tcl更熟悉Clojure,因此,如果我有任何失实陈述,请向任何Tcl用户道歉。不过,我大体上知道以下几点: 两者都非常灵活-您可以使用元编程在运行时生成和执行几乎任何您喜欢的代码 Clojure是一种JVM语言,而Tcl是相对独立的。 使用JVM的优点包括能够为其他JVM语言(如Java和Scala)中的库生成可互操作的代码并充当DSL。您还可以访问大量的Java库 使用JVM的缺点是启动时间相对较长。因此

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

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


免责声明:我比Tcl更熟悉Clojure,因此,如果我有任何失实陈述,请向任何Tcl用户道歉。不过,我大体上知道以下几点:

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

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

    • 我认为米凯拉的回答非常好

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

      mikera的回答中有一点我不同意,那就是clojure的语法更适合元编程。当我来到clojure时,一个令人不快的惊喜是,clojure中有多少语法变化,使用了()[]{}“^{}#':key。。。不断地。我完全怀疑这种语法糖的合理性,但实际上我发现对于“笨拙”的元编程和代码生成来说,tcl的语法更容易处理。而tcl的“一切都是一个字符串”的特性更为简单

      至于多IT处理能力、不变的数据结构、纯粹的功能性以及clojure的许多其他特点,在tcl中确实没有可比性


      我非常同意米凯拉的结论

      JVM上有一个Tcl版本(Jacl或Jtcl)。Tcl'ers wiki上关于Tcl和Lisp的页面可能也很有趣:作为一个补充点,我要指出,如果您能够将实际工作提升到Tcl的C实现中,Tcl代码将比JVM代码运行得更快。而且,在Tcl中进行I/O比在任何基于JVM的系统(异步IO仍然非常有限)中都要容易得多。而且,s-EXPR并没有那么大的优势:Tcl使用
      list
      实现大致相同的效果(列表是可评估的无替换命令,非常有用)。感谢分享您的见解。