Moz的C++教學
程式語言歷史
機器語言程式
程式語言演進
組合語言程式
高階語言程式
結構化程式
物件導向程式
C++,JAVA
1940年代
最早被確認的現代化、電力啟動的計算機約在1940年代被創造出來。程式設計師在有限的速度及記憶體容量限制之下,撰寫人工調整過的組合語言程式。而且很快就發現到使用組合語言的這種撰寫方式需要花費大量的腦力而且很容易出錯。
康拉德·楚澤於1948年發表了他所設計的Plankalkül程式語言的論文。但是在他有生之年卻未能將該語言實作,而他原本的貢獻也被其他的發展所孤立。
在這段期間被開發出來的重要語言包括有:
-
1943 - Plankalkül (Konrad Zuse)
-
1943 - ENIAC coding system
-
1949 - C-10
1950-1960年代
有三個現代程式語言於1950年代被設計出來,這三者所衍生的語言直到今日仍舊廣泛地被採用:
-
Fortran (1955),名稱取自"FORmula TRANslator"(公式翻譯器),由約翰·巴科斯等人所發明;
-
LISP,名稱取自"LISt Processor"(列舉處理器),由約翰·麥卡錫等人所發明;
-
COBOL,名稱取自"COmmon Business Oriented Language"(通用商業導向語言),由被葛麗絲·霍普深刻影響的Short Range Committee所發明。
另一個1950年代晚期的里程碑是由美國與歐洲計算機學者針對"演算法的新語言"所組成的委員會出版的ALGOL 60報告(名稱取自"ALGOrithmic Language"(演算法語言))。這份報告強化了當時許多關於計算的想法,並提出了兩個語言上的創新功能:
-
巢狀區塊結構:可以將有意義的程式碼片段群組成一個區塊(block),而非轉成分散且特定命名的程序。
-
詞彙範圍:區塊可以有區塊外部無法透過名稱存取,屬於區塊本身的變數、程序以及函式。
另一個創新則是關於語言的描述方式:
-
一種名為巴科斯-諾爾範式 (BNF)的數學化精確符號被用於描述語言的語法。之後的程式語言幾乎全部都採用類似BNF的方式來描述程式語法中上下文無關的部份。
Algol 60對之後語言的設計上帶來了特殊的影響,部分的語言很快的就被廣泛採用。後續為了開發Algol的擴充子集合,設計了一個名為Burroughs(en:Burroughs large systems)的大型系統。
延續Algol的關鍵構想所產生的成果就是ALGOL 68:
-
語法跟語意變的更加正交(orthogonal),採用匿名的歷程(routines),採用高階(higher-order)功能的遞迴式輸入(typing)系統等等。
-
整個語言及語意的部分都透過為了描述語言而特別設計的Van Wijngaarden grammar來進行正式的定義,而不僅止於上下文無關的部份。
Algol 68一些較少被使用到的語言功能(如同步與並列區塊)、語法捷徑的複雜系統,以及型態自動強制轉換(coercions),使得實作者興趣缺缺,也讓Algol 68獲得了很難用(diffcult)的名聲。尼克勞斯·維爾特就乾脆離開該設計委員會,另外在開發出更簡單的Pascal語言。
在這段期間被開發出來的重要語言包括有:
-
1951 - Regional Assembly Language
-
1952 - Autocode
-
1954 - FORTRAN
-
1954 - IPL (LISP的先驅)
-
1955 - FLOW-MATIC (COBOL的先驅)
-
1957 - COMTRAN (COBOL的先驅)
-
1958 - LISP
-
1958 - ALGOL 58
-
1959 - FACT (COBOL的先驅)
-
1959 - COBOL
-
1962 - APL
-
1962 - Simula
-
1962 - SNOBOL
-
1963 - CPL (C的先驅)
-
1964 - BASIC
-
1964 - PL/I
-
1967 - BCPL (C的先驅)
1967-1978:確立了基礎範式
1960年代晚期至1970年代晚期的期間中,程式語言的發展也有了重大的成果。大多數現在所使用的主要語言範式都是在這段期間中發明的:
-
Simula,於1960年代晚期由奈加特與Dahl以Algol 60超集合的方式發展,同時也是第一個設計支援物件導向進行開發的程式語言。
-
C,於1969至1973年間由貝爾實驗室的研究人員丹尼斯·里奇與肯·湯普遜所開發,是一種早期的系統程式設計(en:system programming)語言。
-
Smalltalk,於1970年代中期所開發,是一個完全從零開始(ground-up)設計的物件導向程式語言。
-
Prolog,於1972年由Colmerauer、Roussel,以及Kowalski所設計,是第一個邏輯程式語言。
-
ML,於1973年由羅賓·米爾納所發明,是一個基於Lisp所建構的多型(polymorphic)型態系統,同時也是靜態型別函數程式語言的先驅。
這些語言都各自演展出自己的家族分支,現今多數現代程式語言的祖先都可以追朔他們其中至少一個以上。
在1960年代以及1970年代中結構化程式設計的優點也帶來許多的爭議,特別是在程式開發的過程中完全不使用GOTO。這項爭議跟語言本身的設計非常有關係:某些語言並沒有包含GOTO,這也強迫程式設計師必須結構化地編寫程式。儘管這個爭議在當時吵翻了天,但幾乎所有的程式設計師都同意就算語言本身有提供GOTO的功能,在除了少數罕見的情況下去使用GOTO是種不良的程序風格。結果是之後世代的程式語言設計者發覺到結構化程式語言的爭議實在既乏味又令人眼花撩亂。
在這段期間被開發出來的重要語言包括有:
-
1968 - Logo
-
1970 - Pascal
-
1970 - Forth
-
1972 - C語言
-
1972 - Smalltalk
-
1972 - Prolog
-
1973 - ML
-
1975 - Scheme
-
1978 - SQL (起先只是一種查詢語言,擴充之後也具備了程式結構)
1980年代:增強、模組、效能
1980年代的程式語言與之前相較顯得更為強大。C++合併了物件導向以及系統程式設計。美國政府標準化一種名為Ada的系統程式語言並提供給國防承包商使用。日本以及其他地方運用了大量的資金對採用邏輯程式語言結構的第五代語言進行研究。函數程式語言社群則把焦點轉移到標準化ML及Lisp身上。這些活動都不是在開發新的範式,而是在將上個世代發明的構想進一步發揚光大。
然而,在語言設計上有個重大的新趨勢,就是研究運用模組或大型組織化的程式單元來進行大型系統的開發。Modula、Ada,以及ML都在1980年代發展出值得注意的模組化系統。模組化系統常拘泥於採用泛型程式設計結構:泛型存在(generics being)、本質(essence),參數化模組(parameterized modules)。(參閱多型)
儘管沒有出現新的主要程式語言範式,許多研究人員仍就擴充之前語言的構想並將它們運用到新的內容上。舉例來說,Argus以及Emerald系統的語言配合物件導向語言運用到分散式系統上。
1980年代的程式語言實作情況也有所進展。計算機系統結構中RISC的進展假定硬體應當為編譯器設計,而非身為人類的組合語言程式設計師。藉由中央處理器速度增快的幫助,編譯技術也越來越積極,RISC的進展對高階語言編譯技術帶來不小的關注。
語言技術持續這些發展並邁入了1990年代。
在這段期間被開發出來的重要語言包括有:
-
1980 - Ada
-
1983 - C++ (就像有類別的C)
-
1984 - Common Lisp
-
1985 - Eiffel
-
1986 - Erlang
-
1987 - Perl
-
1988 - Tcl
-
1989 - FL (Backus)
1990年代:網際網路時代
1990年代未見到有什麼重大的創新,大多都是以前構想的重組或變化。這段期間主要在推動的哲學是提升程式設計師的生產力。許多"快速應用程式開發" (RAD) 語言也應運而生,這些語言大多都有相應的整合開發環境、垃圾回收等機制,且大多是先前語言的衍生語言。這類型的語言也大多是物件導向的程式語言,包含有Object Pascal、Visual Basic,以及C#。Java則是更加保守的語言,也具備垃圾回收機制。與其他類似語言相比,也受到更多的觀注。新的腳本語言則比RAD語言更新更好。這種語言並非直接從其他語言衍生,而且新的語法更加開放地(liberal)與功能契合。雖然腳本語言比RAD語言來的更有生產力,但大多會有因為小程式較為簡單,但是大型程式則難以使用腳本語言撰寫並維護的顧慮[來源請求]。儘管如此,腳本語言還是網路層面的應用上大放異彩。
在這段期間被開發出來的重要語言包括有:
-
1990 - Haskell
-
1991 - Python
-
1991 - Visual Basic
-
1993 - Ruby
-
1993 - Lua
-
1994 - CLOS (part of ANSI Common Lisp)
-
1995 - Java
-
1995 - Delphi (Object Pascal)
-
1995 - JavaScript
-
1995 - PHP
-
1997 - REBOL
-
1999 - D
現今的趨勢
程式語言持續在學術及企業兩個層面中發展進化,目前的一些趨勢包含有:
-
在語言中增加安全性與可靠性驗證機制:額外的堆疊檢查、資訊流(information flow)控制,以及靜態執行緒安全。
-
提供模組化的替代機制:混入(en:mixin)、委派(en:delegates),以及觀點導向。
-
元件導向(component-oriented)軟體開發
-
元編程、反射或是存取抽象語法樹(en:Abstract syntax tree)
-
更重視分散式及移動式的應用。
-
與資料庫的整合,包含XML及關聯式資料庫。
-
支援使用Unicode編寫程式,所以原始碼不會受到ASCII字元集的限制,而可以使用像是非拉丁語系的腳本或延伸標點符號。
-
圖形化使用者介面所使用的XML(XUL、XAML)。
在這段期間被開發出來的重要語言包括有:
-
2001 - C#
-
2001 - Visual Basic .NET
-
2002 - F#
-
2003 - Scala
-
2003 - Factor
-
2006 - Windows PowerShell
-
2007 - Clojure
-
2009 - Go
參考自維基百科