番外:透过JS代码看本质 - 01 准备资料

本文详细介绍了JavaScript的编译执行过程,包括编译原理、V8引擎的工作机制。V8不仅是一个解释器,也是一个执行器,能够将JavaScript编译成字节码并优化为机器代码。在执行过程中,V8会初始化环境,解析源码生成AST,解释执行字节码,并对热点代码进行优化。了解这些有助于开发者深入理解高级语言如何在底层运行。
摘要由CSDN通过智能技术生成

准备资料

参考

准备说作用域和执行环境这篇需要了解很多计算机基础知识,不然只会感觉花里胡哨看了个寂寞

如果可以推荐看一些极客时间的《图解Goole V8》质量不错

一、高级语言是如何被编译执行或者解释执行的

极客时间的重学前端和图解Goole V8

(1) 编译原理

编译原理入门篇|一篇文章理解编译全过程

编译目标:

  1. 如果源代码在操作系统上运行:目标代码就是“汇编代码”。再通过汇编和链接的过程形成可执行文件(二进制代码),然后通过加载器加载到操作系统执行。

  2. 如果源代码在虚拟机(解释器)上运行:目标代码就是“解释器可以理解的中间形式的代码”,比如字节码(中间代码)IR、AST语法树。

编译过程可以分为这几个阶段,每个阶段做了一定的任务,层级的让下一个阶段进行。

(2) 编译器如何编写

编译器是如何编写的
机器语言或汇编语言编写核心代码,再将已经能够编译的核心代码作为基础,用它编写拓展代码的编译程序,一直下去,直到所有的拓展代码全部能够编译识别

也就是说,编译器是高级和低级语言的混合

(3) 编译过程

编译过程

  • 词法分析
  • 语法分析
  • 语义分析
    => 抽象语法树,解释器就能识别执行
  • 中间代码
  • 优化
  • 生成目标代码

如果是解释性语言,那么是边编译边执行的

二、V8了解

Google V8 引擎是用 C ++编写的开源高性能 JavaScript 和 WebAssembly 引擎,它已被用于 Chrome 和 Node.js 等

常见误区:

  • V8 是解释器也是执行器,这也是为什么要叫引擎它拥有单独执行JavaScript代码的能力,可以独立运行的模块

  • V8 是C++编写,但是注意,翻译的最终目标不是C++代码,关于这一点可以再回去上面看第一大点,C++只是控制如何解释JS代码,最终将JS变成“目标代码”,只是C++既然是控制这过程,当然意味着C++的执行能够影响最终结果

  • 很多人基于第二点的误解,认为JS没有堆栈,是C++软件层面实现的,这同样能用“最终目标代码执行来解释”,并不是C++和JS语法的映射,直接翻译C++执行,一定要谨记这一点

三、V8 执行 JavaScript 干了写啥

  • 初始化基础环境;
  • 解析源码生成 AST 和作用域;
  • 依据 AST 和作用域生成字节码;
  • 解释执行字节码;
  • 监听热点代码;
  • 优化热点代码为二进制的机器代码;
  • 反优化生成的二进制机器代码。

其中 解释执行字节码 是我们需要讨论的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值