为什么需要用 Clojure 来开发你的下一个微服务 已翻译 100%

odoo365 投递于 2016/07/16 11:08 (共 6 段, 翻译完成于 07-25)
阅读 7565
收藏 22
3
加载中

开发团队之所以选择将某些功能块作为微服务来实现是有很多原因的。我认为最重要的原因有:

  • 代码重用:多个团队可以利用你所构建的内容。例如,检索(search)、文件存储(file storage)或pub/sub。

  • 使用微服务可以独立于应用程序对功能进行扩展

  • 可以自由地进行技术选择

本文重点讨论以上三点。

自由地进行技术选择

这是属于微服务架构的一个非常重要的属性。微服务意味着每个服务都很小。至于有多小通常取决于公司或团队,但我听说有些微服务的代码不超过100行,还有些微服务有几千行代码(如果是Java代码,我仍然认为它很小)

既然微服务意味着每个服务都很小,所以鼓励开发人员可以使用他们认为的最好技术。如果事实证明那是很糟糕的选择,也没关系-我们就当学习了,并且会考虑将这些新知识用于未来的项目。既然微服务的代码多半只有几百行,所以有时开发团队甚至有可能决定用另一种更合适的语言重写微服务。

这都很好。但是既然可以完全自由地进行技术选择,那么为什么不选择Clojure呢?

昌伟兄
翻译于 2016/07/20 00:37
0

现代语言Lisp

"Lisp是用秘密的外星人技术开发的语言。" — lisperati.com

Clojure是运行在Java虚拟机上的现代Lisp语言。基于JVM有很多优点:

  • 经过数十年的人力投入,JVM的运行速度很快。

  • 在一个广泛的问题域中有非常多的功能强大的库。你只需集中精力去解决问题而无需一切从头开始。

  • JVM被广泛应用于一些小型和大型企业;应用JVM意味着开发的产品会被更多用户采用。

    所以说,JVM很好,并且我们也在使用着Java。那为什么还要转换语言呢?

是这样, Java具有它自己的一些折衷方式。但它缺少其它平台认为理所当然应该具有的功能 -比如lambdas,尽管Java 8已经对此进行了修正。Java的类型系统限制过多,并且其类型推断也不够理想。Java也没有数据结构形式,使其代码过度繁琐。

另外Java一般的开发反馈周期太长。为了运行、测试程序,在一天内可能需要多次重启JVM - 哪怕你只是修改一行代码  (HotSwap热部署补丁对此有所缓解)。由于所需的结构数量也仅仅是开始,因此实验变得很难。最后,交互式开发环境的缺乏也让人受不了。

昌伟兄
翻译于 2016/07/21 00:04
0

Lisp是什么样子的?

"Lisp不是一门语言,它是一种构建素材。" — Alan Kay

作为Lisp ,它非常灵活,采用一种固执的数据驱动编程方法,通过宏功能提供了最大的延展性。必须指出的是Lisp宏和其它的宏非常不同,比如说,C宏。C宏是通过宏定义和C预处理器的处理以一种简单的方式在将源代码中找到的名字替换掉。

然而Clojure宏采用的方式是操作Clojure代码本身 - 是的,你可以转换 AST(抽象语法树)! - 包括有能力控制事情得以完全评估的时间和条件。

实验之美

“学习Lisp几周后,我发现用其它任何一种语言编程都有难以忍受的约束。” — Paul Graham, Road to Lisp

如果我们还必须经历这种传统的开发周期的话,那么我们所有的能力将被耗尽: 改变源码->重新编译/重新开始运行时(runtime)-> 运行代码以查看结果/进行测试-> 清除, 重复。

我之所以要成为一名软件开发人员,主要的原因之一就是创造的快感。 编写代码并且能立刻看到自己劳动成果是一种很奇妙的体验! 我认为我们应当尽我们所能减少看到刚刚创建的东西的结果所花费的时间。Clojure - 确实很大程度上就像Lisp - 配置了一个高级的REPL (Read-Eval-Print-Loop) 环境,并且和许多编辑器亲密集成,例如Emacs、 Vim、IntelliJ和Eclipse。

昌伟兄
翻译于 2016/07/21 23:44
0

但是对于每天都要进行开发,这意味着什么呢?

我正常的Clojure工作流主要是在Emacs中启动一个REPL会话-不过这也同样适用于IntelliJ、Vim和Eclipse-并且无论我做什么任务,期间,我都会让它自己运行着。让某个REPL会话运行几天甚至几周也很正常。我可以在编辑器中修改代码,并且使用某个简单的快捷键就能在运行着的REPL中立刻对结果进行重新评估,因此这就完全消除了JVM启动时间方面的缺点。

这使得使用Clojure进行开发更多地属于实验驱动。探索的成本最低,因此最终通过REPL提高了程序质量。这也适用于测试,对于运行它们同样也是成本低效果佳。

函数式编程和并发

"选择不可变性(immutability),看看它的效果。" — Rich Hickey, Clojure creator

