我们可以将解释器视为虚拟机吗?

时间:2014-09-15 12:22:15

标签: php interpreter vm-implementation

我有一个特别关于PHP的抽象问题。

由于我们有Apache / xampp / mamp和其他不同的软件包,可以在不同的操作系统上运行PHP,我们可以假设PHP有一些虚拟机吗? (写一次并到处运行)

1 个答案:

答案 0 :(得分:4)

好的,所以即使这个问题不合时宜,我也会填写:

PHP是VM
不,但PHP是一种语言。它从一个简单的工具包开始,然后演变成一种解释语言,现在是一种编译语言(有点)。 PHP代码被编译为中间语言,在 Zend虚拟机上运行(Zend引擎是PHP默认运行时的核心)。所以在某种程度上,PHP是一种在VM上运行的编译语言。是的,这个VM的重点是灵活性和X平台可移植性

它是如何运作的?
与任何语言一样,您的源代码由词法分析器处理,将源代码转换为令牌 然后,这些令牌由erm解析器解析。解析器的工作是生成VM的指令(OP代码,字节代码,中介语言......无论你想要什么叫它)。
完成此操作后,OP代码由Zend虚拟机执行。执行结束后,将释放所有资源,并且生成的OPCode将丢失。 (当然,OP代码在此过程中被缓存,但这是另一回事。)

最后一点是PHP与Java等语言之间的关键区别,Java拥有独立的编译器,并且提供了一个直接运行ByteCode的VM。 PHP具有扩展,插件和完全独立的运行时(如hhvm == HipHop虚拟机),它们为要运行的预编译程序提供本机支持。

more info here

注意
有些人会争辩说PHP不是一种编译语言,就像纯粹主义者会声称它不是一种编程语言一样。但那不是重点。此外,任何一个都没有真实,明确的定义。有人说Bash是一种脚本语言,其他人否认这一点。有些人称Python为编程语言,有些人则不称 根据您运行它的引擎,编译或解释JavaScript。大多数引擎实现了混合模型(代码的一部分被编译,部分被解释)。有些人甚至声称,因为它在VM上运行,所以Java不是真正的编程语言。无论你对这个问题有什么看法,都没关系 辩论什么是什么(编程语言,脚本语言,编译或解释)是完全公牛。浪费时间;最好花时间用你喜欢的任何语言写一些实际有用的代码。

即便如此:无论喜欢与否,PHP都在虚拟机上运行。结束了。