QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

用 Clojure 改善 Java 项目是种什么样的体验?

  • 2019-03-06
  • 本文字数:1927 字

    阅读完需:约 6 分钟

用 Clojure 改善 Java 项目是种什么样的体验?

关于软件开发,特别是服务端软件开发的技术栈的探索,几乎贯穿了我整个职业生涯。几年前我就想写这样一个专题,但是开了个头就又很快搁笔。反复思考,感觉自己仍然太过浅薄。近几年随着技术领域的整体进步,和自己的学习积累,感觉现在是个比较合适的时机,建立一个围绕 Java 体系的工程技术栈,将它整理成文字,与大家分享。


一方面,Java8 之后,语言的进步,使它在生产力上与旧版本已有很大提高。虽然 Java 与新时代的编程语言相比,仍显得比较笨拙,但是做为一个技术体系的基础,已经足够可用。另一方面,基于 JVM 环境的编程语言的发展,使得 JVM 可以成为一个通用的运行时环境,在其上利用若干互补的编程语言构建工程。


JVM 平台上最著名的新贵莫过于 Scala,特别是 Spark 的兴起为 Scala 争取了很多爱好者。但是就我亲身体验而言,Scala 也有一些问题:


  • 首先是 Scala 本身是一门复杂语言,要用好这门语言,需要大量的领域知识。当然将其作为一个“更好的 Java ”来用,未尝不是一件好事,这也是我向普通用户推荐的用法。要发挥 Scala 的全部优势,需要一个优秀的团队,成员有对代码风格和质量的追求和共识,愿意为驾驭工具,提高生产力,付出精力;

  • 其次 Scala 的构建工具 sbt 实在不能说令人满意;

  • 另外就是,Scala 实在跟 Java “太像”了,它是一个自成一体的复杂体系,如果用 Scala,很难划清一个边界,找到其它语言的切入点。这倒不能说是 Scala 的缺点,更准确的说,其它技术需要 Scala 的多,Scala 需要其它技术的少。


我尝试了 Java+Clojure 的体系,发现是一个非常好的组合。Java 是静态编译型语言,Clojure 是动态类型,虽然它本质上仍然是编译型的,但是可以在 Repl 中方便的交互,也可以以脚本形式运行。两者可以在工程上建立非常清晰的功能边界,各司其职。


Clojure 的构建工具 Leiningen 是 Maven 的高级封装,可以充分利用 Clojure 的语法和 Maven 的资源。Clojure 的语言风格和内置库,都强调了与 Java 的互通,而 S 表达式内在的数据抽象能力,以及大量依赖 Clojure 语法的功能支持,可以将 Java 项目变得更敏捷和干净。在 Java 项目中引入 Clojure ,可以有效地提高生产力。


或许 Java 语言层面的笨拙,本身也促进了其工具库和框架的蓬勃发展,现代 Java 生态中,负责组建项目架构的 Spring / Guice,提供并行 / 并发抽象的 Java Concurrent 和 Akka、Clojure.core.async 、提供数据库访问的 Hibernate 等,都是很好的作品。在具体的项目中,找到一个互补的工具集很有意义。


一个复杂工程,往往不是单一架构和技术栈能够覆盖的,技术组合能够互补就很重要了。例如异步框架中 Vert.x 曾经是我期待很高的一环,它为多种语言提供了 SDK ,包括 Java、Scala、Node.js 等。但是实践中这个东西完全无法让人满意,在高性能压力下,出现大量无法管理的错误。更重要的是它非常的排外,一旦在项目中使用 Vert.x,就要整个在编程风格上遵循它的需要,大量的回调并没有节省开发人员的思考时间,相反还要削足适履,不断思考自己的代码逻辑是否会阻塞框架。而它的异步安全,依赖全局的单一 Vertical 对象,在原生支持多核并行的 JVM 环境下,强制开发人员依赖 GIL,是一个非常愚蠢的退步。


相反,我在尝试 Akka 的过程中,体验非常好,Akka 不会强制用户在一个单一的 Materializer 下运行逻辑,跨节点扩展非常容易,而进程内的 Actor 运行负担也非常小,接入 Akka 的过程很友善,并不会污染 Actor 之外的代码风格,在 Spring MVC 中使用 Akka 也不会有任何问题,我还尝试在 Google Cloud 的 App Engine 实例(war 环境)中用 Akka 管理爬虫逻辑,整个过程没有任何问题。这也印证了前面所说的“其它 JVM 技术需要 Scala ”的场景。感谢 Akka 提供了完整的 Java DSL,虽然它只能用在 JVM 项目中,但是对于服务端开发并不是很大问题。我编写了很多在 Clojure / Java 中使用 Akka 的代码,组合使用了各种各样的框架和库,都没有遇到风格上的冲突。更多干货,我将在今年举办的 QCon 全球软件开发大会广州站上,为大家详述。


作者简介:


