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是不同的,那么他生成的機器碼也是不同的。