Clojure编程

出版社:电子工业出版社
出版日期:2013-3-26
ISBN:9787121197185
作者:Chas Emerick,Brian Carper,Christophe Grand
页数:618页

章节摘录

版权页:   插图:   I/O、事务以及嵌套的Send 跟ref和atom不同的是,可以非常安全地利用agent来协调I/O或者其他类型的阻塞操作。这使得agent成为任何使用ref以及Clojure的STM来维持状态的程序中不可或缺的一个组件。而且由于agent独特的语义使得它们成为简化涉及异步I/O操作的理想组件——即使你不使用ref。 因为agent会串行执行所有发送给它的action,因此它给有副作用的操作提供一个很自然的同步点。你可以建立一个agent来保持比如一个指向文件或者网络socket的OutputSt ream、一个数据库的链接,或者消息队列的链接等。你可以确定发送到agent的每个action在执行期间都能独占这个连接。这使得它非常容易融合到Clojure的环境中来——包括ref和atom,它们的目标就是最小化它们跟周围环境的副作用。 你可能在想,agent怎么能用在STM的事务中呢?发送一个agent action本身就是一个有副作用的操作,那么看起来似乎不能把它放在一个事务里面去执行,因为会重试。进而可能会导致副作用发生多次,从而导致最终结果不对。不过实际上不是这样的。agent是跟Clojure的STM实现紧密融合的,在一个事务内通过send和send—off发送的action会被保持到事务成功提交。这意味着如果一个事务被重试100次,被发送给agent的action也在事务成功提交之后被执行一次。类似的,在一个agent action内部,对send和send—off的调用称为“嵌套发送”——也会被保持到直到这个action完成。在这两种情况下,被发送的action都可能因为一个校验器的失败而被全部抛弃掉。为了展示这些语义并且看看它们到底能给我们带来什么,让我们通过几个例子看看如何使用agent跟ref以及STM合作,在一个高度并行化、高IO负载的情况下简化对I/O操作的协调。 利用agent来记录引用状态的变更日志 在181页“对Ref进行修改的细节”一节开发的游戏使用ref来保持角色的状态,证实了Clojlife的STM在这种多人并发场景下的能力。但是任何跟这个类似的游戏,特别是那种多个玩家同时玩的游戏,都会对玩家的行为进行跟踪和保存,以及它们的角色所受的影响(加血、减血)。当然我们不会把这种类型日志、持久化以及其他I/O相关的东西写进核心游戏引擎:任何想做的持久化最终会由于事务重启而不一致。

前言

