下载 git clone --config core.autocrlf=false https://github.com/llvm/llvm-project.git 编译 cd llvm-project mkdir build cd build cmake -G [options] …/llvm
例如:cmake -G “Visual Studio 16 2019” …/llvm
Code -> Fontend(前端) -> Optimizer -> Backend(后端) -> Machine Code 前端负责:错误检查和构建AST抽象语法树(词法分析->语法分析->语义检查) 后端负责:代码映射到目标机器语言
抽象语言树AST:多叉树结构 词法分析:
const a = 5;
// 转换成
[{value: 'const', type: 'keyword'}, {value: 'a', type: 'identifier'}, ...]
语法分析:
[{value: 'const', type: 'keyword'}, {value: 'a', type: 'identifier'}, ...]
// 语法分析后的树形形式
{
type: "VariableDeclarator",
id: {
type: "Identifier",
name: "a"
},
...
}
参考:https://blog.csdn.net/huangpb123/article/details/84799198
javascript生成ast树后,一边解释一边执行 java编译优化后执行 JIT综合javascript和java的特点,提前编译代码段并优化(不是整个文件),单行代码不如动态编译快,只有重复执行的代码提升效果明显