用 Clojure 改善 Java 项目的开发体验 刘鑫

QCon大会

2019/06/25 发布于 技术 分类

QCon  QCon2019 

文字内容
1. Java 伴侣和风味 刘鑫 Java 项目的编程体验提升
2. 自我介绍
3. 自我介绍 • 布路诺超链科技高级技术经理。 • 曾经的 Python Tutorial 中文版维护者 • Java 工程师
4. 目录 • • • • • • Java 的优势与不足 语言互补 框架和工具库 Java Akka 与 Clojure Clojure 工具 工程实践中的一些经验
5. Java 是当代信息产业最重要的“饮料” • • • • • 中庸的语法 久经考验的工程实践 活跃的社区 优秀的运行时环境 丰富的框架和工具集
6. 现代的 Java • • • • • 类型推断和约束 并发标准库和第三方支持 Spring 和 Guice 为代表的 IOC 技术栈 垃圾回收算法及其它 JVM 技术的发展 来自其它 JVM 语言的馈赠
7. Java 的不足和限制 • • • • 语言功能发展缓慢 类型较弱,缺少高级的约束推断能力 语言级别的异步支持较弱,并且多年没有大的进展 对于得到实践验证的业务表达语法,缺少吸收和学习
8. 最佳伴侣 • • • • 静态语言+动态语言 经典工程语言+Lisp 类型约束+数据描述 工程框架+快速开发技术
9. 动态调用应谨慎使用 Free. Is Not Freedom
10. 互嵌入无处不在
11. 用 Clojure 描述数据
12. Spec 提供强有力的规范定义
13. 用宏来表达 Akka Stream
14. Clojure.core.async • • • • 完整的进程内异步模式支持 便捷简练的形式 对语法风格中立,无侵入 性能优秀
15. Akka • • • • • 完整的分布式异步体系 丰富完整的响应式编程哲学 活跃的社区 经受考验的实践表现 与 Clojure/Java 结合良好
16. Akka Clojure
17. Leiningen 体系 • Leiningen And Maven • Leiningen repl • Leiningen and nrepl • Clojars • Clojurescript
18. Gorilla http://gorilla-repl.org/ https://clojars.org/org.clojars.benfb/lein-gorilla
19. 火焰图 https://github.com/jstepien/flames
20. Clojure Akka 实践 • • • • 利用 Clojure 数据结构作为消息机制 利用 Clojure multimethod 实现 pattern method 利用 Clojure 宏实现高级语法糖 利用 nrepl 实现高级节点管理
21. 应该做什么 • 组合,而非替代 • Clojure 是 Java 的 DSL • 根据具体的团队和项目积累最佳实践 • 互补协作 • AKA • 文档库建设 • 拥抱类型 • 拥抱测试 • 拥抱自动化
22. 应该追求什么 • • • • • • • 开发效率和编程语言的人机工程 正交工具集 最佳实践 可监控 可追溯 可度量 可复现
23. 应该警惕什么 • 过多的隐式代码生成 • 重复,易错,繁琐的手工劳动 • 架构腐化 • • • • • • 配置不一致 无法快速部署开发环境 无法自动化部署新节点 无法构建集成测试环境 难以引入新技术 运维失控 • 独门秘籍
24. 自我介绍