[好奇] 为什么logseq、roam research等web app都选择了clojure

发现logseq、roam research都是用clojure开发的,出于好奇略微研究了下,发现:

  1. 大多数开发者都使用Clojure来开发网页应用
  2. 大多数Clojure团队成员只有1到10位

这么看来,似乎很适合初创项目。也看到有人说全栈 clojure 项目很快功能就会迭代上来,不知原因为何?

另外,很好奇Clojure这样的函数式编程语言(FP)能够开发多大体量的项目。个人主要用python开发,elisp水平仅限读懂及写一些简单的功能。思维逻辑也更贴近python。依我浅见,很多FP语言大多是写几个模块,似乎很少看到工程级别的应用。如果情况不属实,请说明FP中的重量级项目有哪些。如果属实,是什么造成了这种情况?

突然想到,emacs是不是应该算是FP实现?

2 个赞

当年 twitter 开源的流处理框架 storm 是用 clojure 开发的,也算证明过自己了。

现在感觉更像是纯JAVA项目啊……

image

所以说的是当年,后面估计是被阿里的人用java改写了

以 Clojure 做为技术选型上过生产线而且自认为相对成功。Clojure 的落地能力很强,我用了很长时间之后发现他有三个特点能起化学反应:

  1. 自底向上:以库为基础,而不是框架
  2. 生态丰富:运行在 JVM 和 JavaScript
  3. 抽象共识:同样的概念在不同的库里有相同的结构(社区风气)

效果就是你可以把大量已有的东西,用非常契合的方式组合起来,用不断向上抽象的方式来构建应用。加上 Clojure 的 REPL 还有 Emacs 的插件 Cider 黑科技超多,这样搞的结果就是开发的后劲很足,迭代滚雪球的感觉很明显。

Clojure 在表达力和编译期严谨(静态类型等等)上面完全选择了表达力,Clojure 没有内置什么用来做约束的东西,对于工程来讲是不小的难点。

还有就是有些人会总盯着有没有尾递归优化,有没有卫生宏,语法符合不符合审美,甚至有没有 cons 之类的,来评价一个语言好坏,这个我也不知道怎么回复。

7 个赞

我是个Clojure业余爱好者,我现在还不知道Clojure怎么引入静态类型
在REPL上的写错的话,报错的信息一大堆

  1. 社区不推荐引入静态类型。
  2. 报错信息其实就是异常栈,活用 cider 异常栈筛选的功能。

抽象共识让使用新的库的代价变得很少,不需要详细阅读一大堆文档真的很棒!

1 个赞

我是否可以理解为Clojure会被编译为JVM的字节码,或者通过ClojureScript编译为JavaScript,可以用Clojure的语法直接使用JAVA和JS的库?那么学习Clojure要求JAVA或JS达到什么水平呢?

如果单单只写代码的话只看的懂就行,但是现实不可能情况这么简单。所以实际需要对 Java 或 JavaScript 比较熟练才行,不要企图通过 Clojure 去绕过它的宿主语言。

2 个赞

最近用Clojure和ClojureScript写了不少应用,确实效率很高。