C,C++,java的编译过程(编译型语言和解释型语言)

接触C,JAVA也有几年了,也偶尔听人说过一些关于编译过程的知识。今天突然发神经,脑子里飘过模糊的一句,编译...解释...一类的,努力却想不起来,只能叹息学到的都还给老师了。上网查一查,也明白了一些,都是很基础的概念,算是只自己补上这一课。老妈有话曰,好记性不如烂笔头,所以开一个帖记一下,以后有相关内容,会不断补充(希望随着自己的学习,内容会由浅入深地扩充)。以供以后回顾,若能顺便给和我一样糊涂的同学们提供个方便,最好不过了。

首先,回顾一下计算机语言的分类。

计算机语言的分类,大体上可以分为机器语言,汇编语言,高级语言三大类。计算机能够直接执行的是机器语言,由二进制代码来组成,可以直接对硬件进行操作,对于人来说,非常不容易编写。汇编语言的是指和机器语言是相同的,都是直接对硬件进行操作,采用的是英文缩写的标示符。同样需要我们将每一步的具体操作都要用语言写出来,比较复杂(相对于高级语言,但是肯定比机器语言好多啦)。高级语言是将很多机器的指令合并,去掉了很多细节,大大简化了程序,对于程序员的要求也低了很多。现在常用的C,C++,JAVA等等语言,都属于高级语言。但是高级语言不能直接对硬件进行操作。

再来看一下几个概念。

编译,汇编过程,解释,脚本,解释型语言,编译型语言。

由于计算机智能读懂机器语言,所以汇编语言和高级语言必须经过一些列的处理来转化为机器语言才可以。

对于汇编语言,这个转化过程,就是通过汇编程序,把汇编语言转化为机器语言,这个过程,成为汇编过程。(我一开始一直觉得这个名字有问题,感觉汇编过程就是应该把一个东西转化为汇编的过程嘛,有木有人有同样的感觉....跑题啦)

对于高级语言,就是通过编译过程,使之转化为机器语言。(编译过程中其实也是经历了先编译成汇编语言,再通过汇编程序转化为机器语言的过程)一般通过编译器来执行。

编译器的翻译过程,其实是分为编译和解释两种的。编译就是对于高级语言,一次性转化为可执行的机器语言,然后执行(执行的时候就没有编译器什么事儿啦);而解释,相当于是一边转化,一边运行的,中间不生成可执行的文件,而每一次运行,都需要重新解释一遍。不像编译可以一次编译,后面无论执行多少次都不用再重来了(代码不变的话)。

明显的,从字面上理解,通过编译来执行的语言是编译型语言,通过解释来运行的是解释行语言。解释型语言有自己的解释器。

C,C++等很多语言都是编译型语言,而JAVAScript,VBScript、Perl、Python、Ruby、MATLAB等脚本语言或者是对速度要求不高、对不同系统平台间的兼容性有一定要求的程序一般使用解释型语言(从它们的运行过程来看)

java语言我们在上面没有说,应该它不是标准的编译型也不是标准的解释型。java也需要编译,但是它是编译成java字节码文件,相当于可以直接运行在javaVm(虚拟机)上的机器代码。然后再对这个字节码文件通过解释的形式来运行,即对于字节码,通过解释器,编译一句,运行一句。JAVA的解释器,就相当一个JAVAVM.JAVA语言的这种特性,也形成了它跨平台的优点,JAVA字节码使得“写一次,到处运行”。只要装有JAVA虚拟机的平台上,都可以运行。其实这一点,我以前不太理解,因为其他编译型语言也可以编译一次,运行多次。而且不像JAVA这么麻烦,还要运行在JAVA虚拟机上。现在想来,正是这种麻烦造就了跨平台的特点,因为其他语言直接编译成的二进制机器码,不一定能够适应所有的平台。而只要能够安装JAVA虚拟机的平台,都可以运行JAVA字节码。(web程序中,可以运行JAVA的浏览器也算是一种JAVAVm实例)。一句话来说,其他语言是直接运行在硬件平台上的,而JAVA是运行在硬件平台上的纯软件平台上的。

后续想继续了解一下各种语言编译的内在过程,下次再记录。


posted on 2013-04-21 20:21  动叶  阅读(1182)  评论(0编辑  收藏  举报