編程語(yǔ)言范式

許多現(xiàn)存的編程語(yǔ)言都可基于其計(jì)算模型加以分類,歸入某些語(yǔ)言族,或者屬于某種編程范式。按照不同的規(guī)則,可以有多種分類的方法,而且不同的學(xué)者對(duì)某些語(yǔ)言的具體歸屬也有不同的意見(jiàn)。這里我們給出一種語(yǔ)言譜系:
說(shuō)明式Declarative
  函數(shù)式 Lisp,ML,Haskell
  數(shù)據(jù)流 ld,Val
  邏輯式 Prolog
  基于模板的 XSLT
命令式Imperative
  馮諾依曼 C,Ada,Fortran
  腳本式 Perl,Python,PHP
  面向?qū)ο?Smalltalk,C++,Java
  值得注意的是這里并沒(méi)有列出所有的編程范式,因?yàn)橛行┚幊谭妒讲⒉荒馨匆陨系姆椒ㄟM(jìn)行分類,比如:元編程,泛型編程。另外還有一點(diǎn)就是并不是一種語(yǔ)言就只從屬于一種編程范式,事實(shí)上有些語(yǔ)言本身就是為支持多范式設(shè)計(jì)的,比如:Lisp就同時(shí)支持函數(shù)式編程、面向?qū)ο蟆⒃幊獭?br>   下面來(lái)分別介紹上面列出的幾種編程范式:
  函數(shù)式(functional)語(yǔ)言采用一種基于函數(shù)的遞歸定義的計(jì)算模型。他們的靈感來(lái)自于lambda 演算。本質(zhì)上,程序被看作是一種從輸入到輸出的函數(shù),基于一些更簡(jiǎn)單的函數(shù),通過(guò)一種逐步精化的過(guò)程定義。函數(shù)式語(yǔ)言語(yǔ)言進(jìn)行計(jì)算的主要方式是將函數(shù)作用于給定參數(shù)之上的。在函數(shù)式語(yǔ)言的程序設(shè)計(jì)中可以沒(méi)有命令式語(yǔ)言所必需的那種變量,可以沒(méi)有賦值語(yǔ)句,也可以沒(méi)有循環(huán)。純函數(shù)式語(yǔ)言是沒(méi)有副作用的。從某種程序上,函數(shù)式語(yǔ)言代表了對(duì)計(jì)算機(jī)的一種數(shù)學(xué)模型(lambda 演算)的實(shí)現(xiàn)。Lisp是第一個(gè)函數(shù)式語(yǔ)言,但并不是純函數(shù)式語(yǔ)言。典型的函數(shù)式語(yǔ)言有F#、ML和Haskell。
  數(shù)據(jù)流(Dataflow)語(yǔ)言將計(jì)算看成在一些基本的功能結(jié)點(diǎn)之間流動(dòng)的信息流。這些語(yǔ)言提供了一種具有內(nèi)在并行性的模型:結(jié)點(diǎn)由輸入單詞的到達(dá)觸發(fā),能夠并發(fā)操作。
  邏輯式(Logic)或基于約束的(constrained-based)語(yǔ)言有命題邏輯得到靈感,他們把計(jì)算看作是一種目標(biāo)制導(dǎo)的搜索過(guò)程,設(shè)法根據(jù)一集邏輯規(guī)則找出滿足某些特定關(guān)系的值。Prolog是最有名的邏輯式語(yǔ)言。
  馮諾依曼語(yǔ)言是我們最熟悉的,也是最成功的。所有把修改變量的值當(dāng)作最基本計(jì)算方式的語(yǔ)言都可以稱作馮諾依曼語(yǔ)言,包括我們熟悉的C,Fortran等待。這類語(yǔ)言是建立馮諾依曼體系結(jié)構(gòu)之上的。由于馮諾依曼體系結(jié)構(gòu),這類語(yǔ)言的核心有:模擬存儲(chǔ)單元的變量,基于傳輸操作的賦值語(yǔ)句,以及迭代形式的循環(huán)運(yùn)算。因此從某種程序上,這類語(yǔ)言是基于計(jì)算機(jī)的另一種數(shù)學(xué)模型(圖靈機(jī))的,實(shí)現(xiàn)了對(duì)計(jì)算機(jī)硬件結(jié)構(gòu)的抽象。函數(shù)式語(yǔ)言的基礎(chǔ)是具有值的表達(dá)式,而馮諾依曼語(yǔ)言的基礎(chǔ)是語(yǔ)句(特別是賦值),他們通過(guò)修改存儲(chǔ)器里面的值而產(chǎn)生副作用(side effect)的方法去影響后續(xù)計(jì)算。
  腳本語(yǔ)言(Scripting)是馮諾依曼語(yǔ)言的一個(gè)子類,特點(diǎn)在于強(qiáng)調(diào)其主要用途是把用其他語(yǔ)言開(kāi)發(fā)的獨(dú)立程序作為部件“粘到一起”。Python就是著名的膠水語(yǔ)言,一些腳本語(yǔ)言都有特定的用途(比如 bash是nix系統(tǒng)的shell語(yǔ)言)。但是像Perl Python Ruby卻是希望作為通用語(yǔ)言的。
  
