美文网首页
对比C语言和JavaScript的编译过程

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

作者: seconp | 来源:发表于2018-03-15 19:06 被阅读0次

    首先在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来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件。

    相关文章

      网友评论

          本文标题:对比C语言和JavaScript的编译过程

          本文链接:https://www.haomeiwen.com/subject/ocghqftx.html