java 的弊端
做软件开发已经 10 多年了,主要是偏业务的 web 应用开发, 主要语言是 java, js(typescript),ruby,shell, sql等, 主要框架为 springboot, jquery, vue, rails 等。
随着微服务和云原生的发展,容器成为新一代的虚拟单元,传统 java 技术栈在这一块的不足越发明显:
- 镜像大
- 内存占用高
- 启动慢,跟语言和框架层面都有关系
- 运行慢
- 高并发不容易
- 分发不方便
这些不足跟 java 的虚拟机,面向对象,反射,垃圾回收等语言特性有关。这些特性并不都是坏处, 但随着外部环境的变化,有些特性变的不适用或者不再有优势。
java 社区也在做一些改进,如 java 的反应式编程框架 vertx, 可直接将 java 代码编译成可执行文件的 GraalVM 虚拟机等,但总归是有不少历史包袱,只能在某一些方面做有限改进。
新兴语言
反观一些新兴语言,在运行速度, 资源占用,分发便利性等方面有全面的优势,比较典型的就是 go 和 rust。
go 在网络领域有惊人的表现, 出现了一大堆优秀框架,如 docker, k8s, traefik, canddy 等。
rust 知名项目少一点,有 deno, tikv,libra,ripgrep 等
其中 tidb 作为 new sql 的代表数据库产品之一获得了巨大的成功,它使用 rust 作为存储引擎开发语言, go 作为解析执行引擎开发语言,是两种语言使用的集大成者。
下面,我以一张图表多方面比较 java, go, rust 语言的优劣。
虚拟机 静态强类型 gc 泛型 错误处理 指针 运行速度 启动速度 应用分发 高并发 学习成本 速度、安全性、便利性、可移植性