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。这就看各种语言的取舍了