语言的分类
語言的種類從不同的角度會有不同的劃分,比如機器語言、匯編語言、高級語言、低級語言(機器語言及匯編語言)、編譯語言、解釋型語言、腳本語言、動態語言、靜態語言、函數式語言(比如F#及Scala)、命令式語言、面向對象語言(比如C++及JAVA)、過程式語言、混合型語言(介于編譯型語言與解釋型語言之間,比如JAVA與C#)等等,語言的種類繁多,五花八門什么都有,真正的全部總結全面不是一件容易的事情。
機器語言:機器語言是機器指令的集合,機器指令展開來講就是一臺機器可以正確執行的命令。電子計算機的機器指令是一列二進制數字。計算機將之轉變為一列高低電平,以使計算機的電子器件受到驅動,從而進行運算。?每一種微處理器,由于硬件設計和內部結構的不同,就需要用不同的電平脈沖來控制,以使它工作。所以每一種微處理器都有自己的機器指令集,也就是機器語言。
···比如:在顯示器輸出“welcome to masm”,機器碼如圖: 匯編語言:這種語言相對機器語言的抽象,首先表現在將機器語言的每一條指令符號化:指令碼代之以記憶符號,地址碼代之以符號地址,使得其含義顯現在符號上而不再隱藏在編碼中,可讓人望"文"生義。其次表現在這種語言擺脫了具體計算機的限制,可在不同指令集的計算機上運行,只要該計算機配上匯編語言的一個匯編程序。 匯編語言和機器語言是一一對應的關系,所以有什么CPU架構就有什么匯編語言,比如x86架構的就是x86匯編,ARM架構的CPU對應于ARM匯編,MIPS架構的CPU對應于MIPS匯編。
CPU根據總線寬度可以分8位,16位,32位,64位等,所以相應的就有8位匯編,16位匯編,32位匯編等。
高級語言:面向用戶的語言。高級語言為程序員提供了結構化程序設計的環境和工具,使得設計出來的程序可讀性好,可維護性強,可靠性高; 高級語言遠離機器語言,與具體的計算機硬件關系不大,因而所寫出來的程序可移植性好,重用率高。
??高級語言的翻譯有兩種方式:編譯方式和解釋方式。
解釋語言:是電腦使用的機器語言,與機器語言1對1地對應的匯編語言相比,高抽象度,與人類平常使用的自然語言相近的感覺的高級語言。由于電腦無法識別人類所記述的源代碼,所以由解釋語言(腳本引擎)翻譯成機器語言,變換成可執行的程序。
Basic語言就是典型的解釋型語言。
編譯語言:這個語言,由于需要先把程序轉換成機器語言程序然后再執行,所以在開發的速度與容易度,修正的方便性上都不如匯編語言,但是,由于不需要同時翻譯,所以在實效速度上占有很大的優勢。還有,解釋語言中的執行環境里需要源代碼,編譯語言里就不需要。比如:Python,JavaScript。
腳本語言:“特定的描述性語言,依據一定的格式編寫的可執行文件,以純文本的方式保存,又稱宏或批處理文件。”簡單的說,腳本就是一條條的文字命令,這些文字是可以看到的,在執行時由系統的一個解釋器,將其一條條的命令翻譯成機器可識別的指令,并按順序執行,因為腳本在執行時多了一道翻譯的過程,所以它比二進制程序執行效率要稍低一些。雖然編譯程序代碼也是可以看到的,但是查看的環境要求就比較高了。
常見的腳本語言有:Scala、JavaScript、ASP、JSP、PHP、Shell、python等。
動態語言:是指程序在運行時可以改變其結構(新的函數可以被引進,已有的函數可以被刪除等在結構上的變化)。比如眾所周知的JavaScript便是一個動態語言。所謂的動態類型語言,意思就是類型的檢查是在運行時做的,可以簡單的理解為直接被解釋執行的語言稱為動態語言。
動態語言有:ASP、PHP、CGI、lisppython等。
靜態語言:需要編譯環境將程序轉換為其它的編碼再執行的語言稱為靜態語言。
當前靜態語言有:Java、C/C++、C#、VB等。
函數式語言(比如F#及Scala):函數式語言是一種非馮·諾伊曼式的程序設計語言。函數式語言主要成分是原始函數、定義函數和函數型。這種語言具有較強的組織數據結構的能力,可以把某一數據結構(如數組)作為單一值處理;可以把函數作為參數,其結果也可為函數,這種定義的函數稱為高階函數,程序就是函數,程序作用在結構型數據上,產生結構型結果,從根本上改變了馮·諾伊曼式語言的“逐詞”工作方式。(F#是微軟.NET平臺上一門新興的函數式編程語言,是微軟唯一的FP語言,而微軟也致力于將F#打造成為.NET平臺的頂峰語言,我們也期待著F#能夠給函數式編程語言帶來一次重大革命。
Scala是一種基于Java的通用編程語言,旨在推廣函數式編程,它編譯成Java字節碼,在Java虛擬機(JVM)上運行。雖然Scala本質上是一個函數式編程語言,但它也體現了面向對象語言的所有必要元素,這一點使函數式編程特性對編程社區的吸引力更大。)
命令式程序設計語言:是基于動作的語言,以馮諾依曼計算機體系結構為背景。機器語言及匯編語言是最早的命令式語言。在這種語言中,計算機被看做是動作的序列,程序就是用語言提供的操作命令書寫的一個操作序列。用命令式程序設計語言編寫程序,就是描述解題過程中每一步的過程,程序的運行過程就是問題的求解過程,因此也稱為過程式語言。比如說C語言就是命令式程序設計語言。
面向對象語言:是一類以對象作為基本程序結構單位的程序設計語言,指用于描述的設計是以對象為核心,而對象是程序運行時刻的基本成分。語言中提供了類、繼承等成分。
面向對象語言刻畫客觀系統較為自然,便于軟件擴充與復用。有四個主要特點:
⑴識認性,系統中的基本構件可識認為一組可識別的離散對象;
(2)類別性,系統具有相同數據結構與行為的所有對象可組成一類;
(3)多態性,對象具有惟一的靜態類型和多個可能的動態類型;
(4)繼承性,在基本層次關系的不同類中共享數據和操作。
其中,前三者為基礎,繼承是特色。四者(有時再加上動態綁定)結合使用,體現出
面向對象語言的表達能力。
一般認為,較典型的面向對象語言有:
Smalltalk支持單繼承、多態和動態綁定;
EIFFEL,支持多繼承、多態和動態綁定;
C++,支持多繼承、多態和部分動態綁定。
Java,支持單繼承、多態和部分動態綁定
基于類的面向對象語言是面向對象世界里的主流。它包括:
Simula, 第一個面向對象語言;
Smalltalk, 第一個支持動態類型的語言;
C++, 它的大部分基于類的特性繼承自Simula。
?過程式語言:過程式語言整個是構建在動詞上的語言。比如,最常見的經典過程式語言- C語言,打印一條語句的語法是printf(), 這個方法的名字本身就是一個動詞,這個動詞強調了一個動作的過程,所謂過程式就是這個意思。
···比如:在顯示器輸出“welcome to masm”,機器碼如圖: 匯編語言:這種語言相對機器語言的抽象,首先表現在將機器語言的每一條指令符號化:指令碼代之以記憶符號,地址碼代之以符號地址,使得其含義顯現在符號上而不再隱藏在編碼中,可讓人望"文"生義。其次表現在這種語言擺脫了具體計算機的限制,可在不同指令集的計算機上運行,只要該計算機配上匯編語言的一個匯編程序。 匯編語言和機器語言是一一對應的關系,所以有什么CPU架構就有什么匯編語言,比如x86架構的就是x86匯編,ARM架構的CPU對應于ARM匯編,MIPS架構的CPU對應于MIPS匯編。
CPU根據總線寬度可以分8位,16位,32位,64位等,所以相應的就有8位匯編,16位匯編,32位匯編等。
高級語言:面向用戶的語言。高級語言為程序員提供了結構化程序設計的環境和工具,使得設計出來的程序可讀性好,可維護性強,可靠性高; 高級語言遠離機器語言,與具體的計算機硬件關系不大,因而所寫出來的程序可移植性好,重用率高。
??高級語言的翻譯有兩種方式:編譯方式和解釋方式。
解釋語言:是電腦使用的機器語言,與機器語言1對1地對應的匯編語言相比,高抽象度,與人類平常使用的自然語言相近的感覺的高級語言。由于電腦無法識別人類所記述的源代碼,所以由解釋語言(腳本引擎)翻譯成機器語言,變換成可執行的程序。
Basic語言就是典型的解釋型語言。
編譯語言:這個語言,由于需要先把程序轉換成機器語言程序然后再執行,所以在開發的速度與容易度,修正的方便性上都不如匯編語言,但是,由于不需要同時翻譯,所以在實效速度上占有很大的優勢。還有,解釋語言中的執行環境里需要源代碼,編譯語言里就不需要。比如:Python,JavaScript。
腳本語言:“特定的描述性語言,依據一定的格式編寫的可執行文件,以純文本的方式保存,又稱宏或批處理文件。”簡單的說,腳本就是一條條的文字命令,這些文字是可以看到的,在執行時由系統的一個解釋器,將其一條條的命令翻譯成機器可識別的指令,并按順序執行,因為腳本在執行時多了一道翻譯的過程,所以它比二進制程序執行效率要稍低一些。雖然編譯程序代碼也是可以看到的,但是查看的環境要求就比較高了。
常見的腳本語言有:Scala、JavaScript、ASP、JSP、PHP、Shell、python等。
動態語言:是指程序在運行時可以改變其結構(新的函數可以被引進,已有的函數可以被刪除等在結構上的變化)。比如眾所周知的JavaScript便是一個動態語言。所謂的動態類型語言,意思就是類型的檢查是在運行時做的,可以簡單的理解為直接被解釋執行的語言稱為動態語言。
動態語言有:ASP、PHP、CGI、lisppython等。
靜態語言:需要編譯環境將程序轉換為其它的編碼再執行的語言稱為靜態語言。
當前靜態語言有:Java、C/C++、C#、VB等。
函數式語言(比如F#及Scala):函數式語言是一種非馮·諾伊曼式的程序設計語言。函數式語言主要成分是原始函數、定義函數和函數型。這種語言具有較強的組織數據結構的能力,可以把某一數據結構(如數組)作為單一值處理;可以把函數作為參數,其結果也可為函數,這種定義的函數稱為高階函數,程序就是函數,程序作用在結構型數據上,產生結構型結果,從根本上改變了馮·諾伊曼式語言的“逐詞”工作方式。(F#是微軟.NET平臺上一門新興的函數式編程語言,是微軟唯一的FP語言,而微軟也致力于將F#打造成為.NET平臺的頂峰語言,我們也期待著F#能夠給函數式編程語言帶來一次重大革命。
Scala是一種基于Java的通用編程語言,旨在推廣函數式編程,它編譯成Java字節碼,在Java虛擬機(JVM)上運行。雖然Scala本質上是一個函數式編程語言,但它也體現了面向對象語言的所有必要元素,這一點使函數式編程特性對編程社區的吸引力更大。)
命令式程序設計語言:是基于動作的語言,以馮諾依曼計算機體系結構為背景。機器語言及匯編語言是最早的命令式語言。在這種語言中,計算機被看做是動作的序列,程序就是用語言提供的操作命令書寫的一個操作序列。用命令式程序設計語言編寫程序,就是描述解題過程中每一步的過程,程序的運行過程就是問題的求解過程,因此也稱為過程式語言。比如說C語言就是命令式程序設計語言。
面向對象語言:是一類以對象作為基本程序結構單位的程序設計語言,指用于描述的設計是以對象為核心,而對象是程序運行時刻的基本成分。語言中提供了類、繼承等成分。
面向對象語言刻畫客觀系統較為自然,便于軟件擴充與復用。有四個主要特點:
⑴識認性,系統中的基本構件可識認為一組可識別的離散對象;
(2)類別性,系統具有相同數據結構與行為的所有對象可組成一類;
(3)多態性,對象具有惟一的靜態類型和多個可能的動態類型;
(4)繼承性,在基本層次關系的不同類中共享數據和操作。
其中,前三者為基礎,繼承是特色。四者(有時再加上動態綁定)結合使用,體現出
面向對象語言的表達能力。
一般認為,較典型的面向對象語言有:
Smalltalk支持單繼承、多態和動態綁定;
EIFFEL,支持多繼承、多態和動態綁定;
C++,支持多繼承、多態和部分動態綁定。
Java,支持單繼承、多態和部分動態綁定
基于類的面向對象語言是面向對象世界里的主流。它包括:
Simula, 第一個面向對象語言;
Smalltalk, 第一個支持動態類型的語言;
C++, 它的大部分基于類的特性繼承自Simula。
?過程式語言:過程式語言整個是構建在動詞上的語言。比如,最常見的經典過程式語言- C語言,打印一條語句的語法是printf(), 這個方法的名字本身就是一個動詞,這個動詞強調了一個動作的過程,所謂過程式就是這個意思。
總結
- 上一篇: 【bzoj3620】【似乎在梦中见过的样
- 下一篇: C++多态的原理(虚函数指针和虚函数表)