Thi*_*tte 120
PHP语言被解释.可以编译允许您解释PHP的二进制文件,但是您编写的内容将被解释.
Bar*_*own 58
都.PHP被编译为中间字节码,然后由运行时引擎解释.
PHP编译器的工作是解析PHP代码并将其转换为适合运行时引擎的形式.其任务包括:
根据您的PHP设置,此步骤通常只执行一次,第一次调用脚本.缓存编译器输出以加速后续使用的访问.但是,如果修改了脚本,则再次完成编译步骤.
调用脚本时,运行时引擎遍历AST和字节码.符号表用于存储变量的值,并提供函数的字节码地址.
编译为字节码并在运行时解释它的过程对于在某种虚拟运行时机器(包括Perl,Java,Ruby,Smalltalk等)上运行的语言来说是典型的.
cod*_*gar 14
PHP是一种解释型语言.但是,它可以通过第三方工具编译为字节码.
Gau*_*nde 10
一个编译后的代码可以直接通过电脑的CPU来执行.也就是说,可执行代码以CPU的本机语言指定
必须在运行时将解释语言的代码从任何格式转换为CPU机器指令.这种翻译由翻译完成.
说解释或编译语言是不恰当的,因为解释和编译都是该特定语言的实现的属性,而不是语言本身的属性.因此,任何语言都可以编译或解释 - 它只取决于您正在使用的特定实现.
最广泛使用的PHP实现由Zend Engine提供支持,简称为PHP.Zend Engine将PHP源代码编译为可以执行的格式,因此Zend引擎可以作为解释器.
谢谢 :)
这是一个毫无意义的问题.PHP使用yacc(bison),就像GCC一样.yacc是一个"编译器编译器".yacc的输出是编译器.编译器的输出是"编译"的.PHP由yacc的输出解析.因此,根据定义,它是编译的.
如果不满足,请考虑以下内容.php(二进制)和gcc都会读取您的源代码并生成一个抽象语法树.在版本4和5下,php然后遍历树以将程序转换为字节码(编译步骤).您可以使用Vulcan Logic Dumper将字节码转换为操作码(类似于汇编).最后,php(特别是Zend引擎)解释字节码.相比之下,gcc遍历树并输出汇编; 它还可以运行汇编程序和链接器来完成该过程.调用由一个"解释"处理的程序和由另一个"编译"处理的另一个程序是没有意义的.毕竟,程序都通过"编译器"运行.
你实际上应该问你要问的问题.("我是否因为PHP为每个请求重新编译我的源代码而支付性能损失?"等)
我知道这个问题很旧,但是到处都有联系,我认为这里的所有答案都不正确(也许是因为它们很旧)。
有NO作为一种解释语言或编译语言这样的事情。可以解释和/或编译任何编程语言。
首先,一种语言只是一组规则,所以当我们谈论编译时,我们指的是该语言的特定实现。
例如,HHVM是PHP的实现。它使用JIT编译将代码转换为中间的HipHop字节码,然后转换为机器码。说它已编译就足够了吗?一些Java实现(并非全部)也使用JIT。Google的V8也使用JIT。
如今,使用已编译与已解释的旧定义已无济于事。
“ PHP是否已编译?” 鉴于在已编译语言与已解释语言之间不再存在明确且一致的定界符,这是一个荒谬的问题。
分隔它们的一种可能方法是(在这种二分法中我找不到任何含义):
编译语言使用Ahead of Time编译(C,C ++);
解释语言使用即时编译或根本不编译(Python,Ruby,PHP,Java)。
| 归档时间: |
|
| 查看次数: |
87126 次 |
| 最近记录: |