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 泛型 错误处理 指针 运行速度 启动速度 应用分发 高并发 学习成本 速度、安全性、便利性、可移植性

苹果?