讓我們研究並追溯語言構造的起源。編程構造歷史
例如:
構建從LISP介紹
的if-else塊:「無處不在的if-then-else結構,現在理所當然作爲一個基本要素任何編程語言,都是由McCarthy發明的,用於Lisp,它以更一般的形式(cond結構)看到它的第一次出現,它由Algol繼承,並將其普及。「 - WikiPedia
功能類型:作爲一等公民使用。
垃圾收集
讓我們研究並追溯語言構造的起源。編程構造歷史
例如:
構建從LISP介紹
的if-else塊:「無處不在的if-then-else結構,現在理所當然作爲一個基本要素任何編程語言,都是由McCarthy發明的,用於Lisp,它以更一般的形式(cond結構)看到它的第一次出現,它由Algol繼承,並將其普及。「 - WikiPedia
功能類型:作爲一等公民使用。
垃圾收集
以下是迄今爲止我已經能夠識別的主要編程語言結構的綜合歷史。我無疑錯過了一些東西,但我確定SO社區將幫助確定這些遺漏。
Plankalkül(1943年至1945年) - 由康拉德楚澤開發的,這是第一個高層次,非馮·諾依曼的編程語言,根據Wikipedia和由F.L.的ACM紙"The "Plankalkül" of Konrad Zuse: A Forerunner of Today's Programming Languages"的通信鮑爾和H.沃斯納。語言最初是爲機械Zuse Z1 computer發展,但一個compiler implementation由一隊在柏林自由大學沒有發展到2000年的語言介紹如下:
的Fortran:
IPL(信息處理語言) - 遞歸(以後包括在LISP) - (Newell and Simon)
LISP - 垃圾收集,lambda表達式,和動態類型 - (McCarthy, 1960),(McCarthy, 1978) ,(Wikipedia: Garbage collection)和(Wikipedia: LISP)
ALGOL 58 - 引入代碼塊(但僅限於控制流,而不是變量範圍)(Backus, 1959)
ALGOL 60 - 加入詞法作用域到代碼塊,與詞法作用域嵌套函數定義(Backus et al 1963)
ALGOL 68 - 運算符重載(A. van Wijngaarden et al)
西穆拉 - 對象,類,子類,虛擬方法,協同程序(Dahl et al)
ML - 參數多態性(Cardelli and Wegner)
界區內(信息系統基本語言) - 關係代數(在前面介紹過,這裏比在SQL) - (Hall et al),(Wikipedia: Relational algebra)
方案 - 第一奇怪的是,對於四種最常用的現代編程語言C,C++,Java和C#,我無法確定任何可驗證的,基本上是新的程序。喚醒語言結構。 C++中的模板是ML中引入的多態的adhoc版本。 Java中最接近新語言功能的是包含對線程的支持。大多數情況下,所有四種語言都是在其他地方發明的理想功能和概念的組合。
其他注意事項:儘管Prolog是第一批邏輯編程語言之一,但我無法確定之前在其他語言中未引入的任何重要功能。
儘管有一些維基百科的參考文獻,但大多數上述功能都歸因於下面引用的固體來源。在我深入查找權威參考資料的地方,基於維基百科的細節得到了很好的保持。
我引用Plankalkül的ACM論文證實了它的大部分特徵。 Konrad Zuse是一位有遠見的天才。
參考文獻
F.L.鮑爾和H.沃斯納(1972)。 The 「Plankalkül」 of Konrad Zuse: A Forerunner of Today’s Programming Languages。 ACM的Communications ,15(7):678-685。
RaúlRojas et al。 (2000年)。 "Plankalkül: The First High-Level Programming Language and its Implementation"。 InstitutfürInformatik,FreieUniversitätBerlin,技術報告B-3/2000。
J.W.Backus(1956)。 The Fortran Automatic Coding System for the IBM 704 EDPM。國際商業機器公司。
Allen Newell和Herbert A. Simon(1956)。 The logic theory machine: a complex information processing system。 IRE信息論理論IT-2,no。 3:61-79。
約翰麥卡錫(1960)。 Recursive functions of symbolic expressions and their computation by machine, Part I,ACM Communications,v.3 n.4,p.184-195,April。
約翰麥卡錫(1978)。 History of LISP。 Richard L. Wexelblat編輯,編程語言歷史:ACM SIGPLAN會議論文集,第173-197頁。學術出版社,6月1 - 3日
J.W. Backus(1959)。 "The Syntax and Semantics of the Proposed International Algebraic Language of Zürich ACM-GAMM Conference"。國際信息處理會議論文集。聯合國教科文組織。第125-132頁。
J.W. Backus,F.L.Bauer,J.Green,C.Katz,J.McCarthy,P.Naur,A.J。 Perlis,H。Rutishauser,K. Samelson,B.Vauquois,J. H. Wegstein,A. van Wijngaarden,M. Woodger;由Peter Naur編輯(1963)。 Revised Report on the Algorithmic Language ALGOL 60。 ACM的通信,第6卷,第1期(1月),第1-17頁。 (編者),Mailloux,B.J.,Peck,J.E.L.,Koster,C.H.A。(1969)中找到。 "Report on the algorithmic language ALGOL 68",第10.2.2節。 NUMER。數學。 14,79--218。
Ole-Johan Dahl,BjørmMyhrhaug和Kristen Nygaard(1970)。 SIMULA, Common Base Language。 (第二版)挪威電腦中心奧斯陸。
Luca Cardelli和Peter Wegner(1985)。 On Understanding Types, Data Abstraction, and Polymorphism。計算調查,第17卷n。 4,pp 471-522,December。
Patrick A.V.霍爾,彼得希區柯克,斯蒂芬託德(1975)。 "An algebra of relations for machine computation"。第二屆ACM加州Palo Alto編程語言原理專題研討會會議記錄:ACM,pp。225-232,January。
Gerald Jay Sussman和Guy L. Steele,Jr(1975)。 Scheme: An Interpreter for the Extended Lambda Calculus。 AI備忘錄349,十二月。
Gerald Jay Sussman和Guy L. Steele,Jr(1998)。 "Scheme: A Interpreter for Extended Lambda Calculus"。高階和符號計算11(4):399-404,12月,Kluwer學術出版社,波士頓。
我更新了Plankalkul的一些參考資料;可能會盡快爲其他語言尋找更多的資源。 – 2010-06-09 08:20:21
這太好了。謝謝。 – unj2 2010-06-09 14:35:09
我已經爲其遞歸的使用添加了IPL,並且已經用權威性參考備份了更多的細節。 – 2010-06-10 13:03:19
switch語句 - 1965 - ALGOL W
據:http://ojs.pythonpapers.org/index.php/tpp/article/viewFile/49/45
ALGOL,所有的程序語言之父,沒有一個案例陳述作爲案例的概念尚未在高級語言中發明。然後在1965年發佈了一種很少使用的語言ALGOL W,其中包含由C. A. R. Hoare發明的switch ... case語句,該語句允許無序的非重疊值和範圍。
C和Pascal都從這個父語言派生,並且都有一種情況:C熟悉的開關(變量)情況...和Pascal使用情況變量begin value1:.... C++,PHP ,C#和Java語法都來自C版本。
應該是社區wiki ... – ChristopheD 2010-04-25 22:31:50
函數和GC在Lisp中也是afaik以及...但是我想函數來自lambda微積分... – 2010-04-25 22:34:29
有趣的 - 我真的沒有意識到LISP是多少年 - 1958年或者所以。 – 2010-04-25 22:39:49