Clojure和其它的Lisp“方言”不同之处在于它的独特的函数式编程方法。正如很多其它的语言一样,Clojure 也支持高阶函数。这意思是说函数是第一等公民,函数可以用作参数也可以作为其它函数的返回值。

昌伟兄
翻译于 2016/07/23 00:26
0

但是在默认情况下Clojure中的数据是不可修改的。如果你创建了一个map、一个list、一个vector等等,根据定义都是不可修改的,一旦创建就无法改变。

这有许多好处:

  • 不可修改的数据结构在默认情况下是线程安全的,这使得开发并发软件变得更简单;

  • 你可以很容易地查看历史记录;

  • 没必要担心其它的代码路径会修改你的数据。这根本不可能发生;

另外Clojure附带了很多并发实用工具,例如引用类型和软件事务内存STMcore.async, core.async是CSP(可以认为是通道)的库实现。 

Clojurescript

Clojure是一个功能强大的开发环境,但是当我们开发web程序时,最有可能仍然实用JavaScript,而JavaScrit作为一门语言存在很大的局限性。Clojurescript是用于浏览器中的Clojure编译器,它将Clojure的全部功能带到了前端web开发环境中。(但可以肯定的是,你也可以在Node.js中运行它)

许多公司已经在产品中采用了Clojurescript,包括我们的here at Atlassian。我们获得的最主要的一个好处是能够轻松地在服务器和浏览器之间共享我们的核心算法。我认为 Clojurescript可能是当前可以使用的最成熟的JavaScript替代品。

昌伟兄
翻译于 2016/07/24 00:52
0

结论

这是一篇令我手抖的文章,说实话,到目前为止很难用语言把所有的优点都列出来。因此我强烈建议你观看由 Bruce Hauman所录制的 programs the Flappy Bird game interactively with Clojurescript 视频——它是对本文所描述内容做了一个非常好的流程梳理的一个例子。

如果你有兴趣学习更多的关于 Clojure内容,我强烈建议你加入Sydney Clojure User Group。我们是很友善的一个群组,并且欢迎不同水平的人参加。

如果你不在悉尼,你也可以在Clojure官网上从user groups listing 里找到你当地的用户组。

被盗用户
翻译于 2016/07/20 09:18
0
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(31)

jQer
jQer

引用来自“jQer”的评论

O,函数式,O,lambda,... 我想当 Lisp 大神,我只用 Lisp 方言,...

当你处于这个模式,说明你还是个刚入门的函数式菜鸟。函数式对于编程的贡献,就是对于循环算法提供一个单一接口,比如 map(callback)。剩下的就是语法树的设计,但是这个只能作为科研学习,对工程没有任何帮助。

结构化编程 + 循环回调 === 现代编程语言

能实现这种特性的语言多的是,而且性能、生态库都很丰富:Node.js、Scala、Erlang、Rust、Nim。Clojure 在里边就是一坨,无论是性能,还是可读,还是生态库,还是开发效率。

引用来自“下里巴人_770728”的评论

只用过js/java/clojure/ruby,性能方面,clojure确实比node好,开发效率应该稳超过node(主要是缺乏一个杀手级框架,象rails那样的,花在前期拼框架的时间太多了,真开发起来其实很快的)。生态方面本身基于jdk,大量java库可用。 重点讨论一下关于clojure的可读性: 1. 在较短的代码里,Java可读性最好。但一旦代码复杂化,对象之间的相互影响,让代码可读但难懂。所以我们分析一段java开源项目时,往往需要打开ide进行单步调试。 2. node的可读性实在太差,这应该没有争议。每一句话都能读明白,就是不清楚为什么会写成这样,不清楚将会变成什么 3. 最开始用clojure,确实被一堆括号吓倒了,感觉可读性差。现在上手三个多月,慢慢地发现感觉是错误的:clojure在这三种语言中,可读性是最好的: 3.1 短小,无废话,无干扰,一个功能块往往无需翻页就看完了。与java相比简直差距太明显。 3.2 括号借助ide的缩进,功能块非常清晰,这一点,我在将react-bootstrap里的一些组件转译为clojurescript的组件时,感受特别深。js的代码太绕了,而clojurescript的非常直接,可读性上差别是明显的(所以现在变成 喜欢clojure的括号了) 3.3 函数的输出不可变,看代码时特别聚焦。而看懂一段js代码太不容易了,不清楚哪个地方改了某个变量,经常使用全文搜索。clojure不需要借助ide的单步调试就能看懂一个功能块在做什么事。看得越多,感受越深 现在大家对clojurer 的误解,个人认为主要还是社区太小,大家不了解。在国内缺乏应用场景,基本上是个人项目,资料也基本全英文,对我初中级别的英语能力是极大考验。 熟悉与优雅正交。希望大家能多关注下clojure,在对比中去发现它的美好。

引用来自“jQer”的评论

