一、编译型语言和解释型语言
编译型语言的编译过程:
- 对于代码进行词法分析、语法分析,生成AST树,然后进行代码优化,再生成处理器能处理的机器码。如果编译成功,则生成一个二进制文件,否则报错。
解释型语言的解释过程:
-
对代码进行词法分析、语法分析,生成AST树,根据AST树生成字节码,根据字节码执行程序。
二、AST树
var myName = "极客时间"
function foo(){
return 23;
}
myName = "geektime"
foo()
对于上面代码生成的AST树如下:
babel的原理就是将es6的代码转成es6的AST树,再根据es6的AST树生成es5的AST树,根据es5的AST树生成es5的js代码。
转成AST树的过程有两步:
-
词法分析:将代码转成token。
-
语法分析(解析):根据生成的token生成AST树。
三、执行
当生成字节码之后,解释器开始逐条执行字节码,如果有一段代码被多次执行(热点代码),那么编译器就会将这段代码转成高效的机器码,存在内存中,以便之后使用。
解释器的作用:
-
将AST树转成字节码。
-
执行字节码。
四、字节码和机器码
字节码相比机器码占用的内存更少。那为什么热点代码要转成机器码呢,因为机器码更高效。