1. 编译型语言和解释型语言的区别
-
编译型语言: 编译型语言包括C/C++、Java、Go等。应用源程序在执行之前,就将程序源代码“翻译”成汇编语言,然后根据软硬件环境编译成目标文件,一般完成编辑工作的工具称为编译器。对于编译型语言,编译结果已经是针对当前CPU体系的指令。
-
解释型语言: 在程序运行时才被“翻译”为机器语言。但是执行一次“翻译”一次,所以执行效率较低。解释器的工作就是解释型语言中,负责“翻译”源代码的程序。需要先编译成中间代码,在经由该解释型语言的特定虚拟机,翻译成特定CPU体系的指令被执行,解释型语言是在运行过程中,翻译为目标平台的指令。常说解释型语言慢,主要是慢在解释这个步骤。
2.编译型语言的执行过程
第一步:C语言代码预处理(比如依赖处理、宏替换等)。
第二步:编译。编译器会把C语言翻译成汇编语言程序,一条C语言通常编译为多条汇编代码。同时编译器会对程序进行优化生成目标汇编程序。
第三步:编译得到的汇编语言通过汇编器在汇编成目标程序 .c 文件。
第四步:链接。程序中往往包含一些共享目标文件,需要经过连接器进行链接。
3.PHP语言执行原理概述
第一步:词法分析将PHP代码转换为有意义的表示Token。该步骤的词法分析器使用Re2c实现。
第二部:语法分析将Token和符合文法规则的代码生成抽象语法树。
第三步:抽象语法树生成对应的opcode,并被虚拟机执行。
PHP7内核架构
1.Zend 引擎:词法、语法分析、AST编译和opcodes的执行均在Zend引擎中实现。此外,PHP的变量设计、内存管理、进程管理等也在引擎层实现。引擎为PHP提供了基础服务,PHP的可靠性和高性能都依赖引擎的基础支撑。同时。
2.PHP层:Zend引擎为PHP提供基础能力(如内存分配和回收),而来自外部的交互则需要通过PHP层来处理。
3.SAPI:SAPI是Server API的缩写,其包含了常见的 Cli SAPI 和fpm SAPI。PHP定义好输入/输出规范,依据此规范与PHP交互的一方都可以称为Server。
4.扩展部分