unj*_*nj2 15 language-agnostic history language-features programming-languages
让我们研究和追溯语言结构的起源.
例如:
构造从LISP引入
If-Else Block:"无处不在的if-then-else结构,现在被认为是任何编程语言的基本元素,被McCarthy发明用于Lisp,在那里它以更一般的形式出现了它( cond结构).它是由Algol继承的,它推广了它." - WikiPedia
功能类型:作为一等公民的功能.
垃圾收集
Joe*_*off 21
这是迄今为止我能够识别的主要编程语言结构的综合历史.我无疑错过了一些东西,但我确信SO社区将帮助识别这些遗漏.
Plankalkül(1943-45) - 由Konrad Zuse开发,这是第一个高级非冯诺依曼编程语言,根据维基百科和ACM通讯"Konrad Zuse的"Plankalkül":今日编程的先驱语言"由FL Bauer和H. Wossner撰写.该语言最初是为机械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是一位有远见的天才.
参考
FL Bauer和H.Wössner(1972).Konrad Zuse的"Plankalkül":今日编程语言的先驱.ACM的通讯,15(7):678-685.
劳尔罗哈斯等人.(2000年)."Plankalkül:第一个高级编程语言及其实现".InstitutfürInformatik,柏林自由大学,技术报告B-3/2000.
JW巴克斯(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日.
JW巴克斯(1959年)."苏黎世ACM-GAMM会议拟议国际代数语言的句法和语义".国际信息处理会议记录.联合国教科文组织.第125-132页.
JW Backus,FL Bauer,J.Green,C.Katz,J.McCarthy,P.Naur,A.Perlis,H.Rutishauser,K.Samelson,B.Vauquois,JH Wegstein,A.van Wijngaarden,M.Woodger; 由Peter Naur编辑(1963).关于算法语言ALGOL 60的修订报告.ACM通讯,第6卷,第1期(1月),第1-17页.
A. van Wijngaarden,A.(编辑),Mailloux,BJ,Peck,JEL,Koster,CHA(1969)."关于算法语言ALGOL 68的报告",第10.2.2节.NUMER.数学.14,79--218.
Ole-Johan Dahl,BjørmMyhrhaug和Kristen Nygaard(1970).SIMULA,共同基础语言.(第2版)奥斯陆,挪威计算中心.
Luca Cardelli和Peter Wegner(1985).关于理解类型,数据抽象和多态性.计算调查,第17卷.4月,第471-522页,12月.
Patrick AV 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学术出版社,波士顿.