庆祝 Clojure 五周岁

152 views
Skip to first unread message

Robert Luo

unread,
Oct 17, 2012, 3:55:06 AM10/17/12
to cn-cl...@googlegroups.com
Rich Hickey 今天在 Clojure 讨论区发出了庆祝 Clojure 发布五周年。用这个例子回顾下我自己使用 Clojure 的历史。

我自己接触 Clojure 应该在3-4年前,大约是 Clojure 0.7.x 版本的时候开始使用。作为一个使用了 Java 近十年的程序员,我对 Java 的并行性难题和啰嗦的表达一直有些意见,所以在积极地寻找新的表达方式——新的语言来试图解决这些问题。

我首先尝试了 Groovy,这个语言基本可以用到 Java 的全部库,语法和 Java 相近,当然 Duck Typing 看起来很适合动态开发,加上各种爽利的语法糖,特别是关于 Collection 的语法糖,让这个选择看起来是学习曲线平缓、重用投资的理想选择。我使用它开发了几个分析工具,但在一次艰苦的排错中,我发现错误竟然来自编译器本身,一个理应合理的表达却产生不能预测的后果。造成我需要等待两次 Groovy 升级才能解决这个问题。这个问题提醒我,在考察一种新的语言的时候,它的编译器的成熟度和可靠性是多么重要。毕竟我们不想把自己的大厦建筑在沙地上。

其后一年我注意到了新的语言 Scala,它看起来也非常性感:动态类型推断、函数性编程(尽管那个时候我还不甚知道这个概念)、原生集合支持、各种强大的表达方式。不过,它在语法上的复杂性和多种语法糖,让我对它的可靠性颇有怀疑。尽管从2003年问世以来,彼时它已有五六年的历史。阅读它的邮件列表部分证实了我的推测:当时的发布版本中存在的编译器错误被承诺在下次解决。浏览它的版本历史中,可以清楚地看到影响表达的许多语法的 Bug 的记录。

然后我在 Tapestry 作者 Howard Lewiship 的博客上读到了 Clojure。

和许多人一样,我以前听说过传奇的 Lisp,但从来没想过试用它,毕竟它那怪异的表达和无穷的括号,看起来和我们需要不断解决问题的程序员的生活过于遥远。不过 Howard 的“下个世纪的编程语言”的论断让我决心一试。

它距离首次 alpha 发布才一年多!它目前才是 0.7-alpha 版本!这似乎与我想要的成熟度和可靠性相距有一光年。不过,简单地试用过以后,我被它迷住了:无比简洁和统一的 s-expression (谢谢你,来自 LISP 的伟大遗产),极为强大的集合处理能力,数据不可变性的宣言、强大到变态的宏。更令我自己惊讶的是,它的简单到了极点的本身的框架,和 core 的仅仅几千行代码。我感觉自己不需要再寻找外部的证据,因为这些简单的东西本身就很难产生 Bug。这全部要归功于其特别的抽象,这是真正的抽象的威力。对于我们来自 OO 世界的人,看到对象之外的表达可以如此强力,不由得目瞪口呆。后来和 Clojure Contrib 库的主要贡献者 Stuart Sierra 交流,他也说,即使他每天都在使用和创造 Clojure,也每天为这种威力所惊讶。

Stuart Halloway 的 Programming Clojure 是 Clojure 的第一本书,感谢这本书通过 Pragmatic Programmer 网上出版,迅速带领我领会到了 Clojure 的简单之美。用 Stu 的原话:使用 Clojure 让你经常会去想,这后面的概念到底是什么?大多数软件复杂性来源于不合适的抽象和不合适的概念。

我有幸在 Clojure 1.1 发布后,到美国与 Stuart Halloway, Stuart Sierra, Aaron Bedra 这样的 Clojure 创造团队一同工作了一个月,对于这种语言的应用范围、它的威力、它的局限都有了更深的了解。对于我来说,Clojure 是一种很难过时的工具:它的表达和基础实在是太简单和太灵活了。尽管它还很年轻,它太过要求程序员的理解能力、它的陡峭的学习曲线、它相对缺乏开发工具,但这绝对不妨碍它成为你的编程工具箱里的终极武器。

我也参加了第一次 Clojure Conj 大会,看到很多活跃的 Clojure 程序员兴奋地来到这首次聚会。Mark Mcgranaghan (mmcgrana, Web 框架 Ring 的作者) 的演讲 Lord of Rings, Christophe Grand (cgrand,enlive 的作者)的谁也听不懂的演讲(法国人说英语的悲剧),和纯黑客打扮出场的 Phil Hagelberg (technomacy,Leiningen 的作者,他穿着带键盘的裤子)都是会上的热点。不过,Rich Hickey 的演讲《吊床驱动的编程》才是热点中的热点。

Rich Hickey 不仅仅是 Clojure 之父,他确实有着极深的思维深度。不仅对于程序语言,对于数据库(在我们的项目中共享数据的分布式框架,由 Rich Hickey 出谋划策,对于 Datomic 数据库的出现说不定有间接作用)等方面都有非常独到的认识。顺便说一句,他是美国少见的围棋迷,围棋的一黑一白构成的简洁但变化无穷的规则相信对他有着强大的影响,在他主导的框架中,简单总是在所有价值中占据最重要的一部分。

在这个新的语言层出不穷的时代,大多数语言仅仅在理论上存在过,大多数在小的应用领域存在。很多语言依靠跨国巨头的强大推力,但很少有 Clojure 这样产生于黑客社区,并纯粹靠黑客的爱好来发展和推动的语言可以获得如此多的关注。这是因为其他语言可能只是工具,但 Clojure 才是少见的真正揭示编程之美、令你无条件入迷的那种东西。

