編譯型語言和解釋型語言
計算機只能直接理解機器語言,所以使用任何高級語言(方便用戶理解)編寫的程序若想被計算機運行,都必須將其轉換成計算機語言,也就是機器碼(0,1)。
高級語言轉換成機器語言的方式有兩種:
1、編譯:將源代碼編譯成目標代碼后執行, 高級語言---編譯---目標代碼---執行--輸出
2、解釋:邊讀源程序邊執行。高級語言----解釋器----輸出
因此:高級語言分為編譯型語言和解釋型語言
編譯型語言
編譯型語言是:將c/c++之類的編譯型語言編寫好的程序轉換成機器語言,再經過鏈接器鏈接形成二進制的可執行文件。因為只需編譯一次,后續需要運行該程序時,直接將可執行的二進制文件從硬盤載入內存中運行
編譯—>匯編語言—>機器語言
c++/c編譯鏈接過程 : https://blog.csdn.net/weixin_42018112/article/details/82289971
解釋型語言:python源碼無需編譯成二進制代碼,直接從源代碼運行,運行時,python解釋器將源碼轉換為字節碼,再由一個專門的python字節碼解釋器負責解釋執行字節碼(轉換成機器語言、運行)。
python編譯過程和執行原理: https://blog.csdn.net/helloxiaozhe/article/details/78104975
總結
由於前者無需每次執行都編譯,直接運行;后者每次執行都需轉換成字節碼,因此前者運行速度快,后者跨平台性好。
前者由於程序執行速度快,同等條件下對系統要求較低,因此像開發操作系統、大型應用程序、數據庫系統等時都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是編譯語言,而一些網頁腳本、服務器腳本及輔助開發接口這樣的對速度要求不高、對不同系統平台間的兼容性有一定要求的程序則通常使用解釋性語言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。
關於java
Java和其他的語言不太一樣。
java編譯執行過程:https://www.cnblogs.com/superyc/p/9987793.html
Java程序從源文件創建到程序運行要經過兩大步驟:
1、java會由編譯器進行編譯生成class文件(字節碼文件)---需要先編譯
2、字節碼由java虛擬機解釋運行,解釋執行即為目標代碼生成並執行。因為java程序既要編譯的同時也要經過JVM的解釋運行,所以說Java被稱為半解釋語言!
第一步(編譯):創建完源文件之后,程序先要被JVM中的java編譯器進行編譯為.class文件。
第二步(運行):jvM加載需要運行的類,由java虛擬機執行引擎來解釋執行java字節碼
(操作系統由匯編語言+c語言寫成)
匯編語言
http://www.ruanyifeng.com/blog/2018/01/assembly-language-primer.html
對於硬件cpu根據指令執行,輸入一條指令就執行一條指令,這些指令均為二進制即操作碼。比如加法指令就是00000011
。
對於我們,二進制是不可讀的,只能對照表去看手動輸入二進制指令、或者用開關,每個開關對應一個指令。為了解決可讀性,便使用了匯編機制:使用文字表達指令,同時就需要將文字指令翻譯成二進制即匯編語言。
匯編語言與c語言區別:
匯編語言是二進制指令的文本形式,與指令為一一對應關系,例:加法指令00000011===ADD;
一條c語言可能對應多條匯編語言(多條指令);因此c語言要先編譯成匯編語言再將匯編語言轉換為對應的二進制.
計算機組成部分
控制器、運算器、存儲器、輸入、輸出
cpu = 控制器+運算器