为什么需要编程语言虚拟机?

2020-01-19 15:07:25 +08:00
 vevlins
  1. 仅仅是借助 c 编译器来实现多平台兼容吗?
  2. 通过虚拟机的方式和直接解释的有什么区别?不考虑可以先编译到 opcode
3690 次点击
所在节点    编程
9 条回复
johnsonshu
2020-01-19 15:28:16 +08:00
一次编译 到处运行?
wysnylc
2020-01-19 15:36:58 +08:00
因为要加快效率,不是执行效率是开发效率
tt67wq
2020-01-19 16:08:03 +08:00
@johnsonshu 一次编译 到处调试
lyog
2020-01-19 16:38:01 +08:00
因为加个虚拟机可以消除各个平台之间的差异化
712e1959
2020-01-19 17:15:13 +08:00
“通过虚拟机的方式和直接解释的有什么区别?”

区别不就是你得先编译一下嘛……
hoyixi
2020-01-19 17:17:02 +08:00
计算机技术世界,2 大“绝技”
1 空间换时间
2 加一“层”
charlie21
2020-01-19 17:17:49 +08:00
一切 “为什么要有 xxx ” 那就是 去想 “没有 xxx ” 会怎样。

哎呀妈呀
penguinWWY
2020-01-20 03:15:07 +08:00
个人看法
1、先说第二点,虚拟机和解释器没啥区别,硬要说不同,那就是针对 opcode 除了解释执行外还有 AOT 和 JIT,所以 vm 可以看做是针对 opcode 的 runtime ( AOT + JIT + Interpreter )的统称,也就是直接面对 opcode 的抽象概念。CPython 叫 Interpreter,如果它加了 Jit,或者本来就有 JIT 的 PyPy,把他们叫做 Python VM 也没啥毛病。
2、除了统一平台,有了 VM 可以做跟多的事情,有些事情可以做的更好,当然也有些事情会更差。做的更好的事情最直观的就是可以带牛逼的 GC,除此之外还有 Virtual Inline,PGO,LTO,以及十分牛逼的 Partial Evaluation,这些 AOT 做起来很麻烦的事情,在有 VM 的情况下属于家常便饭,当然也有做的更烂的比如启动时间,比如要命的 Interproducer Analysis。这就看各种语言的取舍了
pythonee
2020-01-20 10:43:17 +08:00
@hoyixi 其实楼主想说的可能是,解释器本身也已经加一层了

@penguinWWY VM 就是个更大的解释器?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/639178

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX