History of programphp
1.三個現代編程語言:程序員
(1)Fortran (1955),名稱取自"FORmula TRANslator"(公式翻譯器),由約翰·巴科斯等人所發明;算法
(2)LISP,名稱取自"LISt Processor"(枚舉處理器),由約翰·麥卡錫等人所發明;數據庫
(3)COBOL,名稱取自"COmmon Business Oriented Language"(通用商業導向語言),由被葛麗絲·霍普深入影響的Short Range Committee所發明。編程
2.創新:小程序
1950年代晚期,由美國與歐洲計算器學者針對"算法的新語言"所組成的委員會出版的ALGOL 60報告(名稱取自"ALGOrithmic Language"(算法語言))。這份報告強化了當時許多關於計算的想法,並提出了兩個語言上的創新功能:安全
(1)嵌套區塊結構:能夠將有意義的代碼片斷組羣成一個區塊(block),而非轉成分散且特定命名的程序。編程語言
(2)詞彙範圍(lexical scoping):區塊能夠有區塊外部沒法透過名稱訪問,屬於區塊自己的變量、程序以及函數。分佈式
另外一個創新則是關於語言的描述方式:模塊化
一種名爲巴科斯-諾爾範式 (BNF)的數學化精確符號被用於描述語言的語法。以後的編程語言幾乎所有都採用相似BNF的方式來描述程序語法中上下文無關的部分。
Algol 60對以後語言的設計上帶來了特殊的影響,部分的語言很快的就被普遍採用。後續爲了開發Algol的擴展子集合,設計了一個名爲Burroughs(en:Burroughs large systems)的大型系統。
延續Algol的關鍵構想所產生的成果就是ALGOL 68:
(1)語法跟語義變的更加正交(orthogonal),採用匿名的歷程(routines),採用高端(higher-order)功能的遞歸式輸入(typing)系統等等。
(2)整個語言及語義的部分都透過爲了描述語言而特別設計的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的先驅)
1960年代晚期至1970年代晚期的期間中,編程語言的發展也有了重大的成果。大多數如今所使用的主要語言範式都是在這段期間中發明的:
(1)Simula,於1960年代晚期由奈加特與Dahl以Algol 60超集合的方式發展,同時也是第一個設計支持面向對象進行開發的編程語言。
(2)C,於1969至1973年間由貝爾實驗室的研究人員丹尼斯·裏奇與肯·湯普遜所開發,是一種早期的系統程序設計(en:system programming)語言。
(3)Smalltalk,於1970年代中期所開發,是一個徹底從零開始(ground-up)設計的面向對象編程語言。
(4)Prolog,於1972年由Colmerauer、Roussel,以及Kowalski所設計,是第一個邏輯程序語言。
(5)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年代的編程語言與以前相較顯得更爲強大。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年代未見到有什麼重大的創新,大多都是之前構想的重組或變化。這段期間主要在推進的哲學是提高程序員的生產力。許多"快速應用程序開發" (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
編程語言持續在學術及企業兩個層面中發展進化,目前的一些趨勢包含有:
(1)在語言中增長安全性與可靠性驗證機制:額外的堆棧檢查、信息流(information flow)控制,以及靜態線程安全。
(2)提供模塊化的替代機制:混入(en:mixin)、委派(en:delegates),以及觀點導向。
(3)組件導向(component-oriented)軟件開發
(4)元編程、反射或是訪問抽象語法樹(en:Abstract syntax tree)
(5)更重視分佈式及移動式的應用。
(7)支持使用Unicode編寫程序,因此源代碼不會受到ASCII字符集的限制,而可使用像是非拉丁語系的腳本或延伸標點符號。
在這段期間被開發出來的重要語言包括有:
2001 - C#,2001 - Visual Basic .NET,2002 - F#,2003 - Scala
2003 - Factor,2006 - Windows PowerShell,2007 - Clojure
2009 - Go,2014 - Swift (編程語言)
個人預測是,將來的編程語言會不斷地增多,爲的是不斷提升程序運行的速度,代碼的質量等等,能有效的改善如今的編程問題的編程語言一定會在將來被大多數人使用。