刘鑫,从事软件开发工作近 20 年。曾在火币网的钱包组和撮合引擎组担任技术专家。是 Python 中文社区的早期成员,维护了 2.x 时代的 Python Tutorial 中文版翻译。近年的关注点在 Java + Clojure 的技术组合,以及研发团队的工程化管理等方面。


5 月 25-28 日,QCon 全球软件开发大会广州站将邀请刘鑫老师作为「编程语言」专题的讲师,现场分享实战经验。还有来自 BAT、京东、滴滴、网易等实践专家,围绕微服务、大前端、人工智能、高可用高性能架构、DevOps…带来 TOP 70+最佳实战案例分享。最后附上 8 折报名福利,立减 1360 元,咨询可致电鱼丸:13269078023(微信同号)。更多详情可戳:http://t.cn/EIl5B0h


2019-03-06 14:055955

评论

发布
暂无评论
发现更多内容

IntelliJ IDEA 2024 for Mac:强大的集成开发环境

iMac小白

Xmind Pro专业版思维导图绘制软件

iMac小白

荣获优秀共建方!开放原子开源大赛&龙蜥机密赛题决赛圆满结束

OpenAnolis小助手

操作系统 龙蜥社区 机密计算

时之鑫门窗|为什么选购门窗时推荐用十大品牌门窗

科技热闻

好消息!职场<火焰杯>测试开发大赛开始报名啦!

测试人

软件测试 自动化测试 测试开发

Cornerstone for Mac(最好用的SVN管理工具)v4.2永久激活版

iMac小白

大模型微调提升AI应用性能

百度开发者中心

人工智能 大模型

全球首发!龙蜥社区助力 Intel SPR 加速器上云

OpenAnolis小助手

云原生 操作系统 envoy 龙蜥社区 Intel SPR

助力用户快速学习、使用大模型,天翼云即将上线Llama 3大模型学习机

编程猫

Syncovery for Mac:高效文件同步与备份工具

iMac小白

Syncovery下载 Syncovery破解版 Syncovery mac

Aiseesoft Data Recovery for Mac:数据恢复软件

iMac小白

microsoft remote desktop mac版10.9.6 远程桌面连接工具

iMac小白

《龙蜥理事说》第二期对话统信软件 AI 让操作系统更智能

OpenAnolis小助手

AI 操作系统 国产操作系统 龙蜥社区

基础设施SIG月度动态:社区官网上线《龙蜥理事说》专题页,内核门禁提速

OpenAnolis小助手

开源 操作系统 龙蜥社区 龙蜥社区SIG

Go-Zero微服务快速入门和最佳实践(一)

王中阳Go

Go golang 分布式 微服务 go-zero

合合信息Embedding模型获得MTEB中文榜单第一

陈橘又青

合合信息

Tower for Mac v10.5(399)注册激活版

iMac小白

Tower下载 Tower mac版 Tower破解

软件测试如何选择最佳的自动化测试定位策略?

测试人

软件测试

MES系统功能有什么?对企业有什么价值?

万界星空科技

工业互联网 制造业 生产管理系统 mes 万界星空科技

重回铁王座!时隔5年,Quill 2.0 终于发布啦!

OpenTiny社区

前端 富文本

4 月 30 日启动报名!2024 开源之夏&龙蜥社区赛题等你来挑战

OpenAnolis小助手

开源 操作系统 龙蜥社区 开源之夏

Anolis OS 23.1 BETA 预览版:龙芯同源异构完成,支持更多芯片厂家

OpenAnolis小助手

开源 操作系统 龙蜥社区 龙蜥操作系统 Anolis OS

华为云FunctionGraph构建高可用系统的实践

华为云开发者联盟

华为云 华为云FunctionGraph 华为云开发者联盟 华为云Serverless 企业号2024年4月PK榜

DxO Nik Collection 6 (PS、LR滤镜插件套装) v6.10.0中文版

iMac小白

安全厂商长擎软件加入龙蜥社区,共建领先的 OS 基础设施

OpenAnolis小助手

操作系统 国产操作系统 龙蜥社区生态伙伴

浪潮信息联合龙蜥社区推出 InManageBoot:让开局交付变得如此简单!

OpenAnolis小助手

运维 操作系统 龙蜥社区 InManageBoot

MAC系统进程管理工具 :MenuBar Stats for mac

iMac小白

程序会自己抛出错误,干嘛还要写try catch?

高端章鱼哥

张朝阳对话华为Fellow陈海波:万物智联时代,鸿蒙如何实现“换道超车”?

最新动态

AnyMP4 Data Recovery for Mac:高效数据恢复新

iMac小白

灵魂画手有救了!字节开放模型 Hyper-SD,最快 1 步生成 SOTA 级图片(有demo 来试试

字节跳动开源

人工智能 视觉智能 开放应用模型 扩散模型

用 Clojure 改善 Java 项目是种什么样的体验?_编程语言_刘鑫_InfoQ精选文章