WebKit内核

[WebKit内核] JavaScriptCore深度解析--基础篇(一)字节码生成及语法树的构建

蓝咒 提交于 2019-11-27 11:50:48
看到HorkeyChen写的文章《 [WebKit] JavaScriptCore解析--基础篇(三)从脚本代码到JIT编译的代码实现 》,写的很好,深受启发。想补充一些Horkey没有写到的细节比如字节码是如何生成的等等,为此成文。 JSC对JavaScript的处理,其实与Webkit对CSS的处理许多地方是类似的,它这么几个部分: (1)词法分析->出来词语(Token); (2)语法分析->出来抽象语法树(AST:Abstract Syntax Tree); (3)遍历抽象语法树->生成字节码(Bytecode); (4)用解释器(LLInt:Low Level Interpreter)执行字节码; (5)如果性能不够好就用Baseline JIT编译字节码生成机器码、然后执行此机器码; (6)如果性能还不够好,就用DFG JIT重新编译字节码生成更好的机器码、然后执行此机器码; (7)最后,如果还不好,就祭出重器--虚拟器(LLVM:Low Level Virtual Machine)来编译DFG的中间表示代码、生成更高优化的机器码并执行。接下来,我将会用一下系列文章描述此过程。 其中,步骤1、2是类似的,3、4、5步的思想,CSS JIT也是采用类似方法,请参考[1]。想写写JSC的文章,用菜鸟和愚公移山的方式,敲开JSC的冰山一角。 本篇主要描述词法和语法解析的细节。