Clojure的优势

Clojure的优势,clojure,Clojure,有人能指出Clojure的优点吗?它适合什么类型的应用程序 我不打算将它与任何语言进行比较。作为一种语言,它适合什么?我的目的是了解适合于正确工作的正确工具,以及clojure在这种情况下的适用性。一般来说,我认为clojure的优点(没有特定顺序): 1) REPL将以交互方式进行尝试 2) 默认情况下,所有内容都是不可变的,可变性有几个精心选择的标准模式,可以在多线程环境中以安全的方式修改状态 3) 尾部递归是显式的。在JVM上适当支持尾部递归之前,这可能是最好的折衷方案 4) 非常有表现力

有人能指出Clojure的优点吗?它适合什么类型的应用程序


我不打算将它与任何语言进行比较。作为一种语言,它适合什么?我的目的是了解适合于正确工作的正确工具,以及clojure在这种情况下的适用性。

一般来说,我认为clojure的优点(没有特定顺序):

1) REPL将以交互方式进行尝试

2) 默认情况下,所有内容都是不可变的,可变性有几个精心选择的标准模式,可以在多线程环境中以安全的方式修改状态

3) 尾部递归是显式的。在JVM上适当支持尾部递归之前,这可能是最好的折衷方案

4) 非常有表现力的语言,支持功能性方法而不是命令式方法

5) 与Java平台的良好集成,使混合使用Java库变得轻松

6) Leiningen与clojars站点一起作为构建和依赖关系管理工具

好的,第6点与语言perse无关,但肯定与我使用它的乐趣有关

关于应用程序,它的目标是多线程应用程序,但现在的情况可能意味着任何事情,因为在任何地方,人们都试图在用户等待时让所有核心保持忙碌。另一方面,显然很多人使用它部署到谷歌应用程序引擎,这是一个单线程的

在我(有限的)实现数据转换和计算的经验中,函数方法非常有效。其中信息和事件可以通过应用程序“流式传输”。Web应用主要属于这一类,我们将请求“转换”为“响应”

但我仍然必须在实际的生产代码中使用它。目前我将其用于个人项目和原型/基准测试工作。

优点:

  • 函数式编程的所有好处,没有纯粹的束缚
  • lispy:允许动态、紧凑的代码和后期绑定、宏、多方法
  • Java互操作性
  • 可以将函数编码为序列抽象,而不是特定的数据结构
  • 并发特性:功能数据结构、软件事务内存
  • 在JVM上运行:可移植性和快速垃圾收集
适用于:

  • 自下而上设计
  • 嵌入式语言
  • 高并发应用程序
可能不适合:

  • 需要静态键入的情况
  • 如果您希望语言能够接受静态分析
  • 任何需要快速启动的东西
  • 一群不知所措的爪哇猴子

与什么相比,clojure的优势是什么?共同清单?计划?Java?@sepp2k:你可能是说普通的LISP@Max:是的,当然有。现在编辑太晚了:-(我们可以在这里添加主观标记吗?关于强类型-到目前为止,我在Clojure 1.2中使用类型提示取得了不错的效果。我认为如果你真的愿意,通过明智的使用,你可以获得强类型的大部分好处……这是一篇老文章,但只是说强类型不仅仅是为了性能。毕竟是最新的Javascript VM在没有静态类型或类型提示的情况下快速。它们在执行时推断类型并相应地重新编译代码。强大的类型优势是更好的工具支持。编译器发现许多明显的错误,IDE提供辅助重构。在检查代码时,您可以轻松找到函数的所有调用方,接口的所有实现…主要问题lem更冗长,更少泛型。我喜欢“一群无知的爪哇猴子”这一部分。Clojure不是强类型吗?弱类型意味着可以使用(+1'a),而强类型则不允许。你的意思是说“需要静态类型的情况吗?@Yechiel:是的,这会是更好的措辞,我会更改它。