首先,你用 clojure 写什么? 写文件系统?数据库引擎?它根本不是那个领域的。Rust、Nim 要好的多得多,而且语法也更加简单。 写服务器?写路由器?CPU 计算就是忽略的,这时候,jvm 对 node 没有什么性能优势,因为这个层面的职责就是转发,不对消息做计算。 可读,你用 C 风格写出来的 js, 我不明白其哪边不可读?哪边绕?当然,如果你用 Java 风格来写,我只能说,写代码的人不行。 另一方面,一旦你牵扯到了 Web 端,用 clojure 就意味着你的团队要掌握 Java (Android)、Swift/ObjC (IOS)、HTML + CSS + JavaScript (Browser)、Sql、Mongodb (JavaScript)。甚至你们可能还需要 Shell、Python 或者 Lua 构建自动化部署脚本。看看你们的开发成本,学习成本。

引用来自“moose123”的评论

什么情况,写Clojure还要掌握这么多?呵呵,我们团队用clojure做东南亚电商平台,整个后台都是clojure来写,虽然我们是JAVA出生,在JAVA领域也有10年经验了,写了clj后,请相信我再也回不去了,如此的行云流水,clj的风格我觉得没什么问题,看段时间就习惯了,前缀表达式非常的统一,来团队的新人问我如何学,语法啥啥的,我告诉他没有语法,只有几个规则而已,然后在repl中试着写几行就明白怎么玩了,比起java这个开发效率真的是杠杠的,需要java的jar直接拿来用就行了,现在网站后台就是angularjs+clojure,不过JS部分不是cljs来写的,至于性能除了比JAVA更消耗内存一些外,其他的基本上比java差点点吧,clojure1.8 在内存方面又改善了很多,性能上当然随便吊打node了,已有大神测试过了。最后希望clojure越来越普及:)

引用来自“jQer”的评论

你就纯粹是个菜鸟,先把 io 模型学会再来扯淡。还写商城,你们一共多少台节点服务器? 每秒请求数能到多少? 做过压测吗? java 也分 tomcat 和 netty 至少两种 io。还调打 node,我看看你调打的 benchmark。

引用来自“odoo365”的评论

牛头不对马嘴,别人就没提过IO。
你先去买本书搞懂什么是 IO,跟你们这种菜鸟说话真累
o
odoo365

引用来自“jQer”的评论

O,函数式,O,lambda,... 我想当 Lisp 大神,我只用 Lisp 方言,...

当你处于这个模式,说明你还是个刚入门的函数式菜鸟。函数式对于编程的贡献,就是对于循环算法提供一个单一接口,比如 map(callback)。剩下的就是语法树的设计,但是这个只能作为科研学习,对工程没有任何帮助。

结构化编程 + 循环回调 === 现代编程语言

能实现这种特性的语言多的是,而且性能、生态库都很丰富:Node.js、Scala、Erlang、Rust、Nim。Clojure 在里边就是一坨,无论是性能,还是可读,还是生态库,还是开发效率。

引用来自“下里巴人_770728”的评论

只用过js/java/clojure/ruby,性能方面,clojure确实比node好,开发效率应该稳超过node(主要是缺乏一个杀手级框架,象rails那样的,花在前期拼框架的时间太多了,真开发起来其实很快的)。生态方面本身基于jdk,大量java库可用。 重点讨论一下关于clojure的可读性: 1. 在较短的代码里,Java可读性最好。但一旦代码复杂化,对象之间的相互影响,让代码可读但难懂。所以我们分析一段java开源项目时,往往需要打开ide进行单步调试。 2. node的可读性实在太差,这应该没有争议。每一句话都能读明白,就是不清楚为什么会写成这样,不清楚将会变成什么 3. 最开始用clojure,确实被一堆括号吓倒了,感觉可读性差。现在上手三个多月,慢慢地发现感觉是错误的:clojure在这三种语言中,可读性是最好的: 3.1 短小,无废话,无干扰,一个功能块往往无需翻页就看完了。与java相比简直差距太明显。 3.2 括号借助ide的缩进,功能块非常清晰,这一点,我在将react-bootstrap里的一些组件转译为clojurescript的组件时,感受特别深。js的代码太绕了,而clojurescript的非常直接,可读性上差别是明显的(所以现在变成 喜欢clojure的括号了) 3.3 函数的输出不可变,看代码时特别聚焦。而看懂一段js代码太不容易了,不清楚哪个地方改了某个变量,经常使用全文搜索。clojure不需要借助ide的单步调试就能看懂一个功能块在做什么事。看得越多,感受越深 现在大家对clojurer 的误解,个人认为主要还是社区太小,大家不了解。在国内缺乏应用场景,基本上是个人项目,资料也基本全英文,对我初中级别的英语能力是极大考验。 熟悉与优雅正交。希望大家能多关注下clojure,在对比中去发现它的美好。

引用来自“jQer”的评论

首先,你用 clojure 写什么? 写文件系统?数据库引擎?它根本不是那个领域的。Rust、Nim 要好的多得多,而且语法也更加简单。 写服务器?写路由器?CPU 计算就是忽略的,这时候,jvm 对 node 没有什么性能优势,因为这个层面的职责就是转发,不对消息做计算。 可读,你用 C 风格写出来的 js, 我不明白其哪边不可读?哪边绕?当然,如果你用 Java 风格来写,我只能说,写代码的人不行。 另一方面,一旦你牵扯到了 Web 端,用 clojure 就意味着你的团队要掌握 Java (Android)、Swift/ObjC (IOS)、HTML + CSS + JavaScript (Browser)、Sql、Mongodb (JavaScript)。甚至你们可能还需要 Shell、Python 或者 Lua 构建自动化部署脚本。看看你们的开发成本,学习成本。

