Serious clojurescript

23
Serious Clojurescript 使使 Clojurescript 使使 javascript 使使

Transcript of Serious clojurescript

Page 1: Serious clojurescript

Serious Clojurescript

使用 Clojurescript 开发 javascript 应用

Page 2: Serious clojurescript

学习 javascript 后时间都去哪儿了?

Page 3: Serious clojurescript

还有不稳定的语法 es5, es2015, es2016 …

Page 4: Serious clojurescript

构建 clojure/clojurescript 应用你只需要Leiningen

Page 5: Serious clojurescript

而且 clojure 有很稳定的语法• clojure 是 rich hickey 花了 2 年时间设计的语言,自从出现后语法变化很少• 构建在 jvm 平台上的“严肃”语言• 具有 lisp 血统,是一门 lisp 方言,强大的扩展性和灵活性• clojurescript 是 clojure 的一个扩展 (cljs.jar) ,目标代码是 javascript• 编译后的 js 代码运行在 google closure 环境上

Page 6: Serious clojurescript

Clojure(Clojurescript) 的现状• 官网:

https://github.com/clojure/clojurescript• github info: http://githut.info/• stack overflow 2016:

http://stackoverflow.com/research/developer-survey-2016

Page 7: Serious clojurescript

Lisp• Lisp 是约翰麦卡锡在上世纪 50 年代设计的语言模型• lisp 族语言都是函数式编程语言,具有代码即数据的思想,多种现代语言从 lisp 借鉴了很多特性• 主要实现有 scheme, common lisp, emacs lisp, clojure等• lisp 最显著的特征,是 S 表达式 (love i “Shanghai”)• lisp 的基本语法是前缀表达式和语法糖构成的逻辑控制结构,前缀表达式中列表的第一位是函数,后面都是被调用的参数,相当于直接写出语法分析树

Page 8: Serious clojurescript

历史原因 : 上世纪 80-90 年代间人工智能研究的停滞, lisp machine 梦想的破灭和以 C 为基础的 UNIX 兴起

• 为什么 lisp 没有流行起来?

Page 9: Serious clojurescript

开发者的角度

Page 10: Serious clojurescript

构建 clojurescript 开发环境• java8 :推荐 java8 ,最低 java7• cljs.jar: 一个 clojure 扩展 jar 包• lein: 项目构建工具,现在有了更傻瓜的 boot• figwheel: live coding 工具• 编辑器 : emacs, intelliJ IDEA• 浏览器 : 推荐 chrome• 我们不需要: gulp , webpack 这种 js 构建工具

Page 11: Serious clojurescript

clojurescript 的语言基础• 类型• 控制流

• 条件判断• 递归

• 方法• What’s More

• 宏• protocol 和 record

Page 12: Serious clojurescript

lein 的使用• :dependencies• :plugins• :cljsbuild 的编译选项

Page 13: Serious clojurescript

clojurescript 不经过优化的编译

Page 14: Serious clojurescript

优化选项是 :advanced 的编译

Page 15: Serious clojurescript

使用 figwheel 进行 live coding

• figwheel 通过 websocket 实现的开发环境和浏览器通信• 具有代码热加载, css 热加载,广播等功能• 具有人性化的 debug 面板• 不需要刷新页面,不需要重复之前的操作,随时查询程序状态,随时在编辑环境和 REPL 中和浏览器运行环境交互

Page 16: Serious clojurescript

和 javascript 代码通信• js->clj 和 clj->js 以及不可变数据• import 符合 google closure library 的代码• 引用外部 javascript 代码• CLJSJS

Page 17: Serious clojurescript

操作 DOM

• 操作原生的 DOM 方法• google closure 操作 DOM 的接口• jquery: jayq

Page 18: Serious clojurescript

先进的异步机制core.async

• 生产者消费者模型• go 宏和阻塞• 多个 channel

Page 19: Serious clojurescript

om 和 om.next• om

• om 和 react 的关系• 一个 om 应用

• 下一代 om : om.next ,借鉴了 falcon 和relay

• datascript: 内存型前端数据库

Page 20: Serious clojurescript

构建和调试• log• test• trace

• 断点调试• source map

Page 21: Serious clojurescript

点评开发环境中的持续集成

• 在需要调用 cortex 包的情况下,目前看来不太可能了

Page 22: Serious clojurescript

–Richy Hickey

“javascript reaches, clojurescript rocks”

Page 23: Serious clojurescript

Thank You