Top Banner
Serious Clojurescript 使使 Clojurescript 使使 javascript 使使
23

Serious clojurescript

Apr 14, 2017

Download

Software

Young Lee
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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