引用来自“moose123”的评论

什么情况,写Clojure还要掌握这么多?呵呵,我们团队用clojure做东南亚电商平台,整个后台都是clojure来写,虽然我们是JAVA出生,在JAVA领域也有10年经验了,写了clj后,请相信我再也回不去了,如此的行云流水,clj的风格我觉得没什么问题,看段时间就习惯了,前缀表达式非常的统一,来团队的新人问我如何学,语法啥啥的,我告诉他没有语法,只有几个规则而已,然后在repl中试着写几行就明白怎么玩了,比起java这个开发效率真的是杠杠的,需要java的jar直接拿来用就行了,现在网站后台就是angularjs+clojure,不过JS部分不是cljs来写的,至于性能除了比JAVA更消耗内存一些外,其他的基本上比java差点点吧,clojure1.8 在内存方面又改善了很多,性能上当然随便吊打node了,已有大神测试过了。最后希望clojure越来越普及:)

引用来自“jQer”的评论

你就纯粹是个菜鸟,先把 io 模型学会再来扯淡。还写商城,你们一共多少台节点服务器? 每秒请求数能到多少? 做过压测吗? java 也分 tomcat 和 netty 至少两种 io。还调打 node,我看看你调打的 benchmark。
牛头不对马嘴,别人就没提过IO。
jQer
jQer

引用来自“jQer”的评论

O,函数式,O,lambda,... 我想当 Lisp 大神,我只用 Lisp 方言,...

当你处于这个模式,说明你还是个刚入门的函数式菜鸟。函数式对于编程的贡献,就是对于循环算法提供一个单一接口,比如 map(callback)。剩下的就是语法树的设计,但是这个只能作为科研学习,对工程没有任何帮助。

结构化编程 + 循环回调 === 现代编程语言

能实现这种特性的语言多的是,而且性能、生态库都很丰富:Node.js、Scala、Erlang、Rust、Nim。Clojure 在里边就是一坨,无论是性能,还是可读,还是生态库,还是开发效率。

引用来自“下里巴人_770728”的评论

只用过js/java/clojure/ruby,性能方面,clojure确实比node好,开发效率应该稳超过node(主要是缺乏一个杀手级框架,象rails那样的,花在前期拼框架的时间太多了,真开发起来其实很快的)。生态方面本身基于jdk,大量java库可用。 重点讨论一下关于clojure的可读性: 1. 在较短的代码里,Java可读性最好。但一旦代码复杂化,对象之间的相互影响,让代码可读但难懂。所以我们分析一段java开源项目时,往往需要打开ide进行单步调试。 2. node的可读性实在太差,这应该没有争议。每一句话都能读明白,就是不清楚为什么会写成这样,不清楚将会变成什么 3. 最开始用clojure,确实被一堆括号吓倒了,感觉可读性差。现在上手三个多月,慢慢地发现感觉是错误的:clojure在这三种语言中,可读性是最好的: 3.1 短小,无废话,无干扰,一个功能块往往无需翻页就看完了。与java相比简直差距太明显。 3.2 括号借助ide的缩进,功能块非常清晰,这一点,我在将react-bootstrap里的一些组件转译为clojurescript的组件时,感受特别深。js的代码太绕了,而clojurescript的非常直接,可读性上差别是明显的(所以现在变成 喜欢clojure的括号了) 3.3 函数的输出不可变,看代码时特别聚焦。而看懂一段js代码太不容易了,不清楚哪个地方改了某个变量,经常使用全文搜索。clojure不需要借助ide的单步调试就能看懂一个功能块在做什么事。看得越多,感受越深 现在大家对clojurer 的误解,个人认为主要还是社区太小,大家不了解。在国内缺乏应用场景,基本上是个人项目,资料也基本全英文,对我初中级别的英语能力是极大考验。 熟悉与优雅正交。希望大家能多关注下clojure,在对比中去发现它的美好。

引用来自“jQer”的评论

首先,你用 clojure 写什么? 写文件系统?数据库引擎?它根本不是那个领域的。Rust、Nim 要好的多得多,而且语法也更加简单。 写服务器?写路由器?CPU 计算就是忽略的,这时候,jvm 对 node 没有什么性能优势,因为这个层面的职责就是转发,不对消息做计算。 可读,你用 C 风格写出来的 js, 我不明白其哪边不可读?哪边绕?当然,如果你用 Java 风格来写,我只能说,写代码的人不行。 另一方面,一旦你牵扯到了 Web 端,用 clojure 就意味着你的团队要掌握 Java (Android)、Swift/ObjC (IOS)、HTML + CSS + JavaScript (Browser)、Sql、Mongodb (JavaScript)。甚至你们可能还需要 Shell、Python 或者 Lua 构建自动化部署脚本。看看你们的开发成本,学习成本。

