知乐空间

10 种最具影响力的编程语言(十大最热门世界编程语言排行榜)

前几天看了这个“历史上最重要的20种编程语言”,是一个“我刚编出来的可笑的表”。这很荒谬,因为他列出的“最重要”的语言包含Go,但不包含ALGOL、Smalltalk或ML。他也没有提到帕斯卡,因为它“基本上消亡了”。荒谬!这完全违背了“有史以来最重要的事情”的含义。

然后,让我们谈谈那些“几乎灭绝”的语言,以及它们为什么如此重要。

免责声明:是的,并不是所有这些都消失了,也不是所有这些都被遗忘了。像大多数人一样,你听说过Smalltalk,对吗?此外,可能还有上亿个错误,因为当你调查60年的计算机历史时,你总会犯一些错误。如果你发现任何错误,你总是可以大声批评我!

免责声明2:是的,我知道有些是“第一次发明”,有些是“第一次普及”。历史很复杂!

探测影响力

在我们开始之前,简单介绍一下如何找到影响力。仅仅知道X是第一个具有Z特性的语言,并不意味着X实际上影响了Z,虽然Absys可以说是第一个逻辑编程语言,但是几乎所有的逻辑编程实际上都起源于Prolog,是独立开发的。最后,确定X影响Y的方法只有一个:引用。这意味着:

y在其参考手册中引用了X;

Y引用的论文中引用了x;

Y的作者说:“我们受x的影响。”

引用是可传递的。有时候Q语言的手册会列出启发性的文献R,其中R引用论文S作为灵感,并提到S的灵感来源于语言T,那么,我们就知道T影响Q,即使这个链条有几个步骤。这意味着有很多方法可以找到源头。为了加快速度,我们使用启发式方法来决定去哪里寻找。

一种有效的启发式方法是程序设计语言的同音词。一门语言独立提出同样的语法是非常罕见的。因此,如果两种语言有相同的语法,其中一种可能会影响另一种。例如,即使我们没有阅读Matz的设计决策,我们也知道Ruby受到了Smalltalk的影响,因为它们都使用select方法来过滤列表。这不是确凿的证据。可能是由Matz独立开发的,也可能是Ruby和Smalltalk都受到了一个共同祖先的影响。但它给了我们一个开始寻找的方向。

语言COBOL

背景:CODASYL,1960年。COBOL是由计算领域的商业/科学部门组建的。当时,高级工业语言要么用于工程计算,要么用于管理数据。工程师都支持FORTRAN,但商业世界一团糟,充斥着COMTRAN和FLOW-MATIC等语言。因此,国防部成立了一个委员会来制定通用的商业语言。那是COBOL。

COBOL、ALGOL、FORTRAN和LISP构成了四种“母语”。今天,虽然我们认为它是一种小型语言,但它曾经是世界上最流行的语言。我们的许多遗留业务系统仍在其上运行。

意义:在语法和语义方面,我们很少在现代计算中看到COBOL。COBOL最重要的附加功能是提出记录数据的概念。在FORTRAN和ALGOL中,唯一的数据结构是静态数组。但是,在COBOL中,我们可以读取包含分层数据的结构化文件,这将自动将这些文件解构为代表变量。它是现代建筑的先驱。

为什么:有两个因素。一:COBOL不与其他PLT的工作重叠。很少有人会建立在COBOL之上。这意味着基于祖先教训的第二代或第三代语言中几乎没有COBOL基因。这不是COBOL的本质,更多的是因为学术界对COBOL的创作过程不屑一顾。CODASYL是一个商业集团,显然它不值得关注(1)。即使对于今天的语言来说,COBOL也是非常复杂的。这意味着COBOL编译器落后于当代微型计算机和微型计算机上的编译器,为其他语言的繁荣并最终超越它提供了空空间。

ALGOL

背景:ALGOL委员会,1960年。ALGOL-58两年前就出来了,但是很快就被换掉了,所以我把它们组装在一起。委员会希望为算法研究提供一种好的语言。换句话说,ALGOL是一个正式的“伪代码”。

在四种本土语言中,ALGOL是最早“灭绝”的语言。大家都还知道LISP(2),COBOL还在为大量遗留系统提供支持,大部分科学软件包还是有FORTRAN的。但是我遇到过很多程序员,他们甚至没有听说过ALGOL。你可能认为它是最不重要的母语,但事实恰恰相反。在四种母语中,只有LISP可以与ALGOL的普遍重要性相提并论。

