計算機程式語言的分類,解釋型語言、編譯型語言、指令碼語言的關係

Candy_GL發表於2018-11-07


計算機程式語言的分類:

機器語言(二進位制程式碼)
組合語言(面向機器的程式設計語言)
高階語言(按轉換方式可分為兩類:1.編譯型語言;  2.解釋型語言     ||按照客觀系統的描述可分為兩類:1.程式導向語言;  2.面嚮物件語言    ||按照程式設計範型可分為:1.命令式語言;  2.函式式語言;  3.邏輯式語言;  4.面嚮物件語言)
三種語言的優缺點:

機器語言:
缺點:可讀性、可移植性差,程式設計繁雜
優點:直接執行,速度快,資源佔用少

任何語言都必須翻譯成機器語言,計算機才能執行高階語言編寫的程式。 翻譯的方式有兩種:一個是編譯,一個是解釋


組合語言:
缺點:不同的處理器有不同的組合語言語法和編譯器,編譯的程式無法在不同的處理器上執行,缺乏可移植性,難於從組合語言程式碼上理解程式設計意圖,可維護性差,即使是完成簡單的工作也需要大量的組合語言程式碼,很容易產生bug,難於除錯,使用匯編語言必須對某種處理器非常瞭解,而且只能針對特定的體系結構和處理器進行優化,開發效率很低,週期長且單調
優點:能夠保持機器語言的一致性,直接、簡捷,並能像機器指令一樣訪問、控制計算機的各種硬體裝置,如磁碟、儲存器、CPU、I/O埠等。使用匯編語言,可以訪問所有能夠被訪問的軟、硬體資源,目的碼簡短,佔用記憶體少,執行速度快。
高階語言:
執行速度基本上比直接用匯編寫的慢,速度和程式大小與編譯軟體有關。
高階語言接近演算法語言,易學、易掌握,高階語言為程式設計師提供了結構化程式設計的環境和工具,使得設計出來的程式可讀性好,可維護性強,可靠性高高階語言遠離機器語言,與具體的計算機硬體關係不大,可移植性好,重用率高;由於把繁雜瑣碎的事務交給了編譯程式去做,所以自動化程度高,開發週期短,且程式設計師得到解脫,可以集中時間和精力去從事對於他們來說更為重要的創造性勞動,以提高程式的質量。

高階語言的分類:

按轉換方式可分為兩類:1.編譯型語言;  2.解釋型語言
1.編譯型語言:
編譯性語言寫的程式在被執行之前,需要一個專門的編譯過程,把程式編譯成為機器語言的檔案,比如exe檔案,以後要執行的話就不用重新翻譯了,直接使用編譯的結果就行了(exe檔案),因為翻譯只做了一次,執行時不需要翻譯,所以編譯型語言的程式執行效率高

有些程式編譯後,還需要把其他編譯好的,可能需要組裝兩個以上的目的碼生成最終的可執行性檔案,稱為連結(可實現對低層次程式碼的複用)。
 

2.解釋型語言: 
解釋性語言的程式不需要編譯,在執行程式的時候才翻譯,每個語句都是執行的時候才翻譯。這樣解釋性語言每執行一次就需要逐行翻譯一次,效率比較低。
現代解釋性語言通常把源程式編譯成中間程式碼,然後用直譯器把中間程式碼一條條翻譯成目標機器程式碼,一條條執行。比如Java,Java首先是通過編譯器編譯成位元組碼文.class,然後在執行時通過直譯器給解釋成機器檔案。所以我們說Java是一種先編譯後解釋的語言再比如C#,C#首先是通過編譯器將C#檔案編譯成IL檔案,然後在通過CLR將IL檔案編譯成機器檔案。所以我們說C#是一門純編譯語言,但是C#是一門需要二次編譯的語言。同理也可等效運用到基於.NET平臺上的其他語言。

 

指令碼語言

定義:為了縮短傳統的編寫-編譯-連結-執行(edit-compile-link-run)過程而建立的計算機程式語言。

它的特點是:程式程式碼即是最終的執行檔案,只是這個過程需要直譯器的參與,所以說指令碼語言與解釋型語言有很大的聯絡。指令碼語言通常是被解釋執行的,而且程式是文字檔案。

典型的指令碼語言有,JavaScript,Python等。

與指令碼語言相對應的是系統語言,他們的區別是:

1、抽象的級別:這是最重要也是最明顯示的不同。指令碼語言對程式設計師提供了更高階的抽象。這一點明顯表現在:在這種語言自身中,存在有高階的資料結構,如列表和字典結構,和對這種結構簡單方便的巢狀和操作。這樣可以建立非常成功的程式。     
    
2、型別定義:系統語言通常是強型別和靜態型別定義。這就意味著所有變數的型別要在程式中指定,在編譯時檢查。相反地,指令碼語言是最鬆散的型別定義,完全沒有型別宣告,並且在執行時進行動態型別檢查。     
    
3、執行:系統語言的特點是編譯的。程式被編譯成可執行的二進位制。另一方面,指令碼語言的特點是解釋,也就是,指令被立即執行,不存在一個編譯的中間狀態。這就意味著指令碼語言是互動式的(你可以在提示符下敲入命令,並且看到結果),這是另一個巨大的勝利。這樣完全將編譯過程從編輯-編譯-執行迴圈中去掉了。     
    
4、速度:以上三點是指令碼語言一方面在速度與效率, 一方面在易用性與表示式的強大性之間進行折衷的典型例子。這就使得指令碼語言的執行速度比系統語言慢一個數量級。這就是對指令碼語言誹謗最多的方面。效能的降低不是真正的問題,因為思想是用指令碼語言來組合元件,這些元件是用像C  這樣的快速系統語言來編寫的。所以所有需要執行快速的東西將因為是用快速的語言實現的而執行得快速。指令碼語言只用於將東西綁在一起,並且這些通常不是效能的瓶頸(   或如果是,你需要重新檢查你的設計)。

指令碼語言的特徵主要有無型別、無記憶體管理等等,功能較弱,但是使用方便。

解釋型語言和指令碼語言的區別 :
- 指令碼語言是解釋型的語言,也就是解釋型語言包括指令碼語言。 
- 解釋語言是說解釋執行的語言,但執行的程式碼並不一定是文字格式的。 
- 指令碼語言的程式是文字檔案,並且是解釋執行的。

 

舉例:

解釋性語言:Java、JavaScript、Perl、Python、Ruby、MATLAB 等。
編譯性語言: C/C++、Pascal/Object Pascal(Delphi)
指令碼語言:Python、JavaScript,ASP,PHP,Perl等

 

參考:

https://blog.csdn.net/Andrew_ym/article/details/79514089

https://blog.csdn.net/zhangliangzi/article/details/50413727

https://blog.csdn.net/u011026329/article/details/51119402

https://blog.csdn.net/liuchuo/article/details/52014764

 

相關文章