为什么需要编程语言虚拟机? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vevlins
V2EX    编程

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

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

    区别不就是你得先编译一下嘛……
    hoyixi
        6
    hoyixi  
       2020 年 1 月 19 日   1
    计算机技术世界,2 大“绝技”
    1 空间换时间
    2 加一“层”
    charlie21
        7
    charlie21  
       2020 年 1 月 19 日
    一切 “为什么要有 xxx ” 那就是 去想 “没有 xxx ” 会怎样。

    哎呀妈呀
    penguinWWY
        8
    penguinWWY  
       2020 年 1 月 20 日   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 年 1 月 20 日
    @hoyixi 其实楼主想说的可能是,解释器本身也已经加一层了

    @penguinWWY VM 就是个更大的解释器?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5544 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 08:24 PVG 16:24 LAX 01:24 JFK 04:24
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86