引用来自“moose123”的评论

什么情况,写Clojure还要掌握这么多?呵呵,我们团队用clojure做东南亚电商平台,整个后台都是clojure来写,虽然我们是JAVA出生,在JAVA领域也有10年经验了,写了clj后,请相信我再也回不去了,如此的行云流水,clj的风格我觉得没什么问题,看段时间就习惯了,前缀表达式非常的统一,来团队的新人问我如何学,语法啥啥的,我告诉他没有语法,只有几个规则而已,然后在repl中试着写几行就明白怎么玩了,比起java这个开发效率真的是杠杠的,需要java的jar直接拿来用就行了,现在网站后台就是angularjs+clojure,不过JS部分不是cljs来写的,至于性能除了比JAVA更消耗内存一些外,其他的基本上比java差点点吧,clojure1.8 在内存方面又改善了很多,性能上当然随便吊打node了,已有大神测试过了。最后希望clojure越来越普及:)

引用来自“jQer”的评论

你就纯粹是个菜鸟,先把 io 模型学会再来扯淡。还写商城,你们一共多少台节点服务器? 每秒请求数能到多少? 做过压测吗? java 也分 tomcat 和 netty 至少两种 io。还调打 node,我看看你调打的 benchmark。

引用来自“moose123”的评论

看来你是没真正用过clj,估计JAVA也不怎么样吧,根本就没跟你讨论IO,就扯IO来了,什么叫JAVA也分TOMCAT和NETTY,语无伦次。。。
你连 io 都不懂,还给人做商城? 你们那商城多少用户,还是根本就没有用户。你做 java 10 年,不知道 tomcat netty 和 io 的关系区别? 我看你不是 10 年经验,是 10 个月经验。你这b 吹得一点都不像,没点技术含量。我 c nim 底层 tcp http 解析器写的都腻了,你的这些理论,我一看就是个胡扯
m
moose123

引用来自“jQer”的评论

O,函数式,O,lambda,... 我想当 Lisp 大神,我只用 Lisp 方言,...

当你处于这个模式,说明你还是个刚入门的函数式菜鸟。函数式对于编程的贡献,就是对于循环算法提供一个单一接口,比如 map(callback)。剩下的就是语法树的设计,但是这个只能作为科研学习,对工程没有任何帮助。

结构化编程 + 循环回调 === 现代编程语言

能实现这种特性的语言多的是,而且性能、生态库都很丰富:Node.js、Scala、Erlang、Rust、Nim。Clojure 在里边就是一坨,无论是性能,还是可读,还是生态库,还是开发效率。

引用来自“下里巴人_770728”的评论

只用过js/java/clojure/ruby,性能方面,clojure确实比node好,开发效率应该稳超过node(主要是缺乏一个杀手级框架,象rails那样的,花在前期拼框架的时间太多了,真开发起来其实很快的)。生态方面本身基于jdk,大量java库可用。 重点讨论一下关于clojure的可读性: 1. 在较短的代码里,Java可读性最好。但一旦代码复杂化,对象之间的相互影响,让代码可读但难懂。所以我们分析一段java开源项目时,往往需要打开ide进行单步调试。 2. node的可读性实在太差,这应该没有争议。每一句话都能读明白,就是不清楚为什么会写成这样,不清楚将会变成什么 3. 最开始用clojure,确实被一堆括号吓倒了,感觉可读性差。现在上手三个多月,慢慢地发现感觉是错误的:clojure在这三种语言中,可读性是最好的: 3.1 短小,无废话,无干扰,一个功能块往往无需翻页就看完了。与java相比简直差距太明显。 3.2 括号借助ide的缩进,功能块非常清晰,这一点,我在将react-bootstrap里的一些组件转译为clojurescript的组件时,感受特别深。js的代码太绕了,而clojurescript的非常直接,可读性上差别是明显的(所以现在变成 喜欢clojure的括号了) 3.3 函数的输出不可变,看代码时特别聚焦。而看懂一段js代码太不容易了,不清楚哪个地方改了某个变量,经常使用全文搜索。clojure不需要借助ide的单步调试就能看懂一个功能块在做什么事。看得越多,感受越深 现在大家对clojurer 的误解,个人认为主要还是社区太小,大家不了解。在国内缺乏应用场景,基本上是个人项目,资料也基本全英文,对我初中级别的英语能力是极大考验。 熟悉与优雅正交。希望大家能多关注下clojure,在对比中去发现它的美好。

引用来自“jQer”的评论

首先,你用 clojure 写什么? 写文件系统?数据库引擎?它根本不是那个领域的。Rust、Nim 要好的多得多,而且语法也更加简单。 写服务器?写路由器?CPU 计算就是忽略的,这时候,jvm 对 node 没有什么性能优势,因为这个层面的职责就是转发,不对消息做计算。 可读,你用 C 风格写出来的 js, 我不明白其哪边不可读?哪边绕?当然,如果你用 Java 风格来写,我只能说,写代码的人不行。 另一方面,一旦你牵扯到了 Web 端,用 clojure 就意味着你的团队要掌握 Java (Android)、Swift/ObjC (IOS)、HTML + CSS + JavaScript (Browser)、Sql、Mongodb (JavaScript)。甚至你们可能还需要 Shell、Python 或者 Lua 构建自动化部署脚本。看看你们的开发成本,学习成本。

