Serious clojurescript
Transcript of Serious clojurescript
Serious Clojurescript
使用 Clojurescript 开发 javascript 应用
学习 javascript 后时间都去哪儿了?
还有不稳定的语法 es5, es2015, es2016 …
构建 clojure/clojurescript 应用你只需要Leiningen
而且 clojure 有很稳定的语法• clojure 是 rich hickey 花了 2 年时间设计的语言,自从出现后语法变化很少• 构建在 jvm 平台上的“严肃”语言• 具有 lisp 血统,是一门 lisp 方言,强大的扩展性和灵活性• clojurescript 是 clojure 的一个扩展 (cljs.jar) ,目标代码是 javascript• 编译后的 js 代码运行在 google closure 环境上
Clojure(Clojurescript) 的现状• 官网:
https://github.com/clojure/clojurescript• github info: http://githut.info/• stack overflow 2016:
http://stackoverflow.com/research/developer-survey-2016
Lisp• Lisp 是约翰麦卡锡在上世纪 50 年代设计的语言模型• lisp 族语言都是函数式编程语言,具有代码即数据的思想,多种现代语言从 lisp 借鉴了很多特性• 主要实现有 scheme, common lisp, emacs lisp, clojure等• lisp 最显著的特征,是 S 表达式 (love i “Shanghai”)• lisp 的基本语法是前缀表达式和语法糖构成的逻辑控制结构,前缀表达式中列表的第一位是函数,后面都是被调用的参数,相当于直接写出语法分析树
历史原因 : 上世纪 80-90 年代间人工智能研究的停滞, lisp machine 梦想的破灭和以 C 为基础的 UNIX 兴起
• 为什么 lisp 没有流行起来?
开发者的角度
构建 clojurescript 开发环境• java8 :推荐 java8 ,最低 java7• cljs.jar: 一个 clojure 扩展 jar 包• lein: 项目构建工具,现在有了更傻瓜的 boot• figwheel: live coding 工具• 编辑器 : emacs, intelliJ IDEA• 浏览器 : 推荐 chrome• 我们不需要: gulp , webpack 这种 js 构建工具
clojurescript 的语言基础• 类型• 控制流
• 条件判断• 递归
• 方法• What’s More
• 宏• protocol 和 record
lein 的使用• :dependencies• :plugins• :cljsbuild 的编译选项
clojurescript 不经过优化的编译
优化选项是 :advanced 的编译
使用 figwheel 进行 live coding
• figwheel 通过 websocket 实现的开发环境和浏览器通信• 具有代码热加载, css 热加载,广播等功能• 具有人性化的 debug 面板• 不需要刷新页面,不需要重复之前的操作,随时查询程序状态,随时在编辑环境和 REPL 中和浏览器运行环境交互
和 javascript 代码通信• js->clj 和 clj->js 以及不可变数据• import 符合 google closure library 的代码• 引用外部 javascript 代码• CLJSJS
操作 DOM
• 操作原生的 DOM 方法• google closure 操作 DOM 的接口• jquery: jayq
先进的异步机制core.async
• 生产者消费者模型• go 宏和阻塞• 多个 channel
om 和 om.next• om
• om 和 react 的关系• 一个 om 应用
• 下一代 om : om.next ,借鉴了 falcon 和relay
• datascript: 内存型前端数据库
构建和调试• log• test• trace
• 断点调试• source map
点评开发环境中的持续集成
• 在需要调用 cortex 包的情况下,目前看来不太可能了
–Richy Hickey
“javascript reaches, clojurescript rocks”
Thank You