“重剑无锋,大巧不工”。

波菜

unread,
Oct 17, 2012, 4:28:51 AM10/17/12
to cn-cl...@googlegroups.com
当初学clojure完全是因为看了Paul Graham在《黑客与画家》里对Lisp语言的推崇,之前也听说过Lisp语言的强大和持久的生命力,和Java完全不同的语法虽然一时难以让人接受但同时也让人耳目一新,后来找找才发现没有一个专门的Lisp,有的只是方言,看了好几种schema、common lisp、clojure,只因两个原因就选择了它:基于jvm以及twitter storm是用它写的,第一个让我们这些java程序员的经验和技能不会完全无用武之地,第二个让人相信这门有强大能力的语言。现在学了一点皮毛,深刻体会到了带给自己的惊喜。 

--
中文社区博客:http://blog.clojure.cn/
中文问答网站:http://ask.clojure.cn/
中文邮件列表:https://groups.google.com/d/forum/cn-clojure?hl=zh-CN
---
您收到此邮件是因为您订阅了 Google 网上论坛的“CN-Clojure”论坛。
要向此网上论坛发帖,请发送电子邮件至 cn-cl...@googlegroups.com
通过以下网址访问此论坛:http://groups.google.com/group/cn-clojure?hl=zh-CN。
 
 



--
微博:@波菜
博客:http://yikebocai.com    

xhh

unread,
Oct 17, 2012, 6:18:42 AM10/17/12
to cn-cl...@googlegroups.com
好文章, 建议录入 http://blog.clojure.cn/

jaime

unread,
Oct 17, 2012, 6:51:15 AM10/17/12
to cn-cl...@googlegroups.com
罗兄文艺范~~

在 2012年10月17日星期三UTC+8下午3时55分06秒,Robert Luo写道:

dennis zhuang

unread,
Oct 17, 2012, 9:07:27 AM10/17/12
to cn-cl...@googlegroups.com
写的真好,罗兄愿意的话,我给您开个帐号?

--
中文社区博客:http://blog.clojure.cn/
中文问答网站:http://ask.clojure.cn/
中文邮件列表:https://groups.google.com/d/forum/cn-clojure?hl=zh-CN
---
您收到此邮件是因为您订阅了 Google 网上论坛的“CN-Clojure”论坛。
要向此网上论坛发帖,请发送电子邮件至 cn-cl...@googlegroups.com
通过以下网址访问此论坛:http://groups.google.com/group/cn-clojure?hl=zh-CN。
 
 



--
庄晓丹
Email:        killm...@gmail.com xzh...@avos.com
Site:           http://fnil.net
Twitter:      @killme2008



Qiu Xiafei

unread,
Oct 17, 2012, 10:28:18 AM10/17/12
to cn-cl...@googlegroups.com
写得真好,赶紧贴上去啊!

2012/10/17 dennis zhuang <killm...@gmail.com>

dennis zhuang

unread,
Oct 17, 2012, 10:55:12 PM10/17/12
to cn-cl...@googlegroups.com
未经同意,已发布到  http://blog.clojure.cn/?p=110

James Qiu

unread,
Oct 18, 2012, 1:55:06 AM10/18/12
to cn-cl...@googlegroups.com
写得很好,有内容有文采。
Groovy、Scala和Clojure相比,确实多了些“脏乱差”的感觉。Clojure的最大威力在于概念简单而完整。
--

Robert Luo

unread,
Oct 18, 2012, 9:16:43 PM10/18/12
to cn-cl...@googlegroups.com
追加同意。


On Thursday, October 18, 2012 10:55:33 AM UTC+8, dennis wrote:
未经同意,已发布到  http://blog.clojure.cn/?p=110

在 2012年10月17日 下午10:28,Qiu Xiafei <qiux...@gmail.com>写道:
写得真好,赶紧贴上去啊!


2012/10/17 dennis zhuang <killm...@gmail.com>
写的真好,罗兄愿意的话,我给您开个帐号?

在 2012年10月17日 下午6:51,jaime <xieji...@gmail.com>写道:
罗兄文艺范~~

在 2012年10月17日星期三UTC+8下午3时55分06秒,Robert Luo写道:
Rich Hickey 今天在 Clojure 讨论区发出了庆祝 Clojure 发布五周年。用这个例子回顾下我自己使用 Clojure 的历史。

我自己接触 Clojure 应该在3-4年前,大约是 Clojure 0.7.x 版本的时候开始使用。作为一个使用了 Java 近十年的程序员,我对 Java 的并行性难题和�嗦的表达一直有些意见,所以在积极地寻找新的表达方式——新的语言来试图解决这些问题。

cdredfox

unread,
Oct 19, 2012, 1:32:43 AM10/19/12
to cn-cl...@googlegroups.com
内容很精采。

用过Scala 个人的感觉是复杂的语法,别扭的语法。用起来很不舒服。

Groovy简短的用过,在语法和使用层面感觉还不错的样子。

Clojure一至还在学习,是从dennis的blog上看到的,正看到官网的介绍,感觉非常简单,正好打算了解一门lisp方言,于是就选了。

--
杨飞
Email: cdre...@gmail.com

Qihui Sun

unread,
Oct 20, 2012, 10:27:17 PM10/20/12
to cn-cl...@googlegroups.com
罗兄写得好呀,使用得更早,Clojure国内先驱中的先驱呀。我关注大约是在2008年,但仅限于阅读文档、视频和资料,没做过实际项目,实在是由于实际中用不到。
却很想用它于实际中。
Reply all
Reply to author
Forward
0 new messages