引用来自“moose123”的评论

什么情况,写Clojure还要掌握这么多?呵呵,我们团队用clojure做东南亚电商平台,整个后台都是clojure来写,虽然我们是JAVA出生,在JAVA领域也有10年经验了,写了clj后,请相信我再也回不去了,如此的行云流水,clj的风格我觉得没什么问题,看段时间就习惯了,前缀表达式非常的统一,来团队的新人问我如何学,语法啥啥的,我告诉他没有语法,只有几个规则而已,然后在repl中试着写几行就明白怎么玩了,比起java这个开发效率真的是杠杠的,需要java的jar直接拿来用就行了,现在网站后台就是angularjs+clojure,不过JS部分不是cljs来写的,至于性能除了比JAVA更消耗内存一些外,其他的基本上比java差点点吧,clojure1.8 在内存方面又改善了很多,性能上当然随便吊打node了,已有大神测试过了。最后希望clojure越来越普及:)

引用来自“jQer”的评论

你就纯粹是个菜鸟,先把 io 模型学会再来扯淡。还写商城,你们一共多少台节点服务器? 每秒请求数能到多少? 做过压测吗? java 也分 tomcat 和 netty 至少两种 io。还调打 node,我看看你调打的 benchmark。
看来你是没真正用过clj,估计JAVA也不怎么样吧,根本就没跟你讨论IO,就扯IO来了,什么叫JAVA也分TOMCAT和NETTY,语无伦次。。。
jQer
jQer

引用来自“jQer”的评论

O,函数式,O,lambda,... 我想当 Lisp 大神,我只用 Lisp 方言,...

当你处于这个模式,说明你还是个刚入门的函数式菜鸟。函数式对于编程的贡献,就是对于循环算法提供一个单一接口,比如 map(callback)。剩下的就是语法树的设计,但是这个只能作为科研学习,对工程没有任何帮助。

结构化编程 + 循环回调 === 现代编程语言

能实现这种特性的语言多的是,而且性能、生态库都很丰富:Node.js、Scala、Erlang、Rust、Nim。Clojure 在里边就是一坨,无论是性能,还是可读,还是生态库,还是开发效率。

引用来自“下里巴人_770728”的评论

只用过js/java/clojure/ruby,性能方面,clojure确实比node好,开发效率应该稳超过node(主要是缺乏一个杀手级框架,象rails那样的,花在前期拼框架的时间太多了,真开发起来其实很快的)。生态方面本身基于jdk,大量java库可用。 重点讨论一下关于clojure的可读性: 1. 在较短的代码里,Java可读性最好。但一旦代码复杂化,对象之间的相互影响,让代码可读但难懂。所以我们分析一段java开源项目时,往往需要打开ide进行单步调试。 2. node的可读性实在太差,这应该没有争议。每一句话都能读明白,就是不清楚为什么会写成这样,不清楚将会变成什么 3. 最开始用clojure,确实被一堆括号吓倒了,感觉可读性差。现在上手三个多月,慢慢地发现感觉是错误的:clojure在这三种语言中,可读性是最好的: 3.1 短小,无废话,无干扰,一个功能块往往无需翻页就看完了。与java相比简直差距太明显。 3.2 括号借助ide的缩进,功能块非常清晰,这一点,我在将react-bootstrap里的一些组件转译为clojurescript的组件时,感受特别深。js的代码太绕了,而clojurescript的非常直接,可读性上差别是明显的(所以现在变成 喜欢clojure的括号了) 3.3 函数的输出不可变,看代码时特别聚焦。而看懂一段js代码太不容易了,不清楚哪个地方改了某个变量,经常使用全文搜索。clojure不需要借助ide的单步调试就能看懂一个功能块在做什么事。看得越多,感受越深 现在大家对clojurer 的误解,个人认为主要还是社区太小,大家不了解。在国内缺乏应用场景,基本上是个人项目,资料也基本全英文,对我初中级别的英语能力是极大考验。 熟悉与优雅正交。希望大家能多关注下clojure,在对比中去发现它的美好。

引用来自“jQer”的评论

首先,你用 clojure 写什么? 写文件系统?数据库引擎?它根本不是那个领域的。Rust、Nim 要好的多得多,而且语法也更加简单。 写服务器?写路由器?CPU 计算就是忽略的,这时候,jvm 对 node 没有什么性能优势,因为这个层面的职责就是转发,不对消息做计算。 可读,你用 C 风格写出来的 js, 我不明白其哪边不可读?哪边绕?当然,如果你用 Java 风格来写,我只能说,写代码的人不行。 另一方面,一旦你牵扯到了 Web 端,用 clojure 就意味着你的团队要掌握 Java (Android)、Swift/ObjC (IOS)、HTML + CSS + JavaScript (Browser)、Sql、Mongodb (JavaScript)。甚至你们可能还需要 Shell、Python 或者 Lua 构建自动化部署脚本。看看你们的开发成本,学习成本。

