02所有的编程语言最后会编译成C,再编译成汇编,最后落实到硬件操作上吗?
https://m.toutiao.com/is/e4cpQEw/
实际情况并不是这样的。
我们来一条条的看吧:
1.编程语言并不是都要编译成C,这个说法不知道是谁提出来的。C语言和java,python一样,也是一种高级语言。但是C语言有个优势,就是可以嵌套汇编,实现底层交互。
2.很多人存在一个误区,汇编语言就是最底层的语言了,其实计算机还是不认识汇编是个什么东西, 因为计算机只能识别一种语言,那就是机器语言,全都是0和1这样的二进制数。比方说MOV AX,BX,这条汇编的意思是寄存器将BX的内容转移到AX中,对应机器语言的1000100111011000,非常复杂。可以这么理解:汇编语言实际上是机器指令的一种简写形势。
可以看看下图,做一个简单的加法运算,分别用C语言,汇编和机器语言表示,各位就能理解高级语言的好处了。
无论是C还是其他什么语言,最终的目的都是实现某种功能,而这离不开硬件的支持,所以归根结底,还是要从程序和硬件的关系说起。
硬件,程序和编译器之间的关系
在计算机中存在着大量的电子元件,电路就两种情况:开和关,这两种状态分别用1和0来表示,也就是众所周知的二进制, 在计算机中,所有的运算都是以二进制的形式进行的,比方说3+4,在CPU中的表现形式为00110000+01000000,如果是负数运算或浮点运算的话还会更复杂一些,这里不再累述。
通过0和1决定电路状态,那么操作者是通过编程语言操作硬件的呢?这里编译器的作用就体现出来了。
编译器就像是一个翻译一样,也就任人们口中俗称的编程软件。其实用更专业的话来说,编译器实际上是IDE(开发集成环境)中的一个工具。
虽然大家可能在操作中感受不是那么强烈,但如果你在windows控制台下用javac编译过java代码,或者你在linux的命令行下编译过程序,这个时候我们就直接使用了编译器。
最后提一点,并不是所有的语言都会被编译器直接编译成机器语言。C语言是一个比较特殊的语言,因为他是直接可以直接编译为汇编再编译为机器码的,这也是C语言可以和底层打交道的主要原因。像我们熟知的java,它会把源码先转换成一种叫做字节码的东西,通过JVM虚拟机将其转换为机器码。所以说,编译器的类型有很多,作用不能一概而论。