計算機程式語言的分類,解釋型語言、編譯型語言、指令碼語言的關係
計算機程式語言的分類:
機器語言(二進位制程式碼)
組合語言(面向機器的程式設計語言)
高階語言(按轉換方式可分為兩類: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
相關文章
- 計算機語言:編譯型/解釋型、動態語言/靜態語言、強型別語言/弱型別語言計算機編譯型別
- 編譯型語言與解釋型語言編譯
- 解釋型語言、編譯型語言 區別編譯
- 解釋型語言與編譯型語言的區別?編譯
- Python 既是解釋型語言,也是編譯型語言Python編譯
- 概念區別 【編譯型語言與解釋型語言、動態型別語言與靜態型別語言、強型別語言與弱型別語言】編譯型別
- 編譯語言、解釋語言與指令碼語言之間的區別編譯指令碼
- Python 語言特性:編譯+解釋、動態型別語言、動態語言Python編譯型別
- 關於解釋型語言和編譯型語言的疑惑,請教編譯
- 編譯型語言和解釋型語言的區別編譯
- 高階語言——編譯型、解釋型、混合型編譯
- Java 語言是強型別語言語言(轉)Java型別
- 使用Go語言構建一個解釋型語言Go
- python---之編譯型語言和解釋型語言的區別Python編譯
- 機器碼 指令 組合語言 的關係機器碼組合語言
- 《自然》證實:計算機語言更類似人類語言計算機
- 語言型別介紹及其Python的語言型別型別Python
- 關於編譯型語言程式碼優化的一點迷思編譯優化
- Python程式設計基礎(一)程式語言是什麼?編譯型語言和解釋型語言的區別|Python是什麼?Python程式設計編譯
- Java (計算機程式語言)Java計算機
- 為什麼自制指令碼語言是程式語言的最高境界?指令碼
- Go 語言編譯期斷言Go編譯
- 論機器學習和程式語言:ML需要專用的計算機語言嗎?機器學習計算機
- 把程式語言看做語言
- 1.4計算機語言計算機
- SQL語言分類SQL
- 程式語言BASIC程式設計師的啟蒙語言C程式程式設計師
- 最‘乾淨’的程式語言——空白程式語言
- [譯] Go 語言實戰: 編寫可維護 Go 語言程式碼建議Go
- C語言編譯工具C語言編譯
- 【譯】Ruby2.6的JIT功能,編譯和解釋型語言的相關說明編譯
- newLISP 10.5.3 釋出,類 Lisp 的指令碼語言Lisp指令碼
- 源語言、目標語言、翻譯器、編譯器、直譯器編譯
- awk指令碼語言程式設計指南指令碼程式設計
- python程式碼是解釋型語言,為什麼還有編譯過程?Python編譯
- 國人開發的程式語言-“明”語言
- 【開發語言】PHP、Java、C語言的編譯執行過程PHPJavaC語言編譯
- C語言的本質(32)——C語言與彙編之C語言內聯彙編C語言