天天看點

[轉]計算機語言的種類總結

計算機語言的種類總結内容導讀: 今天來總結一下語言的種類,語言的種類從不同的角度會有不同的劃分,比如機器語言、彙編語言、進階語言、低級語言(機器語言及彙編語言)、編譯語言、解釋型語言、腳本語言、動态語言、靜态語言、函數式語言(比如f#及scala)、指令式語言、面向對象語言(比如c++...

  今天來總結一下語言的種類,語言的種類從不同的角度會有不同的劃分,比如機器語言、彙編語言、進階語言、低級語言(機器語言及彙編語言)、編譯語言、解釋型語言、腳本語言、動态語言、靜态語言、函數式語言(比如f#及scala)、指令式語言、面向對象語言(比如c++及java)、過程式語言、混合型語言(介于編譯型語言與解釋型語言之間,比如java與c#)等等,語言的種類繁多,五花八門什麼都有,真正的全部總結全面不是一件容易的事情,這裡我隻是起個抛磚引玉的作用,希望對大家有所幫助。

  另外關于機器語言、彙編語言及進階語言的資料,我以前寫過一篇文章,在這裡就不說很詳細了。

  1.動态語言及靜态語言

  動态語言,是指程式在運作時可以改變其結構:新的函數可以被引進,已有的函數可以被删除等在結構上的變化。比如衆所周知的ecmascript(javascript)便是一個動态語言。除此之外如ruby、python等也都屬于動态語言,而c、c++等語言則不屬于動态語言。

  所謂的動态類型語言,意思就是類型的檢查是在運作時做的,比如如下代碼是不是合法的要到運作時才判斷(注意是運作時的類型判斷):

  defsum(a,b):

  returna+b

  via:

  可以簡單的了解為直接被解釋執行的語言稱為動态語言。而需要編譯環境将程式轉換為其它的編碼再執行的語言稱為靜态語言。

  目前靜态語言有:java、c/c++、c#、delphi、vb等。

  動态語言有:asp、php、cgi、lisp、perl、python,smalltalk、ruby等。

  2.函數式程式設計語言

  f#是微軟.net平台上一門新興的函數式程式設計(fp,functionalprogramming)語言,作為微軟唯一的fp語言,其位置的特殊性引起了很多人的關注,而微軟也緻力于将f#打造成為.net平台的頂峰語言,我們也期待着f#能夠給函數式程式設計語言帶來一次重大革命。

  scala是一種基于java的通用程式設計語言,旨在推廣函數式程式設計,它編譯成java位元組碼,在java虛拟機(jvm)上運作。雖然scala本質上是一個函數式程式設計語言,但它也展現了面向對象語言的所有必要元素,這一點使函數式程式設計特性對程式設計社群的吸引力更大。

  f#是由微軟主持開發的一個通用程式設計語言,它是.net通用運作時(clr)的一部分,它是以另一個正統的函數式程式設計語言ocaml為基礎的,微軟在.net平台中引入f#除了人們對函數程式設計的興趣不斷上升外,另一個重要的原因是函數程式設計非常适合高性能和并行計算。雖然它的文法清晰,但f#實際上混合了函數式程式設計語言,指令式語言和面向對象語言的文法特性,它的面向對象和指令式特性大部分都與.net平台相容,f#的三重性質也很實用,它允許程式員使用任意結合這三個程式設計語言的特性使用。

  pyton及ruby也可以進行函數式程式設計

  python函數式程式設計到底有什麼用呢?我想實際的好處就是可以将更好的描述問題本身,而不是描述解決問題的操作步驟。

  3.指令式程式設計語言

  指令式程式設計語言是基于動作的語言,以馮諾依曼計算機體系結構為背景。機器語言及彙編語言是最早的指令式語言。在這種語言中,計算機被看做是動作的序列,程式就是用語言提供的操作指令書寫的一個操作序列。用指令式程式設計語言編寫程式,就是描述解題過程中每一步的過程,程式的運作過程就是問題的求解過程,是以也稱為過程式語言。fortran、algol、cobol、c、ada、pascal等都是指令式程式設計語言。

  4.面向對象語言

  面向對象語言(object-orientedlanguage)是一類以對象作為基本程式結構機關的程式設計語言,指用于描述的設計是以對象為核心,而對象是程式運作時刻的基本成分。語言中提供了類、繼承等成分。

  面向對象語言借鑒了20世紀50年代的人工智能語言lisp,引入了動态綁定的概念和互動式開發環境的思想;始于20世紀60年代的離散事件模拟語言simula67,引入了類的要領和繼承,成形于20世紀70年代的smalltalk。

  面向對象語言的發展有兩個方向:一種是純面向對象語言,如smalltalk、eiffel等;另一種是混合型面向對象語言,即在過程式語言及其它語言中加入類、繼承等成分,如c++、objective-c等。

  面向對象語言刻畫客觀系統較為自然,便于軟體擴充與複用。有四個主要特點:

  ⑴識認性,系統中的基本構件可識認為一組可識别的離散對象;

  (2)類别性,系統具有相同資料結構與行為的所有對象可組成一類;

  (3)多态性,對象具有惟一的靜态類型和多個可能的動态類型;

  (4)繼承性,在基本層次關系的不同類中共享資料和操作。

  其中,前三者為基礎,繼承是特色。四者(有時再加上動态綁定)結合使用,展現出面向對象語言的表達能力。

  一般認為,較典型的面向對象語言有:

  simula67,支援單繼承和一定含義的多态和部分動态綁定;

  smalltalk支援單繼承、多态和動态綁定;

  eiffel,支援多繼承、多态和動态綁定;

  c++,支援多繼承、多态和部分動态綁定。

  java,支援單繼承、多态和部分動态綁定

  五種語言涉及概念的含義雖基本相同,但所用術語有别。

  基于類的面向對象語言是面向對象世界裡的主流。它包括:

  simula,第一個面向對象語言

  smalltalk,第一個支援動态類型的語言

  c++,它的大部分基于類的特性繼承自simula.等等等等。

  與基于類的語言相對應的是基于對象的面向對象語言。這裡“基于對象”的概念和把visualbasic叫做基于對象的概念是不同的。這裡的“基于對象”是指一個隻以對象為中心,沒有類的概念的語言,類似python之類的語言。

  5.過程式語言

  過程式語言與面向對象語言,到底有什麼差別?可能是初學者常碰到的問題。簡單來說,過程式語言整個是建構在動詞上的語言。比如,最常見的經典過程式語言-c語言,列印一條語句的文法是printf(),這個方法的名字本身就是一個動詞,這個動詞強調了一個動作的過程,所謂過程式就是這個意思。

  同樣的方法在面向對象的java中就是這樣寫:system.out.println();前面說過面向對象語言就是建構在名詞基礎上的系統,對象就是一個名詞。大家都知道對象封裝了操作和屬性,是以system是一個對象,後面跟上分類在out目錄下的方法println。這就是面向對象的寫法。

  6.解釋型語言

  計算機不能直接了解進階語言,隻能直接了解機器語言,是以必須要把進階語言翻譯成機器語言,計算機才能執行進階語言編寫的程式。

  翻譯的方式有兩種,一個是編譯,一個是解釋。兩種方式隻是翻譯的時間不同。編譯型語言寫的程式執行之前,需要一個專門的編譯過程,把程式編譯成為機器語言的檔案,比如exe檔案,以後要運作的話就不用重新翻譯了,直接使用編譯的結果就行了(exe檔案),因為翻譯隻做了一次,運作時不需要翻譯,是以編譯型語言的程式執行效率高。

  解釋則不同,解釋性語言的程式不需要編譯,省了道工序,解釋性語言在運作程式的時候才翻譯,比如解釋性basic語言,專門有一個解釋器能夠直接執行basic程式,每個語句都是執行的時候才翻譯。這樣解釋性語言每執行一次就要翻譯一次,效率比較低。

  7.腳本語言

  1).腳本語言(javascript,vbscript等)介于html和c,c++,java,c#等程式設計語言之間。

  html通常用于格式化和鍊結文本。而程式設計語言通常用于向機器發出一系列複雜的指令。

  2).腳本語言與程式設計語言也有很多相似地方,其函數與程式設計語言比較相象一些,其也涉及到變量。與程式設計語言之間最大的差別是程式設計語言的文法和規則更為嚴格和複雜一些.

  3).與程式代碼的關系:腳本也是一種語言,其同樣由程式代碼組成。

  注:腳本語言一般都有相應的腳本引擎來解釋執行。他們一般需要解釋器才能運作。python、javascript,asp,php,perl,nuva都是腳本語言。c/c++編譯、連結後,可形成獨立執行的exe檔案。

  4).腳本語言是一種解釋性的語言,例如python、vbscript,javascript,installshieldscript,actionscript等等,它不象c\c++等可以編譯成二進制代碼,以可執行檔案的形式存在.

  腳本語言不需要編譯,可以直接用,由解釋器來負責解釋。

  5).腳本語言一般都是以文本形式存在,類似于一種指令.

  舉個例子說,如果你建立了一個程式,叫aaa.exe,可以打開.aa為擴充名的檔案.

  你為.aa檔案的編寫指定了一套規則(文法),當别人編寫了.aa檔案後,你的程式用這種規則來了解編寫人的意圖,并作出回應.那麼,這一套規則就是腳本語言.

  8.編譯型語言

  編譯型語言寫的程式執行之前,需要一個專門的編譯過程,把程式編譯成為機器語言的檔案,比如exe檔案,以後要運作的話就不用重新翻譯了,直接使用編譯的結果就行了(exe檔案),因為翻譯隻做了一次,運作時不需要翻譯,是以編譯型語言的程式執行效率高。

  這裡提一下編譯型語言和解釋型語言的差別:解釋性語言在運作程式的時候才翻譯,比如解釋性basic語言,專門有一個解釋器能夠直接執行basic程式,每個語句都是執行的時候才翻譯。這樣解釋性語言每執行一次就要翻譯一次,效率比較低。

  9.以另一個角度将程式語言分為5類

  1)、webpagescriptlanguages

  就是網頁代碼,比如html、javascript、css、asp、php、xml都應該屬于此類(照蔡的意思,html不應該屬于anguages的,可能他覺得太簡單了吧,不過我覺得html也應該算的,大家愛聽誰的就聽誰的好了,這個不重要)

  2)、interpretedlanguages(解釋型語言)

  包括perl、python、rebol、ruby等,也常被稱作script語言,通常被用于和底下的作業系統溝通。照蔡的意思,每個人至少應該學會一套這類的語言。這類語言的缺點是效率差、源代碼外露——是以不适合用來開發軟體産品,一般用于網頁伺服器。

  3)、hybridlaguages(混合型語言)

  代表是java和c#。介于解釋型和編譯型之間。蔡認為c#是.net最重要的語言,值得期待其後續發展;至于java,蔡叫看他的《sleeplessinjava》——我倒!

  4)、compilinglanguages(編譯型語言)

  c/c++,java都是編譯型語言。蔡說c++很複雜,要成為高手沒三五年是不行的(就憑這句話,我決定向java投降),雖然如此,但真正要成為高手的都應該懂c/c++。

  關于delphi,蔡說如果想要跨linux和windows平台的語言,則delphi似乎是最好的選擇。

  5)、assemblylanguages(彙編語言)

  彙編語言是最接近于硬體的語言,不過現在幾乎沒多少人用了。

  程式語言學習順序建議

  如果完全沒有程式經驗,可照這個順序:javascript——解釋型語言——混合型語言——編譯型語言——彙編(如果需要的話)

  用業界流行一句話做結尾“真正的程式員用c++,聰明的程式員用delphi”,那麼,什麼樣的程式員用java呢?

繼續閱讀