对比C语言和JavaScript的编译过程

2018-03-15  本文已影响0人  seconp

首先在JavaScript中不存在像C语言中那么多的处理过程。

C:预处理-->编译-->汇编-->链接

javascript:语法分析-->预编译-->执行

C语言中的预处理就是进行一些简单的处理:具体包括:

 a.宏定义指令:将所有的#define删除,并且展开所有的宏定义。

b.条件编译指令:处理所有的条件预编译指令。

c.头文件包含指令:处理#include 预编译指令。

d.特殊符号指令:预编译器可研识别一些特殊的符号,例如:删除所有注释 “//“。

e.添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。

f.保留所有的#pragma编译器指令,因为编译器需要使用它们。

编译:编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后生成相应的汇编代码。

注意这里C语言的语法分析是在编译里面,而对于JavaScript的语法分析就是在预编译里面了。我们来看一下JavaScript里面的预编译。以一段代码为例:

<script>

var a = 1;

function b(c){

var d = 1;

}

</script>

首先产生GO全局变量,加载script里的内容,加载完毕,分析语法(语法分析有专门的分析器)是否合理。开始预编译:

--查找变量声明,作为GO属性,值赋予undefined

--查找函数声明,作为GO属性,值赋予函数体

伪代码:

GO/window = {

   a: undefined;

    b: function(c){        

        var d = 1;

    }

}

执行b函数之前发生再次预编译

创建AO活动对象

查找形参和变量声明,值赋予undefined

实参值赋给形参

查找函数声明,值赋予函数体

AO = {

    c: 所赋予的值

    d: undefined

}

然后执行这段b函数代码。

这就是javascript里面的编译过程了。

C语言则不然,它会继续汇编,汇编器将汇编代码转变成机器可以执行的命令,根据汇编指令和机器指令的对照表一一翻译即可。

C语言最后一步是链接,通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件。

上一篇下一篇

猜你喜欢

热点阅读