面向?qū)ο?/em>*(object-oriented)語(yǔ)言最早可以追溯到simula 67,但是真正讓面對(duì)對(duì)象流行起來(lái)的是smalltalk,甚至object-oriented這個(gè)詞就是smalltalk的作者發(fā)明的。大部分面向?qū)ο笳Z(yǔ)言都與馮諾依曼語(yǔ)言有很深的淵源,只是在存儲(chǔ)和計(jì)算兩方面采用了一種更加結(jié)構(gòu)化和分布式的模型。面向?qū)ο笳Z(yǔ)言將計(jì)算建立在獨(dú)立的對(duì)象的相互作用至上。每個(gè)對(duì)象有其自身的內(nèi)部狀態(tài),以及管理自身狀態(tài)的可執(zhí)行子程序。
  最后要強(qiáng)調(diào)的一點(diǎn)是,語(yǔ)言類之間的劃分不是絕對(duì)的,劃分的方法也不止一種。這里再給出另一種常見(jiàn)的分類方法:
  命令式編程
  函數(shù)式編程
  面向?qū)ο缶幊?br>   邏輯式編程
  btw:這里的命令式編程語(yǔ)言就相當(dāng)于馮諾依曼語(yǔ)言,也基本等同于通常所說(shuō)的面向過(guò)程編程。

參考文獻(xiàn):程序設(shè)計(jì)語(yǔ)言-實(shí)踐之路 Michael Scott
       程序設(shè)計(jì)原理 8th edition Robert W. Sebesta

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 編程范式[ 程序員的編程世界觀 ] 編程范式(Programming Paradigm)是某種編程語(yǔ)言的典型編程風(fēng)...
    Albert陳凱閱讀 914評(píng)論 0 1
  • Java 8 函數(shù)式編程 本次主題主要介紹什么是函數(shù)式編程,其主要特點(diǎn), 以及它在 Java8 中是怎么體現(xiàn)的.函...
    captainary閱讀 2,352評(píng)論 1 11
  • 歷史來(lái)源 在計(jì)算機(jī)的世界中,有兩位巨擘對(duì)問(wèn)題的可計(jì)算性做了模型化描述 一位是阿蘭.圖靈(Alan Turing),...
    洋洋灑灑_6a20閱讀 5,592評(píng)論 0 6
  • 計(jì)算機(jī)編程語(yǔ)言可用于將指令傳達(dá)給計(jì)算機(jī)。它們基于某些句法和語(yǔ)義規(guī)則,定義了編程語(yǔ)言中每種結(jié)構(gòu)的含義。 現(xiàn)在我得到了...
    幻凌風(fēng)閱讀 8,237評(píng)論 1 26
  • 在學(xué)校的圖書館 借了《呼蘭河傳》也有些日子了,我復(fù)的看了兩遍,我看書很喜歡反復(fù)的看。第一遍看大致寫了什么內(nèi)...
    熊不吃?shī)W利奧閱讀 357評(píng)論 0 1