引用来自“moose123”的评论

什么情况,写Clojure还要掌握这么多?呵呵,我们团队用clojure做东南亚电商平台,整个后台都是clojure来写,虽然我们是JAVA出生,在JAVA领域也有10年经验了,写了clj后,请相信我再也回不去了,如此的行云流水,clj的风格我觉得没什么问题,看段时间就习惯了,前缀表达式非常的统一,来团队的新人问我如何学,语法啥啥的,我告诉他没有语法,只有几个规则而已,然后在repl中试着写几行就明白怎么玩了,比起java这个开发效率真的是杠杠的,需要java的jar直接拿来用就行了,现在网站后台就是angularjs+clojure,不过JS部分不是cljs来写的,至于性能除了比JAVA更消耗内存一些外,其他的基本上比java差点点吧,clojure1.8 在内存方面又改善了很多,性能上当然随便吊打node了,已有大神测试过了。最后希望clojure越来越普及:)
你就纯粹是个菜鸟,先把 io 模型学会再来扯淡。还写商城,你们一共多少台节点服务器? 每秒请求数能到多少? 做过压测吗? java 也分 tomcat 和 netty 至少两种 io。还调打 node,我看看你调打的 benchmark。
邪小白
邪小白
使用过一段clojure之后的感受就是,我不用管这个祖父类,祖祖父类是干嘛的了,我不用ide单步调试了.实在是对于一个类有n多父类,继承,组合感觉太累.
m
moose123

引用来自“jQer”的评论

O,函数式,O,lambda,... 我想当 Lisp 大神,我只用 Lisp 方言,...

当你处于这个模式,说明你还是个刚入门的函数式菜鸟。函数式对于编程的贡献,就是对于循环算法提供一个单一接口,比如 map(callback)。剩下的就是语法树的设计,但是这个只能作为科研学习,对工程没有任何帮助。

结构化编程 + 循环回调 === 现代编程语言

能实现这种特性的语言多的是,而且性能、生态库都很丰富:Node.js、Scala、Erlang、Rust、Nim。Clojure 在里边就是一坨,无论是性能,还是可读,还是生态库,还是开发效率。

引用来自“下里巴人_770728”的评论

只用过js/java/clojure/ruby,性能方面,clojure确实比node好,开发效率应该稳超过node(主要是缺乏一个杀手级框架,象rails那样的,花在前期拼框架的时间太多了,真开发起来其实很快的)。生态方面本身基于jdk,大量java库可用。 重点讨论一下关于clojure的可读性: 1. 在较短的代码里,Java可读性最好。但一旦代码复杂化,对象之间的相互影响,让代码可读但难懂。所以我们分析一段java开源项目时,往往需要打开ide进行单步调试。 2. node的可读性实在太差,这应该没有争议。每一句话都能读明白,就是不清楚为什么会写成这样,不清楚将会变成什么 3. 最开始用clojure,确实被一堆括号吓倒了,感觉可读性差。现在上手三个多月,慢慢地发现感觉是错误的:clojure在这三种语言中,可读性是最好的: 3.1 短小,无废话,无干扰,一个功能块往往无需翻页就看完了。与java相比简直差距太明显。 3.2 括号借助ide的缩进,功能块非常清晰,这一点,我在将react-bootstrap里的一些组件转译为clojurescript的组件时,感受特别深。js的代码太绕了,而clojurescript的非常直接,可读性上差别是明显的(所以现在变成 喜欢clojure的括号了) 3.3 函数的输出不可变,看代码时特别聚焦。而看懂一段js代码太不容易了,不清楚哪个地方改了某个变量,经常使用全文搜索。clojure不需要借助ide的单步调试就能看懂一个功能块在做什么事。看得越多,感受越深 现在大家对clojurer 的误解,个人认为主要还是社区太小,大家不了解。在国内缺乏应用场景,基本上是个人项目,资料也基本全英文,对我初中级别的英语能力是极大考验。 熟悉与优雅正交。希望大家能多关注下clojure,在对比中去发现它的美好。

引用来自“jQer”的评论

首先,你用 clojure 写什么? 写文件系统?数据库引擎?它根本不是那个领域的。Rust、Nim 要好的多得多,而且语法也更加简单。 写服务器?写路由器?CPU 计算就是忽略的,这时候,jvm 对 node 没有什么性能优势,因为这个层面的职责就是转发,不对消息做计算。 可读,你用 C 风格写出来的 js, 我不明白其哪边不可读?哪边绕?当然,如果你用 Java 风格来写,我只能说,写代码的人不行。 另一方面,一旦你牵扯到了 Web 端,用 clojure 就意味着你的团队要掌握 Java (Android)、Swift/ObjC (IOS)、HTML + CSS + JavaScript (Browser)、Sql、Mongodb (JavaScript)。甚至你们可能还需要 Shell、Python 或者 Lua 构建自动化部署脚本。看看你们的开发成本,学习成本。
什么情况,写Clojure还要掌握这么多?呵呵,我们团队用clojure做东南亚电商平台,整个后台都是clojure来写,虽然我们是JAVA出生,在JAVA领域也有10年经验了,写了clj后,请相信我再也回不去了,如此的行云流水,clj的风格我觉得没什么问题,看段时间就习惯了,前缀表达式非常的统一,来团队的新人问我如何学,语法啥啥的,我告诉他没有语法,只有几个规则而已,然后在repl中试着写几行就明白怎么玩了,比起java这个开发效率真的是杠杠的,需要java的jar直接拿来用就行了,现在网站后台就是angularjs+clojure,不过JS部分不是cljs来写的,至于性能除了比JAVA更消耗内存一些外,其他的基本上比java差点点吧,clojure1.8 在内存方面又改善了很多,性能上当然随便吊打node了,已有大神测试过了。最后希望clojure越来越普及:)
下里巴人_770728
下里巴人_770728

