Clojure编程

出版时间:2013-3-26  出版社:电子工业出版社  作者:Chas Emerick,Brian Carper,Christophe Grand  译者:徐明明,杨寿勋  
Tag标签:无  

前言

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

内容概要

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

作者简介

Chas Emerick是软件公司Snowtide informatics的创始人。自2008年以来,致力于Clojure语言本身以及一些开源项目的开发;长期在cemerick.com撰写Clojure、软件开发实践、创业精神,及其他主题的文章。Brian Carper是一位心理学研究领域的专业程序员,用Clojure从事数据分析与web开发。他开发过一个把Clojure代码转化为CSS代码的编译器以及一个操作关系型数据库的类库,经常在briancarper.net上发表Clojure文章。Christophe Grand是一个独立顾问,现居法国里昂。他主要从事Clojure培训与编码,参与了Clojure语言的开发,撰写过Enlive和 Moustache类库,也是Counterclockwise——Clojure IDE for Eclipse的贡献者,经常在clj-me.cgrand.net上发表有关Clojure的文章。

书籍目录

前言 第1章进入Clojure仙境 为什么要选择Clojure? 获取Clojure Clojure REPL 不!括号真的不会让你瞎了眼 表达式、操作符、语法以及优先级 同像性 Clojure Reader 标量字面量 注释 空格和逗号 集合字面量 reader的一些其他语法糖 命名空间 符号求值 特殊形式 阻止求值:quote 代码块:do 定义Var:def 本地绑定:let 解构(1et,第2部分) 定义函数:fn 条件判断:if 循环:loop和recur 引用var:var 和Java的互操作:和new 异常处理:try和throw 状态修改:set! 锁的原语:monitor.enter和monitor—exit 小结 eval 这只是开始 第1部分函数式编程以及并发 第2章函数式编程 所谓函数式编程,到底意味着什么? 谈谈值的重要性 关于值 值与可变对象的比较 一个关键性的选择 作为头等公民的函数以及高阶函数 Apply,Partial 函数(功能)的组合 编写高阶函数 利用可组合的高阶函数构建一个日志系统 纯函数 为什么纯函数很有意思? 现实生活中的函数式编程 第3章集合类与数据结构 抽象优于实现 集合:collection 序列:Sequence Associative 索引集合:Indexed 栈:stack set 有序集合:sorted 访问集合元素的简洁方式 习惯用法 集合、key以及高阶函数 数据结构的类型 列表:List vector set map 不可变性和持久性 持久性与结构共享 易变集合 元数据 用Clojure的集合来小试牛刀 标识符和循环引用 思维方式的改变:从命令式到函数式 遍历、更新以及Zipper 总结 第4章多线程和并发 计算在时间和空间内的转换 delay future promise 简单的并行化 状态和标识 Clojure的引用类型 …… 第2部分构建抽象 第3部分工具、平台以及项目 第4部分实战 第5部分杂项 索引

章节摘录

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

名人推荐

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

图书封面

图书标签Tags

评论、评分、阅读与下载


    Clojure编程 PDF格式下载


用户评论 (总计10条)

 
 

  •   非常适合作为学习 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 是 一种Lisp“方言”;与Java代码无缝互操作;最纯的函数式语言;擅长高并发。
  •   看了一下目录,内容挺丰富的。总体来说值得
  •   虽然应该说说书本身的内容,但是用橡皮擦可以把印的字擦掉你敢信?所以做笔记请确保不要用铅笔,免得你想改的同时把本来的字擦掉了。
  •   花了几天把第一章基础知识给看完了,目前在读第二章,给我的感觉就是这本书讲的很详细,例子给的充分。在内容组织编排上使用了大部分技术书所使用的循序渐进的方式,一点点加入更高级的内容介绍。这本书已经吸引了我!每天下班回来我都会翻几页。
  •   喜欢,务实,言简意赅
  •   内容不错,适合有经验的。
  •   非常适合入门,即使不会java也能很好上手
 

250万本中文图书简介、评论、评分,PDF格式免费下载。 第一图书网 手机版

京ICP备13047387号-7