语言分类 解释型、编译型、混合型语言
编译型语言
最开始大部分人接触的 C
和 C++
都是编译性的语言。它们最大的特点是通过编译器将文本代码转换为 CPU
可以执行的机器代码,机器码通常拥有更高的运行效率。但是通常因为 CPU
架构的问题它们的可移植性会差一点,不同的 CPU
平台指令集不一样,或者不同的操作系统系统调用的 API 不同,可能会导致你在不同的操作系统或者 CPU
架构上编译的代码无法在其他地方正常运行。
例如,你在 Windows x86
下的代码不一定可以在 CentOS x86
上运行。
解释型语言
像 PHP
和 JavaScript
这样的语言属于解释型语言。它们的最大特点是通过解释器运行,例如 PHP
解释器会读取 xxx.php
的文本代码,逐条转换为机器代码。CPU
执行完以后继续取出代码转换周而复始。
优点是只需要安装上对应的解释器,代码就可以运行在任何平台。缺点是编译和运行时间叠加在了一起,无法在编译时进行类型检查等优化,通常解释型语言使用若类型语法无法更好地利用数据结构。
混合型语言
像 Java
这样的语言我在最初学习的时候,老师都说是编译性的,后来才意识到是混合型。Java
虽然需要编译,但并没有转换成机器码,而是转换成了字节码,转而交由 JVM 虚拟机
运行,JVM
也是解释逐条执行的,只不过字节码文件转换成机器码更快。具体 PHP
的对照你可以参考一下 opcache
。
像 Java
还支持了 JIT(即时编译)
能力,它通过反复执行的机器码缓存,来减少编译时间。