1. 程式人生 > 其它 >程式語言 - 編譯型語言與解釋型語言及組合語言

程式語言 - 編譯型語言與解釋型語言及組合語言

程式語言

編譯型語言和解釋型語言

計算機只能直接理解機器語言,所以使用任何高階語言(方便使用者理解)編寫的程式若想被計算機執行,都必須將其轉換成計算機語言,也就是機器碼(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和其他的語言不太一樣。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 = 控制器+運算器

儲存器=記憶體+磁碟