为什么 2010 年前后诞生的语言(如 Golang, Rust, Swift)都是直接编译成机器码?

前端之家收集整理的这篇文章主要介绍了为什么 2010 年前后诞生的语言(如 Golang, Rust, Swift)都是直接编译成机器码?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么 2010 年前后诞生的语言(如 Golang,Rust,Swift)都是直接编译成机器码?
之所以问这个问题是因为知乎上有问题“为什么 2010 年前后诞生的语言(如 Golang,Swift)都是强类型 + 静态?”,其中大多数答案都是在说动态语言存在的问题

那么按照这个逻辑,这三门语言都不是像JAVA、C#那样先编译成中间代码(JAVA字节码和CIL)、在运行时再JIT成机器码,那是不是说明中间码这种思路也有问题呢?
按投票排序 按时间排序

2 个回答

java和c#都可以编译成机器码,也可以JIT编译,有了LLVM IR,c/c++/swift也不一定非要直接编译成机器码。苹果已经不允许store上swift开发的应用直接编译为机器码,而是bitcode的形式,和jvm的字节码所要达到的目的差不多。比如说哪天苹果的芯片改个指令集,s… 显示全部
java和c#都可以编译成机器码,也可以JIT编译,有了LLVM IR,c/c++/swift也不一定非要直接编译成机器码。
苹果已经不允许store上swift开发的应用直接编译为机器码,而是bitcode的形式,和jvm的字节码所要达到的目的差不多。比如说哪天苹果的芯片改个指令集,store上的应用啥都不用管直接获得性能提升。jvm的字节码也是如此,android art虽然支持aot编译,但也同样如此,android采用renderscript而不接受opencl也是这个考虑。

另外2010年前后诞生的语言很多,jvm上的,dart/typescript和js相关的,nim,elixir,crystal,kotlin,ceylon等等,你看看有几个是直接编译为机器码的?
至于Golang为何还要编译为机器码, 在未来,Go语言能否撼动Java在Android、Hadoop大数据、云计算领域的地位?这个问题中,王益的回答里“Dockerization的开销”这段说的很清楚了。

关键不是在字节码还是机器码,而是【类型系统】的强弱问题,这个问题很重要,而且似乎达成了一致共识,就连某些fp语言都添加类型了。

猜你在找的Go相关文章