1940之前第一個(gè)編程語言比現(xiàn)代的計(jì)算機(jī)還早誕生。首先,這種語言是種編碼(en:code)。 于1801年發(fā)明的提花織布機(jī)(或稱甲卡提花織布機(jī),英文:en:Jacquard loom),運(yùn)用打孔卡上的坑洞來代表縫紉織布機(jī)的手臂動(dòng)作,以便自動(dòng)化產(chǎn)生裝飾的圖案。 Ada Lovelace在1842年至1843年間花費(fèi)了九個(gè)月,將意大利數(shù)學(xué)家Luigi Menabrea關(guān)于查爾斯·巴貝奇新發(fā)表機(jī)器分析機(jī)的回憶錄翻譯完成。她于那篇文章后面附加了一個(gè)用分析機(jī)計(jì)算伯努利數(shù)方法的細(xì)節(jié),被部分歷史學(xué)家認(rèn)為是世界上第一個(gè)電腦程序。 [1] Herman Hollerith在觀察列車長(zhǎng)對(duì)乘客票根在特定位置打洞的方式后,意識(shí)到他可以把資訊編碼記載到打孔卡上,隨后根據(jù)這項(xiàng)發(fā)現(xiàn)使用打孔卡來編碼并紀(jì)錄1890年的人口統(tǒng)計(jì)資料。 第一個(gè)計(jì)算機(jī)程式碼是針對(duì)他們的應(yīng)用面設(shè)計(jì)的。在20世紀(jì)的前十年主要是用十進(jìn)制來算數(shù),后來人們發(fā)現(xiàn)不只是用文字,也可以用數(shù)字來表現(xiàn)邏輯。舉例來說,阿隆佐·邱奇曾以公式化(formulaic)的方式表達(dá)λ演算。圖靈機(jī)是一種紙帶標(biāo)記(tape-marking)機(jī)器(就像電話公司用的那種)操作方法抽象化后的集合。圖靈機(jī)這種透過有限數(shù)字(finite number)呈現(xiàn)機(jī)器的方式,奠定了程式如同馮·諾伊曼結(jié)構(gòu)計(jì)算機(jī)中的資料一樣地儲(chǔ)存的基礎(chǔ)。但不同于λ演算,圖靈機(jī)的程式碼并沒有辦法成為高階編程語言的基石,這是是因?yàn)樗饕挠猛臼欠治?a title='計(jì)算復(fù)雜性理論' href='http://zh./wiki/%E8%A8%88%E7%AE%97%E8%A4%87%E9%9B%9C%E6%80%A7%E7%90%86%E8%AB%96'>算法的復(fù)雜度。 就像許多歷史上的'第一次'一樣,第一個(gè)現(xiàn)代編程語言也很難界定。最一開始是因?yàn)橛布拗贫薅苏Z言,打孔卡允許80行(column)的長(zhǎng)度,但某幾行必須用來記錄卡片的順序。FORTRAN則納入了一些與英文字詞相同的關(guān)鍵字,像是'IF'、'GOTO'(原字詞為go to),以及'CONTINUE'。之后采用磁鼓(magnetic drum)作為內(nèi)存使用,也代表計(jì)算機(jī)程式也必須插入(interleave)到磁鼓的轉(zhuǎn)動(dòng)(rotation)中。和現(xiàn)今比較起來,這也讓編程語言必須更加依賴硬件(hardware-dependent)。 對(duì)部分的人認(rèn)為必須在'編程語言'的狀態(tài)確立之前,根據(jù)能力(power)以及可讀性(human-readability)的程度來決定歷史上第一個(gè)編程語言是什么語言。提花織布機(jī)和查爾斯·巴貝奇所制作的差分機(jī)(en:Difference Engine)都具備在大量限制下,簡(jiǎn)單描述機(jī)器應(yīng)執(zhí)行行為的語言。也有種并非設(shè)計(jì)給人類運(yùn)用的受限特定領(lǐng)域語言(en:domain-specific language),是將打孔卡運(yùn)用到自動(dòng)演奏鋼琴(en:player piano)上。 1940年代最早被確認(rèn)的現(xiàn)代化、電力啟動(dòng)(electrically powered)的計(jì)算機(jī)約在1940年代被創(chuàng)造出來。程序員在有限的速度及內(nèi)存容量限制之下,撰寫人工調(diào)整(hand tuned)過的組合語言程式。而且很快就發(fā)現(xiàn)到使用組合語言的這種撰寫方式需要花費(fèi)大量的腦力(intellectual effort)而且很容易出錯(cuò)(error-prone)。 Konrad Zuse于1948年發(fā)表了他所設(shè)計(jì)的Plankalkül編程語言的論文[1]。但是在他有生之年卻未能將該語言實(shí)作,而他原本的貢獻(xiàn)也被其他的發(fā)展所孤立。 在這段期間被開發(fā)出來的重要語言包括有:
1950與1960年代有三個(gè)現(xiàn)代編程語言于1950年代被設(shè)計(jì)出來,這三者所衍生的語言直到今日仍舊廣泛地被采用:
另一個(gè)1950年代晚期的里程碑是由美國(guó)與歐洲計(jì)算機(jī)學(xué)者針對(duì)'算法的新語言'所組成的委員會(huì)出版的ALGOL 60報(bào)告(名稱取自'ALGOrithmic Language'(算法語言))。這份報(bào)告強(qiáng)化了當(dāng)時(shí)許多關(guān)于計(jì)算的想法,并提出了兩個(gè)語言上的創(chuàng)新功能:
另一個(gè)創(chuàng)新則是關(guān)于語言的描述方式:
Algol 60對(duì)之后語言的設(shè)計(jì)上帶來了特殊的影響,部分的語言很快的就被廣泛采用。后續(xù)為了開發(fā)Algol的擴(kuò)充子集合,設(shè)計(jì)了一個(gè)名為Burroughs(en:Burroughs large systems)的大型系統(tǒng)。 延續(xù)Algol的關(guān)鍵構(gòu)想所產(chǎn)生的成果就是ALGOL 68:
Algol 68一些較少被使用到的語言功能(如同步與并列區(qū)塊)、語法捷徑的復(fù)雜系統(tǒng),以及型態(tài)自動(dòng)強(qiáng)制轉(zhuǎn)換(coercions),使得實(shí)作者興趣缺缺,也讓Algol 68獲得了很難用(diffcult)的名聲。尼克勞斯·維爾特就干脆離開該設(shè)計(jì)委員會(huì),另外在開發(fā)出更簡(jiǎn)單的Pascal語言。 在這段期間被開發(fā)出來的重要語言包括有:
1967-1978:確立了基礎(chǔ)范式1960年代晚期至1970年代晚期的期間中,編程語言的發(fā)展也有了重大的成果。大多數(shù)現(xiàn)在所使用的主要語言范式都是在這段期間中發(fā)明的:
這些語言都各自演展出自己的家族分支,現(xiàn)今多數(shù)現(xiàn)代編程語言的祖先都可以追朔他們其中至少一個(gè)以上。 在1960年代以及1970年代中結(jié)構(gòu)化程式設(shè)計(jì)的優(yōu)點(diǎn)也帶來許多的爭(zhēng)議,特別是在程式開發(fā)的過程中完全不使用GOTO。這項(xiàng)爭(zhēng)議跟語言本身的設(shè)計(jì)非常有關(guān)系:某些語言并沒有包含GOTO,這也強(qiáng)迫程序員必須結(jié)構(gòu)化地編寫程式。盡管這個(gè)爭(zhēng)議在當(dāng)時(shí)吵翻了天,但幾乎所有的程序員都同意就算語言本身有提供GOTO的功能,在除了少數(shù)罕見的情況下去使用GOTO是種不良的程序風(fēng)格。結(jié)果是之后世代的編程語言設(shè)計(jì)者發(fā)覺到結(jié)構(gòu)化編程語言的爭(zhēng)議實(shí)在既乏味又令人眼花撩亂。 在這段期間被開發(fā)出來的重要語言包括有:
1980年代:增強(qiáng)、模組、效能1980年代的編程語言與之前相較顯得更為強(qiáng)大。C++合并了面向?qū)ο笠约跋到y(tǒng)程式設(shè)計(jì)。美國(guó)政府標(biāo)準(zhǔn)化一種名為Ada的系統(tǒng)編程語言并提供給國(guó)防承包商使用。日本以及其他地方運(yùn)用了大量的資金對(duì)采用邏輯編程語言結(jié)構(gòu)的第五代語言進(jìn)行研究。函數(shù)編程語言社群則把焦點(diǎn)轉(zhuǎn)移到標(biāo)準(zhǔn)化ML及Lisp身上。這些活動(dòng)都不是在開發(fā)新的范式,而是在將上個(gè)世代發(fā)明的構(gòu)想進(jìn)一步發(fā)揚(yáng)光大。 然而,在語言設(shè)計(jì)上有個(gè)重大的新趨勢(shì),就是研究運(yùn)用模組或大型組織化的程式單元來進(jìn)行大型系統(tǒng)的開發(fā)。Modula、Ada,以及ML都在1980年代發(fā)展出值得注意的模組化系統(tǒng)。模組化系統(tǒng)常拘泥于采用泛型程式設(shè)計(jì)結(jié)構(gòu):泛型存在(generics being)、本質(zhì)(essence),參數(shù)化模組(parameterized modules)。(參閱多型) 盡管沒有出現(xiàn)新的主要編程語言范式,許多研究人員仍就擴(kuò)充之前語言的構(gòu)想并將它們運(yùn)用到新的內(nèi)容上。舉例來說,Argus以及Emerald系統(tǒng)的語言配合面向?qū)ο笳Z言運(yùn)用到分散式系統(tǒng)上。 1980年代的編程語言實(shí)作情況也有所進(jìn)展。計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)中RISC的進(jìn)展假定硬件應(yīng)當(dāng)為編譯器設(shè)計(jì),而非身為人類的組合語言程序員。借由中央處理器速度增快的幫助,編譯技術(shù)也越來越積極,RISC的進(jìn)展對(duì)高階語言編譯技術(shù)帶來不小的關(guān)注。 語言技術(shù)持續(xù)這些發(fā)展并邁入了1990年代。 在這段期間被開發(fā)出來的重要語言包括有:
1990年代:互聯(lián)網(wǎng)時(shí)代1990年代未見到有什么重大的創(chuàng)新,大多都是以前構(gòu)想的重組或變化。這段期間主要在推動(dòng)的哲學(xué)是提升程序員的生產(chǎn)力。許多'快速應(yīng)用程序開發(fā)' (RAD) 語言也應(yīng)運(yùn)而生,這些語言大多都有相應(yīng)的集成開發(fā)環(huán)境、垃圾回收等機(jī)制,且大多是先前語言的衍生語言。這類型的語言也大多是面向?qū)ο?/a>的編程語言,包含有Object Pascal、Visual Basic,以及C#。Java則是更加保守的語言,也具備垃圾回收機(jī)制。與其他類似語言相比,也受到更多的觀注。新的腳本語言則比RAD語言更新更好。這種語言并非直接從其他語言衍生,而且新的語法更加開放地(liberal)與功能契合。雖然腳本語言比RAD語言來的更有生產(chǎn)力,但大多會(huì)有因?yàn)樾〕淌捷^為簡(jiǎn)單,但是大型程式則難以使用腳本語言撰寫并維護(hù)的顧慮。盡管如此,腳本語言還是網(wǎng)絡(luò)層面的應(yīng)用上大放異彩。 在這段期間被開發(fā)出來的重要語言包括有:
現(xiàn)今的趨勢(shì)編程語言持續(xù)在學(xué)術(shù)及企業(yè)兩個(gè)層面中發(fā)展進(jìn)化,目前的一些趨勢(shì)包含有:
在這段期間被開發(fā)出來的重要語言包括有:
編程語言發(fā)展史上的杰出人物
|
|