意义:我们来看看:词法范围、结构化编程、嵌套函数、形式语言规范、按名称进行语义调用、BNF语法、块标注……今天的每一门现代语言都深受ALGOL的影响。

为什么:ALGOL是研究语言,不是商业语言。它是专门为算法研究而设计的。该规范没有定义任何输入/输出,这使得它在实践中不可用。当然,您可以编写编译器扩展,但是您需要添加更多其他东西。

人们就是这么做的。1960年,70人通过用I/O和额外的数据结构扩展ALGOL,开发了大量类似ALGOL的语言。这包括JOVIAL、Simulink、CLU和CPL,后来的语言都是基于这些类似ALGOL的语言,而不是直接基于ALGOL。我们称C为“Algol样”,但实际上是“BCPL(BCPL样)”,即“CPL(CPL样)”,即ALGOL样。ALGOL的孩子把它埋了。

最终ALGOL人尝试将其扩展到ALGOL-68,ALGOL-68与ALGOL-60彻底分离,但并没有获得那么大的影响力。ALGOL-60的传承一直延续到尼古拉·沃思的帕斯卡。

APL

背景:肯·艾弗森,1962年。它最初是数组数学的手写表示,后来IBM将其用作编程语言。作为一种语言,APL专注于数组处理:它可以精确地处理大型数字块。

如果你以前听说过APL,你可能知道它是“那种奇怪的符号语言”。最臭名昭著的代码片段之一是这个“生活游戏”的实现:

life←{↑1 ⍵∨.∧3 4=+/,1 0 1∘.⊖1 0 1∘.⌽⊂⍵}

必须用专用键盘书写,像这样:

APL键盘(来源)

尽管如此,APL在大型机上非常受欢迎,因为它对内存的要求很低。

意义:数组处理。每次添加两个数字列表意味着需要一个映射或循环。APL引入了同时操作整个阵列的概念。示例:

 1 + 1 2 3 42 3 4 5 1 2 3 4 + 1 2 3 42 4 6 8 2 4 ⍴ ⍳81 2 3 45 6 7 8 1 2 3 4 +[2] 2 4 ⍴ ⍳82 4 6 86 8 10 12

这确实是科学界的一件大事。如此多的应用数学可以归结为大规模矩阵的大规模运算。当你能把外部产品。f、外部产品容易获得!

通过这个创新,APL引出了R、numpy、pandas、Matlab等等。APL的直系后代还包括J、Dyalog、K、q,虽然没有那么成功,但在金融领域的应用还是很广泛的。

死因:显然,问题出在键盘上。如果不能用ASCII写,那就不能写太多。艾弗森用J修正了这个问题,J用有向图代替了不同的符号。写~:而不是≦。然而,那是在1990年,普及一种完全不同的编程风格为时已晚。

更微妙的问题是APL和J只适合处理同构数据。你不能将字符串和数字都存储在同一个数据结构中(除非你使用box,这是一个完整的“worm can”),处理字符串通常是一场噩梦。因此,没有数据框架,这就排除了许多现代数据科学。

扩张:作为意识形态工具的符号。

BASIC

背景:约翰·凯门尼,1964年。起初,它是一种简化的类似FORTRAN的语言,旨在帮助工程技术之外的人使用计算机。

BASIC的真正起飞是在微机时代。起初,微型计算机没有足够的内存来编译“真正的”编程语言,但我们可以将BASIC编译器减少到2 KB左右。BASIC成为早期程序员的通用语言。20世纪70年代,如果你在家编程,那么你可能在微型计算机上写BASIC。

10 PRINT  Hello, World! 20 END

意义:其最大的技术影响在于运行时解释器。BASIC是达特茅斯分时系统的第一语言,比APL领先一年。而且APL系统只针对IBM客户,所以长期以来,实时解释器都是BASIC或者不存在。(3)

BASIC的社会影响力更大。它将编程带给家庭,尤其是孩子。上世纪八九十年代,很多有影响力的程序员第一次学会了用BASIC编程。很多企业程序也是用BASIC编写的,可能会加速Cobol的衰落。

BASIC还有另一个妙招:办公工具!微软最终将BASIC变成了Visual Basic,并将其用作Office的宏语言。后来扩展到OpenOffice和LibreOffice,从而巩固了BASIC在特定小众市场的地位。最近,它被JavaScript取代,现在是一种遗留的宏语言。

为什么:人们认为BASIC是“第二”语言。如果你是一个孩子或小企业主,你可以使用它,但真正的程序员使用真正的语言。一旦制造商能够廉价地制造出内存超过16k的微型计算机,他们就会开始贬低BASIC对于Pascal和c的意义。

