V8 是一个有 Google 开发的开源 JavaScript 引擎,目前应用在 Chrome 浏览器和 Node.js 中,其核心功能是执行易于人类理解的 JavaScript 代码。
核心流程分为 编译 和 执行 两步。首先将 JavaScript 代码转换为低级中间代码或者机器能够理解的机器代码,然后再执行转换后的代码并输出执行结果。
把 V8 看作一个虚拟机,模拟实际计算机各种功能来实现代码的执行,如模拟实际计算机的 CPU、堆栈、寄存器等,虚拟机还具有自己的一套指令系统。
当 V8 执行 JavaScript 代码时,不需要担心不同操作系统的差异,只需要按照虚拟机的规范写好代码即可。
CPU 是如何执行机器代码的?
CPU 可以看作是一个很小的运算机器,可以通过二进制的指令和 CPU 进行沟通。为了完成复杂的任务,为 CPU 提供了一大堆指令,来实现各种功能,我们将这堆指令称为 指令集,也就是 机器语言。
CPU 只能识别二进制的指令,但是二进制代码对人类来说难以阅读和记忆,于是又将二进制指令集转换成人类可以识别和记忆的符号,即 汇编指令集。
1000100111011000 机器指令
mov ax,bx 汇编指令
CPU 不能直接识别汇编语言,所以需要汇编编译器将其转换成机器代码。
不同的 CPU 有着不同的指令集。
在编写汇编代码时还需要了解处理器架构相关的硬件知识。
因此我们需要一种能适应多种不同 CPU 架构的语言,能专心处理业务逻辑的语言。因此,C、C++、Java、C#、Python、JavaScript 等高级语言就诞生了。
这些语言和汇编语言一样,处理器不能直接识别代码。
通常要有两种方式来执行。
1、解释执行。将输入的源代码通过解析器编译成中间代码,直接使用解释其解释中间代码,然后输出结果。
解释执行
2、编译执行。先将源代码转换为中间代码,然后编译器将中间代码编译成机器代码。通常机器代码是以二进制文件形式存储,所以需要执行的时候直接执行二进制文件即可,还可以使用虚拟机将编译后的机器代码保存在内存中,直接执行内存中的二进制代码。