7C00.ME/houmu 2013-07-04

Clojure

Part 1

把《Clojure in Action》的Part 1给看完了,对Clojure的语法有了表面却比较全面的了解。

Part 1从第1页到第166页,总共有7章,占了全书近一半的篇幅。从后向前看每章的内容。

第7章讲Clojure的宏(macro)特性,这是Lisp方言的最重要的特性之一。宏和函数很像,区别在于:宏返回的是s表达式,也就是代码;而函数返回的是计算结果,可以是数值、字符串、map等数据结构,也可以是函数。宏使得Lisp语言具备了元编程的能力,使得适合实现DSL,这是当初学习Clojure的一个考虑。Clojure中有不少内置的宏,比较经典是and、time等。用好宏是衡量Clojure使用水平的重要考核指标,目前,还不太熟悉,慢慢来锻炼这个。

第6章讲Clojure的并发。函数式语言的并发强调无状态,从而保证线程安全。和Scala、Golang、Erlanger等Actor或者基于消息的并发模型不同,我感觉Clojure中的并发模型(叫做STM)应该说是基于事务的,虽然这个概念是新接触到的。Clojure在语言层面实现了ref、agent、atom、var这些用于并发事务的并行模型,但是由于文中举得例子太少,自己看的比较快,所以没怎么看明白。Clojure的并发模型可以另外去研究一下,在Part 1讲得不怎么清楚,让我一直以为是共享内存模型的一种封装。

第5章和Java互操作。Clojure是JVM语言,类似的还有Scala等。基于JVM语言有两个好处,一是利用JVM的成果,具有较好的性能;另一方面,可以方便的调用大量的Java类库。这使得小众语言能够尽快用于实际的工程项目中。这章没怎么细看,因为没有操作实例。第4章多态,么怎么看懂。这两章以后还需要回过头再看。

第3章、第2章和第1章都是基础性的东西。这些内容在《15分钟学习Clojure》中可以得到体现,当然《15分钟》的内容肯定是不够的,有许多语法细节没有涉及到。

总体来看Part 1,讲语法太多,太少实践了,所以的例子基本上都是在REPL中的简单实验。在实际的项目开发中,一般还是基于对文本的编辑、编译、运行这样的流程。但是看完Part 1,我还是不知道Clojure中有没有类似javac或者scalac之类的工具。这本书还有Part 2,应该是以开发项目为主了,但是理论教学和实践分得这么开,真的合适么?

Part 2先不急着看,先把Part 1梳理一下,然后看看是否有其他更合适的文档适合学习(实战)Clojure。

at 2013-07-04 22:53