BASIC作为一种遗留下来的语言教学方法,在孩子们的生活中已经持续了一段时间,但似乎已经消失在这个小众市场之外。

PL/I

* *背景:IBM,1966年。IBM的业务分为两种语言:科学家使用FORTRAN,商人使用COMTRAN。面对来自COBOL的竞争,为了简化系统,他们试图开发一种对工程和商业都有用的语言。它看起来像是两种语言的超集,顶部添加了许多附加功能。(4)**现在大家都可以用同一种语言了,IBM也能赚大钱了!耶!

意义:ALGOL-68的作者嘲笑PL/I是一种过时的语言。但是ALGOL-68做的每一件事,PL/I都能做得更快更好。虽然COBOL是第一个提出结构化数据的语言,但是PL/I是第一个将其实现为类型的语言。在COBOL中,两个全局变量用于按名称读取用户:用户和名称。在PL/I语言中,可以使用带有用户名字段的变量。PL/I也是第一个使用指针操作直接内存、常量和函数重载的高级语言。(5)

这些概念很多都是通过C进入主流编程的,C是BCPL和PL/I的结合,C甚至使用PL/I的注释语法。

为什么:所有FORTRAN程序员都觉得太像COBOL了,而所有COBOL程序员都觉得太像FORTRAN了。IBM试图用一种语言处理这两种既定语言,但这种语言要复杂得多。他们是唯一使用编译器的团队,但这没有帮助,这意味着其他所有人都不信任供应商锁定。当IBM能够在这两个问题上取得进展时,更广泛的计算世界已经进入了微型计算机时代,PL/I被BASIC淘汰了。

阅读:PL/I的选择。

SIMULA 67

背景:奥莱·达尔和克利斯登·奈加特,1967年。他们扩展了ALGOL来模拟。首先,他们开发了Simulink I,它有专门的模拟器和“活动”语法。Simulink I已经获得了一些早期的应用,但是他们对语言的专门化程度和仿真中大量的重码并不满意。他们希望创建一个更通用的框架来表示通用的东西,而不仅仅是模拟。

他们的想法是允许用户使用多态函数解析来定义称为“类”的新类型。然后,用户可以将仿真特征作为对象系统的特例进行构建,这样用户就可以根据自己的具体需求轻松定制相应的仿真特征。

意义:Simulink虽然不是第一个“真正的”OOP语言,但却是第一个拥有合适对象的语言,为其他语言的构建奠定了基础。包括这个类/对象的拆分、子类、虚拟方法和受保护的属性。它启发了1967年以后几乎所有关于物体的学术研究。CLU和ML都使用Simulink作为他们的主要灵感来源。Bjarne Stroustroup在Simulink中完成了他的博士学位,最终将它的许多想法集成到C ++中。

为什么会消亡:在同一篇博士论文中,Stroustroup声称Simulink太慢,无法大规模使用。如果你不在主机上工作,那么我祝你一切顺利。值得一提的是,Smalltalk-80采用了同样的思路,甚至更进一步,在背后附上了13年的摩尔定律。即使是Smalltalk也经常被嘲笑太慢。每个人都意识到他们的想法,他们可以在Simulink中集成到一种更快、更简单的语言中。

阅读:编译Simulink:技术起源的历史研究,Simulink的历史。

Pascal

背景:尼古拉斯·沃斯,1970年。在ALGOL-68的结构变得过于复杂而不符合Wirth的喜好后,他抓住了ALGOL-60的精髓,开发了Pascal。Pascal最初是作为“CS Introduction”语言开发的,到20世纪80年代初,它已经成为新闻组工作台上第二受欢迎的语言。Wirth认为整个Pascal、Modula和Oberon家族是一个统一的语言概念。

意义:帕斯卡没有引入任何新的想法。这是一种刻意保守的语言。它试图挑选出过去十年中最好的部分,并把它们放在一个统一的包中。帕斯卡将ALGOL语法带出学术界,以至于ALGOL: =的赋值语法被称为“帕斯卡风格”。从这个角度来看,大多数看起来像ALGOL的语言特性很可能是受到了Pascal的启发,而不是直接受到ALGOL本身的启发。

虽然帕斯卡不是很有创意,但它的变体很有创意。Wirth还率先提出了“逐步细化”的概念,作为编写严谨软件的手段。这最终导致了Modula(普及了一流的软件模块)和Euclid(第一个用于生产的正式验证语言)的出现。

