程式語言分類及區別

一、按歷代分類

程式語言分為三大類:機器語言、彙編語言、高級語言
  • 第一代語言(1GL):機器語言 特徵:面向機器的指令,機器可以直接執行。
  • 第二代語言(2GL):彙編語言 特徵:使用助記符代替機器指令。
  • 第三代語言(3GL):高級語言 特徵:是設計更容易被人們所理解的程式語言,告訴電腦執行什麼任務和執行任務的步驟,是過程化的,最重要的作用是此時已經脫離了機器硬體系統,具有程式碼可移植性
  • 第四代語言(4GL):應用語言 特徵:只需要告訴電腦要執行什麼任務,而不需要指定執行步驟,是非過程化的,最典型的代表就是資料庫語言SQL

注意:

1、機器語言
  電腦能識別的唯一語言,機器語言是用二進位程式碼(由0和1組成,每個0/1與高低電頻對應)表示的電腦能直接識別和執行的一種機器指令的集合。它是電腦的設計者通過電腦的硬體結構賦予電腦的操作功能。機器語言具有靈活、直接執行和速度快等特點。不同型號的電腦其機器語言是不相通的,按著一種電腦的機器指令編製的程式,不能在另一種電腦上執行。
2、彙編語言
  為了解決機器語言難以記憶、閱讀、修改等問題,彙編語言對機器語言的指令用字元代替,通過彙編編譯器可以把彙編程式碼編譯成機器語言指令。
  彙編語言是一種用於電子電腦、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。在彙編語言中,用助記符代替機器指令的操作碼,用地址符號或標號代替指令或操作數的地址。在不同的設備中,彙編語言對應著不同的機器語言指令集,通過彙編過程轉換成機器指令。特定的彙編語言和特定的機器語言指令集是一一對應的,不同平台之間不可直接移植。
3、高級語言
  為了使程式碼更通用,具有不同硬體平台的可移植性,更加方便人類理解和使用。可以通過高級語言對應的編譯器把程式碼編譯成彙編語言(一般不會直接把高級語言編譯成機器語言,因為機器有彙編編譯器可以把彙編程式碼轉換成機器程式碼,並且彙編程式碼更易調試和優化)。
  高級語言是一種指令集的體系,在這種語言下,其語法和結構更類似漢字或者普通英文,且由於遠離對硬體的直接操作,使得一般人經過學習之後都可以編程。高級語言通常按其基本類型、代系、實現方式、應用範圍等分類。
代表:java,c,c++,C#等
4、應用語言
   這種是高度封裝型語言,大多數情況下,是一些應用級軟體自定義的使用規則/語法標準,例如:資料庫程式語言,如各種資料庫的SQL語言,使用者只需要傳輸SQL語句給資料庫伺服器,資料庫伺服器內部負責解析執行。
代表:SQL

二、按編譯及運行方式分類

編譯型和解釋型
一、編譯型
  編譯型語言是將程式碼一次性全部編譯成二進位碼,然後運行。
代表語言:C/C++/go
二、解釋型
  解釋型語言的源程式碼不是直接翻譯成機器指令,而是先翻譯成中間程式碼,再由解釋器對中間程式碼進行解釋運行。(編譯  	一行,運行一行)
  代表語言:Java、Python、Perl、JavaScript、VBScript

注意

編譯型和解釋型的定義是對立存在的,但也可以在一個語言中同時存在。比如 java 語言同時兼有編譯型和解釋型特點。整個流程如下:
  將源程式碼(.java 文件)編譯生成位元組碼(.class 文件),再通過 JVM(java 虛擬機)運行生成機器指令,由機器運行機器碼。注意,此處生成機器語言前的操作是解釋型,每次運行都要重新解釋。因此,此處表明 java 是解釋型。
  但是,部分 JVM(java 虛擬機)有一種 JIT(Just in time)機制,能夠將部分已經解釋翻譯的常用機器指令保存。下次不需要解釋,直接運行即可。此時 java 是編譯型。

編譯性語言不如解釋性語言跨平台性好
  編譯性語言例如c語言:用c語言開發了程式後,需要通過編譯器把程式編譯成機器語言(即電腦識別的二進位文件,因為不同的作業系統電腦識別的二進位文件是不同的),所以c語言程式進行移植後,要重新編譯。(如windows編譯成ext文件,linux編譯成erp文件)。

三、按數據類型的確認時間段分類

動態語言和靜態語言
  • 一、動態類型語言

    • 動態類型語言,是指在程式碼運行階段對數據類型進行確認。用動態類型語言編程時,不用給變數指定數據類型,該語言會在你第一次賦值給變數時,在內部記錄數據類型。
    • 動態類型語言的優點是不需要寫多種數據類型的程式碼,程式碼相對簡潔一些,方便程式碼閱讀。缺點是不方便調試,程式碼命名也容易混淆;
        代表:JavaScript、Python、Perfl
  • 二、靜態類型語言

    • 靜態類型語言,是指在程式碼編譯階段對數據類型進行確認
    • 靜態類型語言的優點是方便調試,程式碼相對規範。缺點是需要寫很多數據類型相關的程式碼,程式碼不夠簡潔。
        代表:Java、C/C++

四、程式語言、腳本語言、標記語言

  • 一、程式語言

    • 是用來定義電腦程式的形式語言。它是一種被標準化的交流技巧,用來向電腦發出指令。一種電腦語言讓程式設計師能夠準確地定義電腦所需要使用的數據,並精確地定義在不同情況下所應當採取的行動
    • 代表語言:C/C++,Java,Perl等
  • 二、腳本語言

    • 是為了縮短程式語言的「編寫、編譯、鏈接、運行」等過程而創建的電腦程式語言。是一種用來解釋某些東西的語言,又被稱為擴建的語言,或者動態語言,用來控制軟體應用程式,腳本通常以文本保存,只在被調用時進行解釋或編譯。
    • 代表語言:php,js,asp,Python,ruby等
  • 三、標記語言

    • 是一種將文本以及文本相關的其他資訊結合起來,展現出關於文檔結構和數據處理細節的電腦文字編碼。與文本相關的其他資訊(包括文本的結構和表示資訊等)與原來的文本結合在一起,但是使用標記進行標識。標記語言不僅僅是一種語言,就像許多語言一樣,它需要一個運行時環境,使其有用。
    • 代表語言:xml, html, xhtml ( xml 和 html 的合體 )等,(可以看出它們都是以 “ml”尾的)

五、按照數據類型的定義方式分類

  • 一、強類型語言

      強類型語言是一種強制類型定義的語言,一旦某一個變數被定義類型,如果不經過強制轉換,則它永遠就是該數據類型了,強類型語言包括Java、.net 、Python、C++等語言。
    
      舉個例子:定義了一個整數,如果不進行強制的類型轉換,則不可以將該整數轉化為字元串。
    
  • 二、弱類型語言

      弱類型語言是一種弱類型定義的語言,某一個變數被定義類型,該變數可以根據環境變化自動進行轉換,不需要經過顯性強制轉換。弱類型語言包括vb 、PHP、javascript等語言。
    

綜上所述,Python 是 動態 解釋型強類型定義腳本 語言