gpt4 book ai didi

language-agnostic - 虚拟机的优势

转载 作者:行者123 更新时间:2023-12-01 11:42:15 25 4
gpt4 key购买 nike

我遇到的大多数语言都使用 VM 或虚拟机。 Java(JVM)、Python、Ruby、PHP(HHVM)等语言

然后是C、C++、Haskell等直接编译为native的语言。

我的问题是,使用虚拟机(不依赖于操作系统)有什么好处?通过 [source code -> bytecode -> native] 而不是 [source code -> native],使用 VM 不只是创建一个额外的解释步骤吗?

既然可以直接编译,为什么还要使用 VM?

编辑

我的理解是 Python、Ruby 等。使用类似于 VM 的东西,如果不完全符合这样的定义,脚本被编译为中间表示(对于 Python,例如 .pyc 文件)。

编辑 2

是的。查了一下。 Python、Ruby 和 PHP 都使用中间表示,但只是不存储在单独的文件中,而是由 VM 直接执行。查看问题:Java "Virtual Machine" vs. Python "Interpreter" parlance?

" Even though Python uses a virtual machine under the covers, from a user's perspective, one can ignore this detail most of the time. "

最佳答案

VM 的一个优点是,在运行时修改代码的某些部分要容易得多,这称为 Reflection .它带来了一些优雅的功能。例如,您可以询问用户他想调用哪个函数/类,并通过其 STRING 名称来调用该函数/类。在 Java 程序(可能还有其他一些基于 VM 的语言)中,用户可以在运行时向程序添加额外的库,并且库可以立即运行!

另一个优势是能够使用高级垃圾回收,因为字节码的结构更容易分析。

请注意,虚拟机并不总是解释代码,因此它并不总是比机器代码慢。例如,Java 有一个名为 hotspot 的组件,它会搜索经常调用的代码块,并将其字节码替换为 native 代码(机器代码)。例如,如果 for 循环被调用 100 多次,hotspot 会将其转换为机器代码,以便在下一次调用中它会在 native 运行!这确保只有代码的瓶颈 在 native 运行,而其余部分允许上述优势。

P.S. 将代码直接编译为 native 代码并非不可能。许多基于 VM 的语言都有编译器版本(例如,有一个用于 PHP 的编译器:http://www.phpcompiler.org)。但是,请记住,将整个程序编译为 native 代码会禁用上述某些功能。

P.S. [source-code -> byte-code] 部分没有问题,编译一次,与执行时间无关。我猜你是在问为什么他们不在可能的情况下执行机器码。

关于language-agnostic - 虚拟机的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18797477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com