Clojure 是一种动态的、强类型的、寄居在Java 虚拟机(JVM) 上的语言,如今已经是它的第五个年头了。如今它已经被各种背景的程序员热情地应用到几乎所有的领域。Clojure 提供了一些很引人注目的特性来帮助我们解决现代编程所面临的各种挑战:函数式编程的基础,包括一套性能可y 以和典型的可变数据结构媲美的持久性数据结构由JVM 所提供的成熟、高效的运行时环境跟JVM/Java 的互操作能力使得很多架构、运维方面的需求可以得到满足一套提供并发、并行语义的机制是一种Lisp 方言,因此提供了非常灵活、强大的元编程能力Clojure 为那些受编程语言和环境限制而痛苦的程序员提供了一个实际可行的新选择。我们将会通过展示Clojure 与大家每天都会使用的现有技术、类库或者服务的无缝交互来证明这一点。我们会逐步介绍Clojure 的基础知识,从大家最熟悉的一些方面开始而不是从一些枯燥的原理开始。这本书的目标读者是谁?我们在写这本书的时候,脑子里面是有一些目标读者的,希望你是其中之一。Clojure 跟你现在最喜欢的语言在表达力、简洁性和灵活性方面可以匹敌——通常还有所超越,同时还使得你可以不费任何力气就能获得由JVM 所提供的性能、类库、社区以及运维稳定性。这也使得Clojure 很自然地成为Java 程序员(以及使用解释型、不是那么快的非Java 语言的JVM 程序员)的“下一代”语言,因为它们不想因为脱离JVM 而导致写出来的程序性能下降,或者不想因此而放弃之前在JVM 平台上的投资。而对于那些不想放弃语言强大表达力,但是又希望获得一个更可靠、更高效的平台以及更多可以选择的高质量类库的Ruby、Python 程序员来说,Clojure 也是很自然的选择。职业Java 程序员这个世界上有成千上万的Java 程序员,有一小部分的Java 程序员工作在极限条件下解决十分重大的问题,通常是一些领域相关的问题。如果你就是这样的一个Java 程序员,那么你可能一直在寻找着更好的工具、技术或者实践方法来提高你的工作效率以贡献更多的价值给你的团队、公司或者社区。而且你可能对于Java 跟其他语言相比所表现出来的种种局限而苦恼,但是你舍不得离开JVM 这个生态系统:它的流程成熟度、大量的第三方库、软件供应商的支持服务以及大量 熟悉Java 的程序员资源,即使其他的语言特性是多么诱人。你会发现Clojure 是个很不错的选择。它以优异的性能运行在JVM 之上,能够跟现在你已经有的所有的类库,工具以及应用进行交互,而且它比Java 简单很多,同时又更富表达力、更简洁。Ruby、Python 以及其他程序员从任何一个方面来讲,Ruby 和Python 都已经不算什么新语言了,但是最近这些年获得了极大的关注(应该可以算是“主流语言”了吧)。不难看出其中的缘由:它们都是极富表达力的动态语言、有很活跃的社区、在很多领域都鼓励最大化程序员的效率。Clojure 将是你理想的“下一代语言”。作为一个Ruby 或者Python 程序员,你肯定不愿意放弃这些语言所提供的优秀特性,但是又想让你的程序在一个更强劲的平台上运行,可以有更好的运行时性能,更多的类库可供选择。高效寄居于JVM 之上的Clojure 完全满足这些条件,通常在程序简洁性以及工作效率方面更会超出你的期望。在书里面我们会经常把Clojure 跟Java、Ruby 以及Python 进行比较来把一些概念“翻译”成你的专业领域里面对应的概念。在这些比较里面,我们比较的总是这些语言的权威实现:Ruby MRI(也称为CRuby)CPythonJava 6/7如何阅读这本书在规划整本书结构的时候,我们准备给大家介绍两方面的内容:一是有关Clojure 语言的细节;另外就是一些实际的、大家都会碰到的实际问题的例子。但是我们努力避免那些不是很成功的规划办法。具体一点来说就是我们避免以一个例子贯穿整本书,这种方式的结果是很多时候例子跟要叙述的概念往往不是那么相关,而且这一个例子可能对于读者来说不是那么熟悉。有了这个概念之后,我们把这本书分成了两部分,从最基本的概念开始介绍Clojure 的语言细节,这部分大概占了全书的三分之二;从第四部分开始介绍一些具体的、实际生活中的例子。这种清晰的分隔符合了“duplex book”的要求(这个概念最早是Martin Fowler 在 http://martinfowler.com/bliki/DuplexBook.html 里面提到的。)因此,你可以以两种方式来阅读这本书。从Clojure 的实际应用例子开始通常学习一门语言最好的办法就是看怎么用它来解决实际的问题。如果你喜欢这种方式,那么希望我们在书的第二部分举的例子有跟你日常做的事情相关的例子,这样你可以自己做个比较:用你自己熟悉的语言怎么做这个事情,再看看书里面介绍的用Clojure 如何解决这个问题。在这个过程中你会遇到很多未知的概念以及语言结构,每当遇到这些问题的时候,你可以以当前的上下文作为线索去书的第一部分查找对应的章节阅读。自底向上——从Clojure 最基本的概念开始有时候弄懂一个东西的唯一办法是从基本的概念开始学习,如果你习惯这种方式的话,那么从第一章的第一页开始读是最好的办法了。我们尝试以渐进的方式阐述Clojure 所有基本的原则以及结构,这样做的结果是你很少需要先阅读书的后面章节内容才能理解前面章节的内容。而当你准备自己动手实践的时候,你可以到后面的实践部分挑一个你最感兴趣、跟你要做的事情最相关的一个例子进行阅读。我们是谁?我们是三个通过不同途径认识并且喜欢上Clojure 的三个程序员。在写这本书的时候,我们试图把我们对于为什么使用以及如何使用Clojure 的经验告诉大家以让你也可以很好地使用它。Chas EmerickChas 从2008 年的早期开始就一直活跃于Clojure 社区。他给Clojure 语言核心贡献过代码,参与过十多个Clojure 开源项目,并且经常会撰写或者演讲一些有关Clojure 或者软件开发方面的东西。Chas 维护了Clojure Atlas(http://clojureatlas.com),这是一个以交互式的、可视化的方法帮助大家学习Clojure 及其标准库的一个网站。Chas 创建了Snowtide 公司( http://snowtide.com),它坐落于马萨诸塞州西部,Chas 的主要领域在于非结构化数据的提取,并且特别擅长于PDF 相关的数据提取。他经常在他的博客(http://cemerick.com)上发表一些有关Clojure、软件开发、企业管理等方面的文章。Brian CarperBrian 是一个从Ruby 转过来的Clojure 语言爱好者。他从2008 年开始就使用Clojure 了,不管是自己业余的小项目还是工作中的项目,涉及到的领域从Web 开发到数据分析再到桌面应用编程等。Brian 是Gaka(https://github.com/briancarper/gaka)的作者,这是一个把Clojure 代码转换成CSS 的编译器;他还是Oyako(https://github.com/briancarper/oyako)的作者,这是一个对象关系映射的类库。他在他的博客 http://briancarper.net 上发表了Clojure 以及其他主题的一些文章。Christophe GrandChristophe 是一个迷失在Java 世界的函数式编程爱好者,直到2008 年遇到Clojure,一见钟情!他是好几个软件的作者:Enlive ( http://github.com/cgrand/enlive)是一个HTML/XML 转换、提取以及模板库;Parsley(http://github.com/cgrand/parsley)是一个递增式的parser 生成器;Moustache(http://github.com/cgrand/moustache)是一个为Ring 设计的路由及中间件应用的DSL。作为一个独立咨询者,他开发并且提供Clojure 培训。他在他的博客 http://clj-me.cgrand.net 上撰写有关Clojure 的文章。致谢本书跟其他任何书一样,如果没有那么多人不知疲倦的帮助的话是不会有这本书的。首先要感谢Clojure 语言的作者Rich Hickey。在短短的几年里,他设计、实现并且把Clojure 引入了这个世界。对于很多人来说这并不只是另外一个工具而已,它重新激起了我们对编程的热爱。除此之外,他个人也教给了我们很多东西——当然是有关编程的,不过同时也学到了他的耐心、品格和眼光。多谢! Rich。Dave Fayram 和Mike Loukides 对于本书雏形的形成起了至关重要的作用。当然,如果没有我们的编辑Julie Steele 以及所有O'Reilly 那些好人,大家现在也看不到这本书,他们帮我们搞定了出版过程中的一切事宜。如果没有审校人员的把关,这本书不会有这么高的质量。审校人员有: Sam Aaron、Antoni Batchelli、Tom Faulhaber、Chris Granger、Anthony Grimes、Phil Hagelberg、Tom Hicks、 Alex Miller、William Morgan、Laurent Petit 以及Dean Wampler。同时我们也想感谢那些通过O’Reilly 论坛、Email、Twitter 等等途径给我们书早期预览版提出反馈和建议的读者们。Michael Fogus 和Chris Houser 在很多方面给了我们灵感。其中之一就是他们在The Joyof Clojure 一书中对于跟REPL 交互内容的显示格式,我们直接照搬过来了。如果这里少提了任何人,那么请接受我们默默的感谢以及诚挚的歉意,最后我们很高兴能把本书带给大家!最后,当然感谢的还远远不够Clojure 社区已经作为我的另外一个家好多年了。这个社区里面的成员都很热情,给我以帮助,是我的榜样。特别是经常在#clojure 频道里出现的人们,不但跟他们成了好朋友,也从他们那里学到了从别的地方学不到的东西。感谢我的合作者,Christophe 和Brian: 跟你们一起撰写本书对我来说是莫大的荣耀。没有你们的话我是绝对完不成这本书的。感谢我的父母,Charley 和Darleen: 我对于事物运作原理无法抑制的好奇心、我对于语言以及修辞的热爱、我对于商业的兴趣跟你们早年对我的影响是分不开的。没有你们影响的话,我是不会走上我现在的路的:创建自己的软件公司以及撰写这本书。最后,感谢我的妻子Krissy: 为了让我能追求自己的理想你做出了那么多牺牲。此时说什么都显得那么苍白,我只说一句:我爱你。—Chas Emerick, 2012 年2 月感谢所有帮助创建Clojure 这门语言的社区成员:感谢你们不知疲倦的辛苦工作,你们的工作使得我的职业以及个人编程生活变得那么有趣,使得我的眼界更加开阔。感谢我的合作者Christophe 和 Chas: 我从来没有跟比你们聪明的人工作过。跟你们一起工作我很荣幸。感谢我的妻子Nicole :我每天晚上打字使得你不能入眠。—Brian Carper,2012 年2 月感谢Rich Hickey,你创建了Clojure 并且培育了这么一个友好的社区。感谢Clojure 社区,你们帮助我提高了我的水平。感谢我的合作者,Brian 和Chas: 跟你们合作我很荣幸。A mon professeur Daniel Goffinet, et à ses exercices improbables, qui a radicalement change mon approche de la programmation et de l’informatique—sur ces sujets je lui suis plus redevable qu’à nul autre.(感谢Daniel Goffinet 教授,他从根本上改变了我对于编程以及计算的看法——在这些主题上我最感谢他。)A mes parents pour votre amour bien sûr mais aussi pour tout le temps à s’inquiéter que je passais trop de temps sur l’Amstrad.(感谢我的父母:感谢你们对我的爱以及帮我买的那个8-bit 的计算机,你们 还担心我在上面花太多时间呢。)A ma compagne Emilie, et mon fils Gaël, merci d’être là et de m’avoir supporté pendant l’écriture de ce livre.(感谢我的妻子Emilie 和我的孩子Gaël: 感谢你们在我写作过程中对我的支持。)—Christophe Grand, 2012 年2 月本书使用的一些格式约定我们在本书里面使用如下一些约定:斜体(Italic)表示一个新词组、URL、邮件地址、文件名或者文件扩展名。等宽字体(Constant width)用来表示程序代码,也会用在一个普通段落里面用来引用变量或者函数名,数据库,数据类型、环境变量、表达式以及关键字。; 以分号开头的行表示这行文字是由在REPL 里面运行的代码打印( 也就是说,打印到标准输出流或者错误流) 出来的。;= 以分号 + 等号开头的行用来表示这是REPL 里面运行的代码的返回值。加粗的等宽字体(Constant width bold)表示命令或者其他一些用户应该原封不动地输入的文本。斜体的等宽字体(Constant width italic)表示这个文本应该被替换成用户提供的值或者它的值是由上下文确定的。示例使用本书的宗旨就是帮助你完成工作。一般而言,你可以在自己的程序和文档中随意使用书中的代码。除非你原样引用大量代码。否则无须联系我们获得授权。例如,在编写程序时引用了本书若干代码片段是无须授权的,然而销售或分发O’Reilly 图书示例光盘则是需要许可授权的。通过引用本书内容以及代码的方式来答疑解难是不必有授权的。而将书中的代码大量加入到你的产品以及文档中,则需要授权。如果你在引用书中内容时注明出处,我们将不胜感激,但是这不是必需的。引用声明通常是包含了标题、作者、出版商和ISBN 编码。例如:“Clojure Programming by Chas Emerick, Brian Carper, and Caristophe Grand (O’Reilly). Copyright 2012 Chas Emerick, Brian Carper, and Christophe Grand, 978-1-449-39470-7.”如果你发现自己对书中代码的使用有失公允, 或是违反了前述条款, 敬请通过 与我们联系。Safari® Books OnlineSafari Books Online 是一个按需索取的电子图书馆,让你能够轻松地在超过7500 本技术及创新参考书和视频中进行检索,快速找到你需要的答案。订阅之后,你可以在我们的在线图书馆中阅读图书并观看视频。在你的手机或移动设备上读书。在印刷前看到新标题,独家阅读撰写中的原稿,向作者进行反馈。复制粘贴代码示例,管理你的收藏,下载章节,在关键部分加上书签,添加笔记,打印页面,并从大量其他省时的特性中获益。O’Reilly Media 已将本书上传至Safari Books Online。想访问本书或其他来自O’Reilly和其他出版商的类似主题,可以在(http://my.safaribooksonline.com)进行免费注册。联系我们关于书本身的建议或者问题请联系出版商:O’Reilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472800-998-9938 ( 美国或者加拿大)707-829-0515 ( 国际或者本地)707-829-0104 ( 传真)我们为这本书制作了一个网页,会在那里列出勘误表,一些例子以及一些其他的信息,本书以网址为:http://shop.oreilly.com/product/0636920013754.do如果想问一些与本书相关的技术问题请发邮件到:bookquestions@oreilly.com如果想获得更多关于书、教程、论坛或者新闻的话,可以访问我们的网站: http://www.oreilly.com。在Facebook 上关注我们: http://facebook.com/oreilly在Twitter 上关注我们: http://twitter.com/oreillymedia在YouTube 上关注我们: http://www.youtube.com/oreillymedia

名人推荐

“O’Reilly Radar 博客有口皆碑。”——Wired“O’Reilly 凭借一系列(真希望当初我也想到了)非凡想法建立了数百万美元的业务。”——Business 2.0“O’Reilly Conference 是聚集关键思想领袖的绝对典范。”——CRN“一本O’Reilly 的书就代表一个有用、有前途、需要学习的主题。”——Irish Times“Tim 是位特立独行的商人,他不光放眼于最长远、最广阔的视野并且切实地按照Yogi Berra 的建议去做了:‘如果你在路上遇到岔路口,走小路(岔路)。’回顾过去Tim 似乎每一次都选择了小路,而且有几次都是一闪即逝的机会,尽管大路也不错。”——Linux Journal

内容概要

作者介绍:
Chas Emerick是软件公司Snowtide informatics的创始人。自2008年以来,致力于Clojure语言本身以及一些开源项目的开发;长期在cemerick.com撰写Clojure、软件开发实践、创业精神,及其他主题的文章。
Brian Carpe r是一位心理学研究领域的专业程序员,用Clojure从事数据分析与web开发。他开发过一个把Clojure代码转化为CSS代码的编译器以及一个操作关系型数据库的类库,经常在briancarper.net上发表Clojure文章。
Christophe Grand是一个独立顾问,现居法国里昂。他主要从事Clojure培训与编码,参与了Clojure语言的开发,撰写过Enlive和 Moustache类库,也是Counterclockwise——Clojure IDE for Eclipse的贡献者,经常在clj-me.cgrand.net上发表有关Clojure的文章。
译者介绍:
徐明明,阿里巴巴资深软件开发工程师,热衷于研究开源技术及语言;目前网络浏览量最大的Clojure入门教程( http://xumingming.sinaapp.com/302/clojure-functional-programming-for-the-jvm-clojure-tutorial/)即译自其手;参与Twitter开源实时计算框架Storm的开发,是该项目的核心贡献者(该项目的主要语言就是Clojure), 同时也翻译了该项目的很多文档,推进了该项目在中国的应用。

书籍目录

第1章  进入Clojure仙境
1
为什么要选择Clojure?
1
获取Clojure
3
Clojure REPL
3
不!括号真的不会让你瞎了眼
6
表达式、操作符、语法以及优先级
7
同像性
10
Clojure Reader
12
命名空间
21
符号解析
23
特殊形式
24
小结
46
这只是开始
48
第1部分
49
第2章 函数式编程
51
所谓函数式编程,到底意味着什么?
52
谈谈值的重要性
52
作为头等公民的函数以及高阶函数
59
函数(功能)的组合
68
纯函数
76
现实生活中的函数式编程
80
第3章 集合类与数据结构
83
抽象优于实现
84
访问集合元素的简洁方式
111
数据结构的类型
115
不可变性和持久性
123
元数据
136
用Clojure的集合来小试牛刀
137
总结
159
第4章 多线程和并发
161
计算在时间和空间内的转换
162
简单的并行化
168
状态和标识
170
Clojure的引用类型
172
并发操作的分类
174
原子类型(Atom)
176
通知和约束
179
ref
182
var
200
Agent
211
使用Java的并发原语
227
总结
228
第2部分
229
第5 章 宏
231
宏到底是什么?
231
编写你的第一个宏
237
调试宏
239
语法
242
什么时候使用宏
245
宏卫生
247
宏的常见用法和模式
253
隐藏参数:&env 和 &form
255
深入 -> 和 ->>
263
总结
266
第6章 数据类型和协议
267
协议(Protocol)
268
扩展已有的类型
270
定义你自己的类型
274
实现协议
284
协议自省
293
协议函数分派的边界场景
295
自己实现一个set
296
总结
304
第7章 多重方法
305
多重方法基础
305
通往层级之路
308
层级
310
真正实现多重!
315
还有几件事
317
最后的思考
321
第3 部分
323
第8章 Clojure项目的组织与构建
325
项目布局
325
构建
339
最后的思考
355
第9章 Java及JVM互操作
357
JVM是Clojure的基础
358
Java类、方法和字段的使用
358
便利的互操作工具
361
异常与错误处理
363
为了效率进行类型提示
367
定义类、实现接口
372
在Java里使用Clojure
386
乐于合作的伙伴
393
第10章 面向REPL的编程
395
交互式开发
395
工具集
400
在REPL里调试、监测和打补丁
412
重定义结构的限制
416
小结
418
第4部分
419
第11章 数字与数学
421
Clojure的数字
421
Clojure数学
427
相等与等值
432
优化数值效率
436
用Clojure可视化芒德布罗集
448
第12章 设计模式
457
依赖注入
459
策略模式
462
责任链
463
面向方面的编程
466
最后的思考
470
第13章 测试
471
不可变值与纯函数
471
clojure.test
473
HTML DSL的成长
482
依赖断言
486
第14章 使用关系数据库
491
clojure.java.jdbc
491
Korma
498
Hibernate
503
最后的思考
510
第15章 使用非关系型数据库
511
安装CouchDB和Clutch
512
基本的CRUD操作
512
视图
513
_changes: 把CouchDB滥用做消息队列
519
可随意点选的消息队列
521
最后的思考
524
第16章 Clojure与Web
525
Clojure栈
525
基石:Ring
526
用Compojure路由请求
533
使用模板
543
最后的思考
552
第17章 布署Clojure Web应用程序
553
Java与Clojure Web架构
553
在本地运行Web应用
561
Web应用程序布署
562
超越简单Web应用程序布署
565
第5部分
567
第18章 明智地选择Clojure类型定义形式
569
第19章 在工作场所引进Clojure
573
只是事实…
573
强调生产效率
574
强调社群
576
审慎
577
第20章 下一步?
579
(dissoc Clojure ‘JVM)
579
4Clojure
580
Overtone
581
core.logic
581
Pallet
582
Avout
582
Heroku上的Clojure
583
关于作者
585

编辑推荐

《Clojure编程》基于新版,提供大量优良的样本代码,可让读者在快速入门、提高的同时,并不遗漏必要的初级概念。抛开Clojure不谈,这也是一本值得推荐的编程语言书籍。或许你现在还不能充分理解Clojure和函数式编程的精髓,或许目前的日常工作还用不到Clojure,但这绝对是一个值得你重视的主题,本书据此精心设计。作者在这一领域有足够的发言权,有能力引导读者从下载/安装开始学起,直到掌握用起进行web开发。《Clojure编程》写作精良,平易近人,具有非常良好的“信噪比”,可谓最实用而全面的Clojure图书,对Clojure的状态、标识及并发理念,函数式编程以及Clojure生态系统都有完整阐述。如果有人问你“我应该读什么书上的Clojure“,你可以坚定地指向它!

作者简介

Clojure是一种实用的通用语言,它是传奇语言LISP的方言,可与Ruby、Python等动态语言相媲美,更以无缝Java库、服务,以及拥有JVM系统得天独厚的资源优势而胜出。本书既可以用来熟悉Clojure基础知识与常见例子,也可了解其相关的实践领域与话题,更可以看到这一JVM平台上的LISP如何帮助消除不必要的复杂性,为大家在编程实践中解决最具挑战性的问题开辟新的选择——更具灵活性,更适于Web编程和操作数据库,可以应付更为苛刻的应用程序安全要求,更有效的并发性和并行处理、数据分析能力,以及在未来云环境下的更大的发展潜力。


 Clojure编程下载 更多精彩书评



发布书评

 
 


精彩书评 (总计4条)

  •     小规模折腾Clojure也有一阵子了。几本主要的入门书籍里面,这本Clojure Programming,还有一本Programming Clojure(Clojure程序设计)以及最近刚出来中文版的The Joy of Clojure(Clojure编程乐趣)我都买来看了看。当然还有其他的书,不过这三本应该是看的人最多的,而且其他的书,内容过于老旧,可以略过不看。所以今天主要说说这三本书。说起来,这三本书里面,这本Clojure Programming是我最满意的一本,这也是为什么我挑这一本写书评。原因主要在于对语言的介绍非常全面,几乎涵盖了Clojure的所有细节,甚至包括其在JVM层面可能出现的一些问题。这里做个简单的对比,Programming Clojure那本对于解构的介绍只有不到1页的篇幅,而这本书用了好几页详细阐述这个特性,如果是完全没有接触过lisp的新手,看完Programming Clojure估计还是搞不清楚解构该怎么玩。像这样可以对比的情况在这两本书之间有很多,可以说这本把很多地方都讲得很透彻,即便完全没有接触过lisp和函数式编程的新手也能够慢慢的读书,体会Clojure的独特之处。另外一点值得一提的是,这本书的内容还比较新。书中所有的代码都兼容Clojure 1.3.0以上的环境,并在1.4.0版的Clojure上通过测试运行。当我读这本书的时候,Clojure的最新版本号是1.5.1,这之间的差别并不太大。由于Clojure是Lisp方言,语法相对比较固定,所以一般不会出现在运行代码的时候出现与较新的环境不一致的语法。这本书的第三个优点就是内容涉猎比较广,除了基本的Clojure语言特性和函数式编程的介绍以外,还有较为深入的与Java互操作的内容,以及实际项目里的代码规范介绍,以及数据库,Web编程的简单介绍。在最后还提供一些进一步学习的网站资源和开源项目。可以说这本书的内容非常全面。因此,如果是完全没有接触过Lisp和函数式编程的新手,如果要看一本书来学习Clojure,那么我推荐优先考虑这一本。这里并不是说另外两本书不好。Programming Clojure这本,我觉得讲得比较简单明快,适合有点Lisp基础的人,而The Joy of Clojure这本则更多的是讲Clojure这门语言背后的哲学。这两本在我眼里,都不算新手向的读物。
  •     读了第一章,翻译得挺不错的,讲得也很详尽,推荐。感觉读起来比另外一本《Clojure程序设计》要更清晰。整本书的覆盖的范围也较广,从语言本身,跟JVM的交互,FP编程,Web开发,数据库操作都有涉及,适合放在案头参考。
  •     如果你没有FP经验,或许真的看完这本书你不知道该如何构建一个项目。因为Clojure给我们的选择实在太多了,没有长时间的实践很难找到最佳实践,好像说了句废话,因为解决方案如此之多,那就只能是不停地实践才能知道哪种是最优路径。另外,我不得不说Clojure是FP领域里最优美的语法,你会深深的爱上这门简洁生动的语言,因为她表达力实在太强了。此书的作者在多个领域都有涉足,另外有很多语言真是精辟之极,举个简单例子(纯凭记忆,可能话语不能与原书匹配):1.不要给我看流程图,把你的数据结构给我,基本这个系统我也就知道怎么运转的了。2.函数的参数名称越具体,说明你的函数功能就越不够通用。当然,这些话不能算绝对,因为在我看来Erlang里面的流程那是相当的重要,但不能放到这个情况下讨论,毕竟Erlang是FP的COP编程,不能放到一起比较。曾经我痛恨Java啰嗦的语法,极弱的表达能力却要用更臃肿不堪的设计模式来弥补,在很长一段时间里我曾认为设计模式竟然是神秘的银弹。多么恨自己浪费了那么多时间,用这些所谓的奇淫技巧,而且还自得其乐却早已深陷其中,当我发现外面的天空如此绚丽的时候,我完全的忽略了终极目的:从解决实际问题入手!这才是真理!这也是FP的魅力,每个FP的热爱者都应该学习Clojure,她没有那些花哨的东西,但却给你强有力的解决方案,STM也不是银弹,其实Clojure没有发明太多新东西,只是将极简做的更极致,我离真正理解Clojure还有距离,目前写到这里。

精彩短评 (总计29条)

  •     最新的Clojure著作,书本身给力,翻译团队更给力!
  •     工具类书,不够有趣,没有aphyr大神的博客写的给力。
  •     非常适合作为学习 Clojure 的参考书近期对 Clojure 比较感兴趣,准备学习一下,按照以往的习惯,先在网上看看资料,然后买几本书,对照着看,因为各个作者的侧重点不同,这样可以通过不同的角度来学习,效率比较高(个人经验,仅供参考)。共买了3本,除了本书之外另外两本是《Clojure 编程乐趣》和《Clojure 程序设计》,三本书大致翻阅了一遍,发现本书讲解比较深入详细,就集中看了前50页,也就是第一章,综合评价如下:优点:1、讲解很深入,涉及细节较多,大多细节写得不错;2、内容涉及的范围比较全面,不仅有语言方面的,更包含了编程思想、项目、工具、平台以及各种扩展知识;3、书末有详细的索引,虽然是英文的--不过总比没有索引强。特别提出的一点就是在我看过的讲解 Lisp 方言的图书中,唯有本书在第一章就把 Lisp 的同像性讲解得最浅显易懂,就是那个“代码即数据”、“可编程的编程语言”的特性。在第11页的这段话说得特别清楚:“Clojure 和所有的 Lisp 方言一样使用了一种不一样的方式:没有定义一种将会被转换成 AST (抽象语法树)的语法,Clojure 代码是直接用表示抽象语法树的 Clojure 数据结构来写的------也就是说,你写...下的 Clojure 代码相当于其他语言里面的抽象语法树”。缺点:1、版式设计比较差,各种不同的内容不太容易区分,跟其他两本书一比就知道差距了,不过考虑到本书的篇幅比较厚,也就不苛求了;2、有些细节交代得不够清楚,不具备指导作用,比如405页那个 Emacs 下 slime 的配置, 基本上用不了。总体而言,还是一本不可多得的好书,所以给 4 颗星。提醒:1、个人感觉本书对读者没有 java 方面的技术背景要求;2、如果你之前学过 Lisp ,哪怕只懂一点基础,那么阅读本书就比较容易理解,如果你熟悉 java 但是没有 Lisp 背景,可能理解起来会有一点慢。所以建议从 java 来的读者最好能具备一点 Lisp 的知识,会好很多。 阅读更多 ›
  •     以前自学过段时间common lisp,一直在实际工作中使用嵌入汇编和c,但是试着直接翻书后面的章节,还是有一些不能直接一眼看明白的内容。所以很满意这内容深度,对我来说恰好。总体感觉,这本书应该适合已经有一两个编程语言实际应用的基础,正在试着学习第二个或者第三个编程语言的同学。初学编程,入门的年轻同学的话,可能后面章节会特别难完全看懂
  •     跳着看完了,对clojure有个初步的认识,不过还没来得及用来处理日常工作。
  •     从小工到专家 进来时啥也不懂 出来时已是专家
  •     看了一下目录,内容挺丰富的。总体来说值得
  •     不适合入门。
  •     看到try catch的地方,不忍直视的语法。
  •     喜欢,务实,言简意赅
  •     不太适合想立即上手的人
  •     花了几天把第一章基础知识给看完了,目前在读第二章,给我的感觉就是这本书讲的很详细,例子给的充分。在内容组织编排上使用了大部分技术书所使用的循序渐进的方式,一点点加入更高级的内容介绍。这本书已经吸引了我!每天下班回来我都会翻几页。
  •     [适合做参考书 以为作为入门读物不太合适 没有Function Programming经验 请先学习LISP ] 重新打分 给了四分(上次给的是三分) 有读了一次 感觉比上次看着有感觉了 可能是因为最近思考比较多吧 :) 算是本好书 最好能看看SICP 对比一下 学而不思则怠吗
  •     读了少许,至少获知:Clojure 是 一种Lisp“方言”;与Java代码无缝互操作;最纯的函数式语言;擅长高并发。
  •     很好,细致
  •     期待第二版!!!
  •     Clojure 已经快忘光了。
  •     粗略的翻阅了一遍,语言方面巨细无遗,可是真正看完之后总感觉缺点什么,实战方面推荐另一本clojure web,可以很快的开始web编程。思维转变比较大,一时间还适应不了,4clojure网站上的题不错,可以看到高手的解法
  •     非常适合入门,即使不会java也能很好上手
  •     很多概念没有介绍就突兀的出来了,要不是之前看过别的,根本不知道怎么回事。
  •     学习曲线稍陡峭,重实践,前半部分是精华,后半部分节奏过快...
  •     讲的不少是和jvm相关的东西,不想接触jvm的同学不用看
  •     翻译得太有才了。。。得中英对照才看得懂。
  •     虽然应该说说书本身的内容,但是用橡皮擦可以把印的字擦掉你敢信?所以做笔记请确保不要用铅笔,免得你想改的同时把本来的字擦掉了。
  •     Clojure高大全从入门到精不通
  •     跟java编程思想一个尿性,得往返读,再读the joy of clojure提高
  •     工作中用到Storm,通过这本书,看到了Clojure的全貌
  •     书非常不错,正在拜读。这次在第三方商店购买,建议快递不要太暴力,一本新书整的跟二手的似的,都开胶了,哎!
  •     内容不错,适合有经验的。
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024