以下纯个人观点。各个领域的涉足深度都是半吊子,想到哪说到哪,发表几个对现代编程语言的看法:
一个语言要火起来需要几个要素:
- 全球有影响力的大公司支持
- 重量级的开源项目
- 生态,库足够丰富
5G的应用,物联网,电池对编程的影响
大背景:面向5G的应用和万物互联,设备的微型化,电池技术的缓慢进展,大量设备的成本控制。几ms和几十ms的差别对人是无感知的,但对物是差别巨大,所以对实时响应,响应时间有了更高的要求。摩尔定律的失效,集群分布式计算的发展,榨干每一滴的算力等等大背景。
过去的client-server,brower-server时代,计算都放在本地pc或者远端服务器上。而未来是万物互联的时代,一个核心芯片才几毛钱,算力非常有限,电池对设备的算力也有限制,数量多对成本也有限制。
这就颠覆了过去不注重程序执行效率而注重编程效率的方式,过去的牺牲点性能,只要功能实现,只要能在更高的抽象上实现快速开发这种思想在越来越多的场合不适用。
java 和 容器
java 一直一来的宣传口号:java虚拟机一次编译,到处运行。
这个是java的优势也是劣势,需要带java虚拟机,使得程序运行较重。这在过去的client-server时代,问题不大,对pc机器的性能影响忽略不计,但是在现在万物互联的时代,就很成问题。
容器这一概念的提出,和java虚拟机的一次编译到处运行,有很多重合。把java优势的地方变成了容器化的优势。java的优势大打折扣。
容器化, 这点 rust 的优势就体现出来了, 使用 FROM scratch 打包出来的镜像大小是 9.75MB , 相比 spring boot 项目, 基本的 openjdk:17-alpine 就有 320 多 MB 加上项目程序,也要 340 多 MB 了。
内存安全,线程安全
现在的业务大量是高并发业务,对线程安全提出更高要求。另外底层系统以及大量的嵌入式设备对内存安全也提出了更高的要求。
静态类型编程语言
静态类型编程语言有利于编译器优化,生成效率更高的代码。编译器不仅可以针对芯片架构进行优化,还可以争对具体芯片型号进行优化。且静态类型语言编译后可以极大减少编译后的程序体积。这对以往的pc环境没这么高的需求。但是对万物互联来说,微型设备的内存和算力是有限的,且几ms和几十ms的差别对人是无感知的,但对物是差别巨大,所以对实时响应,响应时间有了更高的要求。
及早发现错误
程序的安全,程序的bug对成本的影响越来越大。
除了 IDE 的辅助下,更期望一种语言可以在编译期间就把错误尽可能的发现。这往往带来严格的语法限制,更底层的思维。但是这往往一开始比较痛苦,习惯以后会觉得理所当然的,也对编程的效率提升也有很大的帮助。
Rust满足了上面所有的对现代语言的要求。Rust 2015年才正式发版,对之前的编程语言的借鉴,特别综合了(或有心或无意)c和java的优势劣势