百科问答小站 logo
百科问答小站 font logo



怎么看静态类型语言(java,flutter/dart,swift)纷纷往aot&jit双模式发展? 第1页

  

user avatar   xtlisk 网友的相关建议: 
      

原因之一是技术发展更加细化了,需要去更多方向上发展,做更好的组合,来榨取更多价值

理论上说,java这种静态类型一开始就可以很适合AOT模式的,(GC之类的问题其实并不必须VM,也可以VEE,像Go这样),只要不嫌麻烦在各种平台上搞对应编译器(或者通过其他代码中转,如java->C),但因为某些原因并没有直接做成这样,当年微软的VJ似乎就这么干,然后被起诉了。。。

直接解释执行性能是个问题,如果不AOT,那么就JIT,然后大家发现JIT也就是“慢热”了一点,实际效果可能比AOT还好,因为JIT可以做到AOT做不到的一些动态优化,于是干脆就解释+JIT这个架构搞定,综合性价比最高

不过随着应用和需求的发展,JIT的一些弱点(比如上面说的慢热之类)也显现了,这时候就引入AOT来补足,也是挺自然的事情

但并非所有解释+JIT的架构都可以引入AOT来解决一些问题,例如你提到的pypy,基本就没有AOT的价值,这很大程度是Python语言本身特性决定的

反过来说,题主提的C++、Go这种一般以“AOT”形式实现的语言,难道就不能再进一步引入JIT来优化性能么,其实是可以的,说不定将来也会是一个趋势


user avatar   aetherus 网友的相关建议: 
      

所谓的十年风水轮流转呗。

早期的计算机由于性能真的不行,所以需要程序能尽可能的吃尽计算机的性能,运行效率才能被人接受。所以那时候的语言都专注于运行效率,用得多的基本都是 AoT 编译型语言。

在摩尔定律还适用的年代,计算机的性能不断提升,内存也越来越大,再加上 Ruby 的出现,让人开始关注开发效率,运行效率反而被一定程度地忽视,反正我写的程序这一代计算机跑不动,下一代就能跑动了。而开发效率并不会因为CPU性能提升而成正比地提升,所以这个阶段比较流行的是那些关注开发效率的解释型语言。

现在摩尔定律已经不适用了,CPU运算速度很难再往上提。在各种新兴语言都已经让开发人员敲得足够爽的情况下,关注点自然又会回归到运行效率,但是开发效率和语言的表现力又不想放弃,所以很多解释型语言开始搞 JIT 编译器,而在这个阶段的全新语言也会考虑 AoT,只要工具链做的够好,AoT 在开发效率上也一样高效。

说白了,计算机领域就是个在贪婪和怠惰这两种原罪的相互作用下不断发展的领域。贪婪是技术革新的第一推动力,而怠惰指明了革新的方向。


user avatar    网友的相关建议: 
      

低情商:是的,已经结束了。

高情商:diy的时代暂停了,只不过我们暂时不知道重新开放的期限。




  

相关话题

  为什么 Java 和 JS 等语言需要 VM,不能直接操作内存堆栈空间? 
  程序员如何快速上手一个自己不太熟悉的新项目?有什么技巧? 
  如何评价Apache(Apache Software Foundation)? 
  如何看待越来越多公司弃用 PHP 使用 Java? 
  java开发,怎么招? 
  java中,堆的运行速度为什么比栈慢? 
  如何评价《阿里巴巴JAVA开发手册》完美版,终极版,纪念版? 
  逃逸分析为何不能在编译期进行? 
  如何看待网上关于「阿里P7程序员、资深架构师不知 jvm、红黑树」一事的争议? 
  国内Java面试总是问StringBuffer,StringBuilder区别是啥?档次为什么这么低? 

前一个讨论
古代的皇帝,为什么非要用太监伺候自己,而不用美貌的宫女呢?
下一个讨论
如何看待腾讯旗下的新游戏白夜极光国际服没有中文?





© 2024-11-22 - tinynew.org. All Rights Reserved.
© 2024-11-22 - tinynew.org. 保留所有权利