这篇文章对 ClojureScript 生态的描述有些过期了,
新的生态能够稍微参考这边的描述 http://cljs-book.clj.im/javascript
我写这篇文章的目的, 主要是介绍 ClojureScript, 介绍其社区的能耐
然而我本人只是按着教程写过简单的 ClojureScript, 并非自身用户
同时, 我最近一直在关注 ClojureScript 的发展, 搜集了很多的资料
总结一下就是我不能给出关于 ClojureScript 一个公允的评价
而是打算有目的地吹捧 ClojureScript, 但愿国内有更多人关注这门语言html
那么个人目的, 或者说出发点, 实际上是 JavaScript 当中的各类问题
咱们知道 JavaScript 最初设计时没有理解清楚需求, 埋了大量的坑
而不少语言是背后有牛人作精心的设计的, 好比 Clojure
JavaScript 本打算学 Scheme, 没成功, 然而 Clojure 可算成功了
Clojure 继承了大量的 Lisp 特性, 属于很明显的 Lisp 和 JVM 结合的技术前端
Clojure 的做者是 Rich Hickey, 2011 年有他的采访这样介绍他:
http://codequarterly.com/2011...java
Best known as the inventor of Clojure, a Lisp that runs on the Java Virtual Machine and the first new member of the Lisp family to attract any widespread interest since Scheme and Common Lisp, Rich Hickey has been a software developer and consultant for two decades.node
Prior to starting work on Clojure, he made four attempts to combine Lisp with either Java or Microsoft’s Common Language Runtime: jfli, Foil, Lisplets, and DotLisp but Clojure was the first to draw significant attention.react
In past lives Hickey has been a music composition major, a guitarist, and a serious C++ programmer, even teaching an Advanced C++ course at New York University. In this interview, Michael Fogus talks with Hickey about complexity, abstraction, and the past, present, and future of Clojure.android
我在网上看到他的很多的演讲, 风格其实差很少, 观点也差很少
他当过大学老师, 常常演讲开头翻词典解释名词的意思, 总之就是那样一个风格
观点都是函数式编程, 不可变数据居多, 围绕着 Clojure 语言跟 Datomic 数据库
还有人专门写了个文章, 介绍 Rich Hickey 一向的那些主张:ios
The Unofficial Guide to Rich Hickey's Brain
http://www.flyingmachinestudi...git
时间一晃而过, Clojure 发明是在 2007 年, 到如今已经有 8 年的时间了
https://en.wikipedia.org/wiki...
按照去年的统计, 大体是 GitHub 上第 23 名的语言, 跟 Haskell 和 Lua 差很少
http://githut.info/
整个语法是 Lisp 融入了 Java 风格语言的一些括号, 就像是这样github
(def ^{:arglists '([x seq]) :doc "Returns a new seq where x is the first element and seq is the rest." :added "1.0" :static true}
Clojure 首先是在 JVM 上运行的, 借助了 JVM 上的 Bytecode:
http://blog.ndk.io/2014/01/26...
总之 Clojure 到如今已经有了其巨大的生态圈, 并且熟练引用 Java 类库:
https://github.com/razum2um/a...
而后终于说到了 ClojureScript, 前面说运行在 JVM 上, 这边开始浏览器了
ClojureScript 是 2011 年开始开发, 后面主要是 David Nolen 在露脸
ClojureScript 在几年当中逐渐完善工具链, 渐渐变得易用
同时能, 也一阵一阵地把 Clojure 更新的功能移植过来
复杂的历史能够看这份 PDF 来了解:
http://www.michielborkent.nl/...
我接触 ClojureScript 主要是在 LightTable 名闻遐迩的那段时间
Chris Granger 用 ClojureScript 开发 LightTable, 运行在 node-webkit 上
LightTable 特别厉害的是他的 live coding 功能, Clojure 代码直接显示结果
并且咱们也看到了 JavaScript 在其中运行, 进行代码热替换, 很是震撼的开发工具
live coding 今后一发不可收拾, Chris Granger 也把 ClojureScript 夸上天上了
后来发生的事情终于跟我有点搭上了, 2013 年, Om 开始开发了
其实我到 2014 年夏天才接触 React 的, 但总之事情蔓延到 React 社区过来了
Om 神奇的地方在于他的性能听说在 React 的基础上提高了 3 倍.. 难以想象
背后端缘由呢, 是不可变数据, 后来 Facebook 作了 immutable-js 也达到了效果
但是这么一搞, React 社区对应自身的理解慢慢就变了
Om 据说作了几个事情, 首先是上边说的不可变数据, 提升 DOM Diff 效率
而后还有 render loop 处理, 合并 DOM 操做, 具体能够看文章
http://swannodette.github.io/...
随后更多细节的出现, 让人都以为用不可变数据写 React 都是理所固然的了
http://www.slideshare.net/bor...
还有这个 David Nolen 的采访: Om: Enhancing Facebook's React with Immutability
http://www.infoq.com/news/201...
不过这个事情还没完, ClojureScript 社区实际上超能折腾
还记得咱们用 react hot loader 时候以为多厉害, 还有 Redux 以为多震撼
可是 Redux 做者说了他就是受到 Elm 跟 figwheel 的启发才弄出来的
Elm 前面我写过了, 一门用来研究的 Haskell 方言嘛
而 figwheel, 实际上就是 ClojureScript 社区的方案用来作 React 的 live coding
https://github.com/bhauman/le...
Live Coding 通过 Bret Victor, Chris Granger 这些人一搞, 已经深刻人心了
至少前端开发若是还作不到代码热替换, 多少有点, 那个, 对吧, 不够好玩
由于 ClojureScript 数据不可变嘛, 实现起来比 JavaScript 仍是要容易一点
关于 Figwheel 的视频多看一下就知道了, JavaScript 还在追赶呢, 什么 Amok, Redux 的..
Bruce Hauman - Developing ClojureScript With Figwheel
https://www.youtube.com/watch...
Interactive Programming in ClojureScript
http://rigsomelight.com/2014/...
因为这样的事情, React 如今跟 Clojure 社区越走越近
可是怎么看, JavaScript 实现 immutable, ClojureScript 但是默认就实现了的
Clojure 的 persistent data structure 经过编译, 很直接就在 ClojureScript 实现
不是要函数式编程吗? JavaScript 一堆历史包袱, 怎么和看起来就是 Lisp 的 Clojure 比
还有事件处理, Clojure 有 core.async
, 我也不懂, 但 JavaScript 呢, promise?
还在 ClojureScript 学习门槛过高了, Webpack 也不兼容, 不会翻了天
随后发生的戏剧性的事情是, ClojureScript 也号称先后端都能写了
原本 JavaScript 同时写前端后端, 风光了好久, 但是呢 Node.js 性能也就那副样子
跟跑在 Clojure 上的 JVM 固然是比不了, 人家是正经的服务器端语言, Java 级别的
而后前端呢, Om 一来, 前端也能函数式编程了, ClojureScript 一编译, 正好
因而 Clojure 后端写高性能服务器, 前端高性能 DOM 操做, 反正全栈了
接着又来一招, 后端有 Dotamic 数据库, 前端又给实现了 DataScript
前面讲过, 就是 persistent data structure 当数据库用嘛, 反正先后端又打通了
JavaScript 这边也算争气, 由于 iOS 有 JavaScriptCore, 能运行嘛
咱们知道 React Native 就是借此在 iOS 上运行的, 对前端开发者来讲还不错
但是呢, 最近事情恰恰多了起来, Clojure Europe 上, David Nolen 介绍了新项目
大体上就是 ClojureScript 作一些处理, 减小 JVM 的依赖, 更加方便嵌入
比方说, 前些天出来的 Replete, 就是一个在 iOS 上运行 ClojureScript REPL 的例子
http://blog.fikesfarm.com/pos...
又来了一个叫 Replicator 的项目, 干脆 Android 上也来搞一个
http://tahmid.me/posts/2015-0...
这下也热闹了, Bootstrapped ClojureScript 目标仍是挺远大的, 看 Wiki:
https://github.com/clojure/cl...
归纳一下上边提到的 ClojureScript有哪些好处
做者开发经验多, 设计语言考虑得多, 不像 JavaScript
天生支持 Lisp Macro 跟 persistent data structure, 而 JavaScript 靠山寨
函数式编程支持明显比 JavaScript 好
JavaScript React 能作的, ClojureScript 也能作, 还更能折腾
在后端有 Clojure 撑腰, 又把 Node.js 给压下去了
至于坏处呢... 本身翻文档看看语法学起来多难就知道了
http://funcool.github.io/cloj...
还有 JVM 的启动时间, Emacs 的嬗变程度, leningen 的不适应程度
固然你还能够看看 Clojure 中文社区冷清程度...
http://clojure-china.org/
http://blog.clojure.cn/
https://groups.google.com/for...
可是, 我不明白为啥 QQ 群(130107204)恰恰有好多人
最后 Rich Hickey 的演讲让我获益良多, 有兴趣的同窗能够看看
https://github.com/matthiasn/...
http://www.infoq.com/author/R...固然看得目的主要是跟 Brendan Eich 比比, 谁看起来更靠谱