死因:这里我称之为“附加攻击”。与该列表中的大多数其他语言不同,Pascal没有主要的结构性障碍或强大的竞争对手。当然是和C竞争,但长期还是表现不错。人们通常将其归因于论文《为什么帕斯卡不是我最喜欢的语言》,但答案过于简洁,历史要复杂得多。此外,德尔福在TIOBE和PYPA指标上依然排名靠前,所以并没有像Simulink那样完全消亡。对帕斯卡下跌的准确分析比本文其余部分要长得多。

阅读:帕斯卡,帕斯卡和他们的继任者。

CLU

背景:芭芭拉·利斯科夫,1975年。利斯科夫想处理抽象数据类型。它刚刚形成。这就是CLU的全部原因。

意义:CLU可能是人们从未听说过的最有影响力的语言。迭代器?CLU .抽象数据类型?CLU .通用?CLU .异常检查?CLU .

我们不使用相同的术语,所以它不是100%来自CLU,但它仍然来自。未来十年,CLU将出现在每一个语言规范中。CLU做了很多。

为什么:CLU是一种展示语言。利斯科夫希望人们接受她的想法,而不是这种特定的语言。他们做到了:如今,几乎所有的语言都应该归于CLU。她一读完CLU,就搬到了阿格斯,这原本是为了展示她对并发性的想法。它没有采用几乎相同的方法,留下了很多有待挖掘的东西。

阅读:CLU的历史

ML

背景:罗宾·米尔纳,1976年6月,米尔纳正在建造LCF校准器,这是最早的校准器助手之一。如果证书是用正确的格式写的,LCF可以检查它是否正确。为了帮助写证明,米尔纳创建了一种基于健全的数学形式的元语言,这在当时意味着严格的静态类型和高阶函数。最终,ML被标准化为标准ML。

意义:ML可以说是最古老的“代数编程语言”。ML有很多属性:代数数据类型、模块、类型化函数式编程。令人惊讶的是,这已经不是第一次了!第一个ML是为了配合LCF的使用而设计的,它不是一种通用语言,所以缺少很多这样的特性。随着人们开始更广泛地使用它,他们从其他研究语言中学到了一些想法,并将其融入到ML中。然而,一个非常重要的概念确实来自ML:类型推断。ML是第一种不需要键入类型的静态类型语言,因为编译器会为你找到对应的类型。这为类型化FP逃离学术界,进入生产应用铺平了道路。

ML也极大地影响了现代定理的验证。伊莎贝尔、CVC3、Coq都是基于ML的。虽然最近几年FP的Haskell分支越来越流行,但是很多类型的理论都是基于ML的。(7)

它为什么会消亡:ML有很多有趣的特性,但人们只关注它是因为它的类型推断。当时ML还是一种专门用于定理检验的语言。SML与哈斯克尔同年问世,这是一个“更纯粹”的类型化FP语言的例子。

Smalltalk

背景:艾伦·凯,1972年,1976年和1980年。有一个不断变化的目标。Smalltalk-72是第一个,Smalltalk-76将“面向对象编程”的概念引入到更广阔的世界,而Smalltalk-80则被广泛采用。

Smalltalk不是第一个使用对象的语言,但却是第一个提出“面向对象”的语言。不同的是,除了数字、布尔值等基本类型外,Simula还有其他对象,在Smalltalk中,布尔值也是对象。如果你想了解更多,可以查看我在这里写的内容。

意义:我们有时认为Smalltalk是“真正的”OOP,而Java、Python这样的语言不是“真正的”OOP,但事实并非如此。像其他范例一样,OOP是许多不同影响的巨大混合体。但Smalltalk无疑是在推广这个概念。如果你在20世纪80年代中期或90年代初打开任何一本关于OOP基础理论的书,它们都是基于Smalltalk的。很多人也把Smalltalk的例子转换成C++,少数人会用另一种语言,但是大家都会用Smalltalk。

Smalltalk还传播了对象可以用作共享数据的概念,这导致了CORBA的出现,并激发了可计算的Actor模型的创建。

为什么:一般认为Smalltalk衰落是因为人们改用C++。但这不是真的。Smalltalk确实存在一些问题,尤其是很难与其他工具进行交互,运行时性能较差。然而,即使在20世纪90年代,Smalltalk仍然在做着令人尊敬的生意,许多人认为它将成为一种主导的商业语言。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 ZLME@xxxxxxxx@hotmail.com 举报,一经查实,立刻删除。

留言与评论(共有 0 条评论)
验证码: