1.首先明确一点:
高级语言是不能直接在CPU上运行的。CPU只能处理机器语言,就是黑客帝国里面那个10101010101110的数字流。
那么为了让机器语言能够在CPU上运行,那么就必须将其变成机器语言,那么怎么将高级语言变成机器语言呢?
无非是通过两种方式:编译或者解释。
2.那么编译型和解释型语言有那些呢?
编译型(代表):C(万恶之源)/C++(加了OOP的万恶之源)
解释性(代表):Java(世界上最好的语言)、Python、C#。
3.编译型和解释型语言的区别:
3.1编译器和解释器的不同:
首先来看一下编译器的工作原理
在来看看解释器的原理:
在这里可以看出编译型语言是为了将高级语言编写的语言转化为语义相同的机器语言(强调的是高级语言和转化后的机器语言之间的等效),然后使得CPU可以执行你写的程序。
而解释型语言是根据需要一条一条的分析和执行源代码的程序。编译只需要编译一次可以生成可执行文件比如.exe等,而且这个可执行文件已经独立出来,下一次使用时不需要源代码,不需要编译器。
但是解释型语言,每一次都需要源代码,需要解释器。
3.2编译型和解释型的优缺点
1.速度:编译型完胜解释型。C/C++的速度超过Java和Python以及C#。
2.开放度:编译型完胜解释型。C/C++对计算机底层的操控程度远远高于Java和其他的解释型语言。例子:C/C++可以使用关键字register来操控寄存器,但是Java中对寄存器的使用完全取决于JVM程序员无法实际操控。
3.安全性:解释型完胜编译型。高度的开放度给C/C++带来了极度不安全性,他们可以访问你任意内存,那是十分危险的。
4.消耗的资源:编译型完胜解释型。
5.移植性:由于不同的操作系统的识别二进制文件是不同的所以当你移植到别的操作系统时就需要重新编译。所以解释型语言在移植性上优于编译型。
6.友好性,简单性:C++对于一个编程小白来说是十分不友好的。但是Python和Java就比较容易上手。
4.编译型的代表C++和解释型的代表Java的详解
4.1C++的编译:
首先:把源文件中的源代码翻译成机器语言,保存到目标文件中。如果编译通过,就会把CPP转换成OBJ文件。
作用:编译是读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再转换为机器代码,生成目标文件(.obj)
过程;
1) 预编译
2) 编译
3) 汇编
4) 链接
4.2Java的编译
首先Java是有一个编译的过程的,首先他将Java的源代码编译成了字节码,但是这个字节不是计算机语言,他不能直接在CPU上运行,字节码文件的后缀名为.class。
然后字节码文件通过JVM编译成了机器码,可以在计算机中运行,当然不同的操作系统的JVM是不同的,那么他生成的机器码也是不同的。