Programming Constructs History
让我们研究和追溯语言结构的起源。
例如:
构造从LISP引入
-
If-Else Block:"无处不在的if-then-else结构,现在被认为是任何编程语言的基本元素,被McCarthy发明用于Lisp,在那里它以更一般的形式出现了它( 它是由Algol继承的,它推广了它。" - WikiPedia
-
功能类型:作为一等公民的功能。
-
垃圾收集
这是迄今为止我能够识别的主要编程语言结构的综合历史。我无疑错过了一些东西,但我确信SO社区将帮助识别这些遗漏。
Plankalkül(1943-45) - 由Konrad Zuse开发,这是第一个高级非冯诺依曼编程语言,根据维基百科和ACM通讯"Konrad Zuse的"Plankalkül":今日编程的先驱语言"由FL鲍尔和H.沃斯纳。该语言最初是为机械Zuse Z1计算机开发的,但柏林自由大学的团队编译器实现直到2000年才开发。该语言介绍了以下内容:
Fortran语言:
IPL(信息处理语言) - 递归(后来包含在LISP中) - (Newell和Simon)
LISP - 垃圾收集,lambda表达式和动态类型 - (McCarthy,1960),(McCarthy,1978),(维基百科:垃圾收集),和(维基百科:LISP)
ALGOL 58 - 引入了代码块(但仅用于控制流,而不是可变范围)(Backus,1959)
ALGOL 60 - 将词法范围添加到代码块,具有词法范围的嵌套函数定义(Backus等1963)
ALGOL 68 - 运算符重载(A. van Wijngaarden等)
Simula - 对象,类,子类,虚方法,协同程序(Dahl等)
ML - 参数多态性(Cardelli和Wegner)
ISBL(信息系统基础语言) - 关系代数(此前在此引入而不是在SQL中引入) - (Hall等人),(维基百科:关系代数)
Scheme - 第一个完全支持的闭包(Sussman和Steele,1975),(Sussman和Steele,1998)
奇怪的是,对于四种最常用的现代编程语言,C,C ++,Java和C#,我无法识别任何可验证的,基本上新的编程语言结构。 C ++中的模板是ML中引入的多态的特殊版本。 Java中与新语言功能最接近的是包含对线程的支持。大多数情况下,所有四种语言都是其他地方发明的理想特征和概念的组合。
其他说明:虽然Prolog是最早的逻辑编程语言之一,但我无法识别以前在其他语言中未引入的任何重要功能。
虽然有一些维基百科的参考文献,但上面列出的大部分功能都归功于下面引用的固体资源。在我深入研究权威参考资料的地方,基于维基百科的细节表现得非常好。
我为Plankalkül引用的ACM论文证实了它的大部分功能。 Konrad Zuse是一位有远见的天才。
参考
F.L.鲍尔和H. W?ssner(1972)。 Konrad Zuse的"Plankalkül":A
今日编程语言的先驱。通讯
ACM,15(7):678-685。
劳尔罗哈斯等人。 (2000年)。"Plankalkül:第一个高级编程语言及其实现"。 InstitutfürInformatik,Freie Universit?t Berlin,Technical Report B-3/2000。
J. W. Backus(1956)。用于IBM 704 EDPM的Fortran自动编码系统。国际商业机器公司。
Allen Newell和Herbert A. Simon(1956)。逻辑理论机器:一个复杂的信息处理系统。 IRE信息理论IT-2,没有。 3:61-79。
约翰麦卡锡(1960年)。符号表达式的递归函数及其机器计算,第一部分,ACM通信,第3节第4节,第184-195页,4月。
约翰麦卡锡(1978)。 LISP的历史。在Richard L. Wexelblat编辑,编程语言史:ACM SIGPLAN会议论文集,第173-197页。学术出版社,6月1-3日。
J.W.巴克斯(1959年)。"苏黎世ACM-GAMM会议拟议国际代数语言的句法和语义"。国际信息处理会议记录。联合国教科文组织。第125-132页。
J.W. Backus,F。L. Bauer,J。Green,C。Katz,J。McCarthy,P。Naur,A。 Perlis,H。Rutishauser,K。Samelson,B。Vauquois,J。H. Wegstein,A。van Wijngaarden,M。Woodger;由Peter Naur编辑(1963)。关于算法语言的修订报告ALGOL 60. ACM通讯,第6卷,第1期(1月),第1-17页。
A. van Wijngaarden,A。(编辑),Mailloux,B。J.,Peck,J。E. L.,Koster,C。H. A.(1969)。"关于算法语言ALGOL 68的报告",第10.2.2节。 NUMER。数学。 14,79--218。
Ole-Johan Dahl,Bj?rm Myhrhaug和Kristen Nygaard(1970)。 SIMULA,共同基础语言。 (第2版)奥斯陆,挪威计算中心。
Luca Cardelli和Peter Wegner(1985)。关于理解类型,数据抽象和多态性。计算调查,第17卷。 4月,第471-522页,12月。
帕特里克A.V. Hall,Peter Hitchcock,Stephen Todd(1975)。"机器计算关系的代数"。第二届ACM编程语言原理研讨会会议记录,加利福尼亚州帕洛阿尔托:ACM,第225-232页,1月。
Gerald Jay Sussman和Guy L. Steele,Jr(1975)。 Scheme:扩展Lambda演算的解释器。 AI Memo 349,12月。
Gerald Jay Sussman和Guy L. Steele,Jr(1998)。"方案:
扩展Lambda微积分的解释器"。高阶和符号计算11(4):399-404,12月,Kluwer学术出版社,波士顿。
好。
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熟悉的switch(变量)case ...和Pascal使用case变量begin value1:.... C ++,PHP,C#和Java语法 源自C版本。