V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vevlins
V2EX  ›  编程

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

  •  
  •   vevlins · 2020-01-19 15:07:25 +08:00 · 3676 次点击
    这是一个创建于 1769 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 仅仅是借助 c 编译器来实现多平台兼容吗?
    2. 通过虚拟机的方式和直接解释的有什么区别?不考虑可以先编译到 opcode
    9 条回复    2020-01-20 10:43:17 +08:00
    johnsonshu
        1
    johnsonshu  
       2020-01-19 15:28:16 +08:00 via iPhone
    一次编译 到处运行?
    wysnylc
        2
    wysnylc  
       2020-01-19 15:36:58 +08:00
    因为要加快效率,不是执行效率是开发效率
    tt67wq
        3
    tt67wq  
       2020-01-19 16:08:03 +08:00
    @johnsonshu 一次编译 到处调试
    lyog
        4
    lyog  
       2020-01-19 16:38:01 +08:00 via iPhone   ❤️ 1
    因为加个虚拟机可以消除各个平台之间的差异化
    712e1959
        5
    712e1959  
       2020-01-19 17:15:13 +08:00 via Android
    “通过虚拟机的方式和直接解释的有什么区别?”

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

    哎呀妈呀
    penguinWWY
        8
    penguinWWY  
       2020-01-20 03:15:07 +08:00   ❤️ 1
    个人看法
    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
        9
    pythonee  
       2020-01-20 10:43:17 +08:00
    @hoyixi 其实楼主想说的可能是,解释器本身也已经加一层了

    @penguinWWY VM 就是个更大的解释器?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   929 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:26 · PVG 06:26 · LAX 14:26 · JFK 17:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.