当今时代编程语言非常多,每种语言都有各自适用的范围,但是我们应该如何选择呢?今天我将从云计算的角度来讨论下编程语言的选择。
本文主要对比golang和Java
云时代下对于编程语言的要求
在云计算、容器化相当火爆的今天,我认为对于编程语言的要求有如下几点:
- 应用资源占用下,包括镜像大小、CPU利用率、内存利用率。
- 应用启动速度要快。在serverless场景下要求更加严格
- 语言的运行速度或者优化要非常高效
- 开发效率要高,当前软件工程师成本是非常高的
从语言运行机制角度
这里说的语言的运行机制主要是讨论语言是解释型(interpreter)还是编译型(compiler)。当然解释型和编译型之间也是比较模糊的。
解释型(一般流程):source code -> lexer(词法分析)-> parser(解析) -> evaluate(解释执行)
编译型:source code -> 编译为机器码 -> 执行
当然有些interpreter的实现还包括IR(中间表示),比如Java会将源码先翻译为字节码,然后在JVM中执行。并且在JVM中还会将某些热点代码采用JIT机制编译为机器码来带来效率的提升。
interpreter VS compiler
- 一般来说相对于编译型的语言,解释型语言运行效率会低一些。因为编译器会做相当多的优化,并且执行的是二进制代码。
- 解释型的语言在跨平台下会有更好的表现,由于存在解释器(例如:JVM),代码只需要翻译为字节码即可,跟底层操作系统无关。但是编译型语言需要将代码编译为特定运行环境下的二进制代码,所以跨平台会比较困难。但是在当前容器化的时代,已经屏蔽了底层运行环境,所以解释型语言的这个优势也消失了。
结论:从语言的运行机制角度考虑,我认为编译型语言在云计算时代胜出。
从资源占用角度
golang运行时不需要类似虚拟机的组件,而Java必须运行在JVM中。而一个JVM就占用了不少资源。
同时golang写出来的程序镜像大小相对于Java也会小很多。
在CPU利用率、内存利用率上,golang表现也更加优秀。
结论:golang胜出
从开发效率角度
- golang语法简单,学习成本低
- golang开发相对于java开发效率高(个人经验体会)
- golang并发思想更加容易理解,并且简单易用
- golang内置gofmt等工具,能够保证团队内代码的一致性(这一点在团队中是比较重要的)
结论:golang在当前云计算时代会更加合适,并且golang相对于Java会发展越来越好。
PS:Rust最近几年发展也非常快。相对于golang,Rust运行效率更低,并且没有GC。但是Rust上手成本较高,如果Rust团队能够解决这个问题,那么Rust后续发展也会更加顺利。