引用来自“jQer”的评论

O,函数式,O,lambda,... 我想当 Lisp 大神,我只用 Lisp 方言,...

当你处于这个模式,说明你还是个刚入门的函数式菜鸟。函数式对于编程的贡献,就是对于循环算法提供一个单一接口,比如 map(callback)。剩下的就是语法树的设计,但是这个只能作为科研学习,对工程没有任何帮助。

结构化编程 + 循环回调 === 现代编程语言

能实现这种特性的语言多的是,而且性能、生态库都很丰富:Node.js、Scala、Erlang、Rust、Nim。Clojure 在里边就是一坨,无论是性能,还是可读,还是生态库,还是开发效率。

引用来自“下里巴人_770728”的评论

只用过js/java/clojure/ruby,性能方面,clojure确实比node好,开发效率应该稳超过node(主要是缺乏一个杀手级框架,象rails那样的,花在前期拼框架的时间太多了,真开发起来其实很快的)。生态方面本身基于jdk,大量java库可用。 重点讨论一下关于clojure的可读性: 1. 在较短的代码里,Java可读性最好。但一旦代码复杂化,对象之间的相互影响,让代码可读但难懂。所以我们分析一段java开源项目时,往往需要打开ide进行单步调试。 2. node的可读性实在太差,这应该没有争议。每一句话都能读明白,就是不清楚为什么会写成这样,不清楚将会变成什么 3. 最开始用clojure,确实被一堆括号吓倒了,感觉可读性差。现在上手三个多月,慢慢地发现感觉是错误的:clojure在这三种语言中,可读性是最好的: 3.1 短小,无废话,无干扰,一个功能块往往无需翻页就看完了。与java相比简直差距太明显。 3.2 括号借助ide的缩进,功能块非常清晰,这一点,我在将react-bootstrap里的一些组件转译为clojurescript的组件时,感受特别深。js的代码太绕了,而clojurescript的非常直接,可读性上差别是明显的(所以现在变成 喜欢clojure的括号了) 3.3 函数的输出不可变,看代码时特别聚焦。而看懂一段js代码太不容易了,不清楚哪个地方改了某个变量,经常使用全文搜索。clojure不需要借助ide的单步调试就能看懂一个功能块在做什么事。看得越多,感受越深 现在大家对clojurer 的误解,个人认为主要还是社区太小,大家不了解。在国内缺乏应用场景,基本上是个人项目,资料也基本全英文,对我初中级别的英语能力是极大考验。 熟悉与优雅正交。希望大家能多关注下clojure,在对比中去发现它的美好。

引用来自“jQer”的评论

首先,你用 clojure 写什么? 写文件系统?数据库引擎?它根本不是那个领域的。Rust、Nim 要好的多得多,而且语法也更加简单。 写服务器?写路由器?CPU 计算就是忽略的,这时候,jvm 对 node 没有什么性能优势,因为这个层面的职责就是转发,不对消息做计算。 可读,你用 C 风格写出来的 js, 我不明白其哪边不可读?哪边绕?当然,如果你用 Java 风格来写,我只能说,写代码的人不行。 另一方面,一旦你牵扯到了 Web 端,用 clojure 就意味着你的团队要掌握 Java (Android)、Swift/ObjC (IOS)、HTML + CSS + JavaScript (Browser)、Sql、Mongodb (JavaScript)。甚至你们可能还需要 Shell、Python 或者 Lua 构建自动化部署脚本。看看你们的开发成本,学习成本。
目前我使用clojure写自己的web项目,无团队,所以上面说的一些问题是不存在的。这个小项目主要是前端复杂,后台简单。关于js可读性的问题,不知道您是否读过jquery、dojo、react、angular等开源项目的源码。我上面也指出:react-bootstrap的源码,我用clojurescript重写时,发现可读性完全不在一个层面,有时间的话其实也可以看下的。再次重申:clojure这一套,在国内环境下,仅适合个人项目,周边找不到同道。
王阿觉
王阿觉
每次别人发新的语言,就能吵起来,就不能看点好的。
刘冲
刘冲
还有人说Java慢。。。那我说卡车比手推车慢,因为卡车好几个人都推不动,而手推车可以推着满街跑!
返回顶部
顶部