为什么会有那么多编程语言?


130

我精通C / C ++,并且可以绕过各种脚本语言(awk / sed / perl)。我开始更多地使用python,因为它结合了C ++的一些漂亮方面和awk / sed / perl的脚本功能。

但是为什么会有这么多不同的编程语言呢?我猜所有这些语言都可以做同样的事情,那么为什么不只坚持一种语言并将其用于计算机编程呢?特别是,作为我的计算机程序员,我是否应该知道某种功能语言?

相关阅读:


2
OO和非OO之间也有区别。另外,某些语言附带了不错的软件包:R,Maple,Matlab,Mathematica,其他语言通常缺少这些软件包。
Artem Kaznatcheev 2012年



2
为了实现并行算法,函数式编程会更好,通常,当您具有可变对象时,最好使用OO范式;否则(如果您要处理不可变的对象),最好将其更改为函数模型。这种情况广泛存在于并行处理中。同样,一些出色的OO模式(如流畅的界面和方法链接)也可以像功能范式一样工作。

4
为什么有那么多汽车?为什么有那么多飞机?那BOATS呢!我的意思是,真的!你下到海洋,那里有各种各样的东西!什么是所有这些型动物种类的东西?!?!?效率低下!太浪费了!!所有这些不同选择的最关键点是什么?!?!?哎呀-明智的人!除了Yugo,F-150和远洋客轮,其他任何人都可能不需要!哦,是的,飞机-MD-80几乎可以正常使用。那里。现在,多数民众赞成一切都解决了...... :-)
鲍勃·贾维斯

Answers:


116

编程语言不断发展,并且随着时间的推移而不断改进(创新)。

人们从不同的语言中汲取灵感,并将其组合成新的语言。改进了某些功能(继承机制,类型系统),增加了某些功能(垃圾回收,异常处理),删除了某些功能(goto语句,低级指针操作)。

程序员开始以某种不受任何语言构造支持的特定方式使用一种语言。语言设计师可以识别此类使用模式,并引入新的抽象/语言结构来支持此类使用模式。没有汇编语言的程序。C中没有类。(早期)C ++中没有异常处理。没有安全的方式来加载早期语言的新模块(在Java中简单)。没有内置线程(Java中的easy-peasy)。

研究人员考虑了表达计算的替代方法。这导致了Lisp和语言树的功能语言分支,Prolog和逻辑编程分支,Erlang和其他基于actor的编程模型等。

随着时间的流逝,语言设计师/研究人员开始更好地了解所有这些结构以及它们如何交互,并设计语言以包含许多流行的结构,所有这些结构都旨在无缝地协同工作。这样就产生了出色的语言,例如Scala,它具有对象和类(使用特征而不是单个或多个继承表示),功能编程功能,与类系统和模式匹配很好地集成的代数数据类型,以及基于参与者的并发。

相信静态类型系统的研究人员致力于提高其表达能力,允许使用Java中的类型化泛型类(以及Haskell中所有奇妙的东西)之类的东西,以便程序员在运行程序之前获得更多保证出错。静态类型系统通常会给程序员带来很大的负担(键入类型),因此已经开始研究减轻这种负担。诸如Haskell和ML之类的语言允许程序员省略所有类型注释(除非它们做一些棘手的事情)。Scala允许程序员省略方法体内的类型,以简化程序员的工作。编译器会推断所有缺少的类型,并将可能的错误通知程序员。

最后,某些语言旨在支持特定领域。示例包括SQL,R,Makefile,Graphviz输入语言,Mathmatica,LaTeX。将这些语言的功能(直接)集成到通用语言中将非常麻烦。这些语言基于特定于其特定领域的抽象。

如果没有编程语言设计的发展,我们所有人仍将使用汇编语言或C ++。

至于了解功能性编程语言:与使用其他编程语言相比,功能性语言允许您以不同的方式表示计算,通常更简洁。考虑一下C ++和Python之间的差异,然后将其乘以4。更严重的是,正如在另一个答案中已经提到的,函数式编程为您提供了一种不同的问题思考方式。这适用于所有其他范例;有些更适合某些问题,有些则不适合。这就是为什么多范式语言变得越来越流行的原因:如果需要,您可以使用来自不同范式的构造,而无需更改语言,而且更具挑战性的是,您可以在一个软件中混合使用范式。


1
完全同意。我对未来几年多范式语言(例如Scala)的应用感兴趣。如果它们允许轻松进行DSL集成,我们实际上可能会看到语言数量的逐渐减少。
拉斐尔

2
很详细的答案!我们可以承认,大多数编程语言都可能是图灵等效语言,但这并不意味着它们支持的抽象适用于每个问题领域。
Cyber​​Fonic 2012年

将程序集和C ++放在同一个盒子中会伤害我的心。C ++已经发展了很多!!特别是从C ++ 11开始。
Peregring-lk

66

tldr:没有灵丹妙药。

我希望他们不会起诉我,但这是斯坦福大学演讲中的一张照片。

在此处输入图片说明

当您决定选择一种语言时,只能选择这3种功能中的2种

这就是为什么人们感到难过并想要发明一种覆盖所有三个语言的超级语言的原因。

实际上,有大量需求(您可以在其他答案中看到其中的一些需求),但是它们只是向核心功能添加了详细信息。此外,出于历史和政治原因,人们更喜欢一种语言。

这些因素的结合产生了一种新的语言。

而且我听说每个优秀的程序员都应该编写自己的新语言;)


11
随着时间的流逝,三角形逐渐缩小,从某种意义上说,角落之间的距离越来越近.....我希望/梦想。
戴夫·克拉克2012年

1
性能和通用性几乎可以比较,但是我会补充说,与某种特定语言本身相比,使用某种语言的经验可以为您提供更高的生产率,单独比较“语言的生产率”是不公平的,因为您需要知识和专业知识的假设所有这些,一个非常不可能的假设。
Hernan_eche 2012年

这是一个有趣的陈述,有点使我想起CAP定理。这仅仅是非正式的论证,还是可以证明三角形?
evnu 2012年

1
@evnu,这是一部分的准形式的论证:假设通用性意味着语言L中任何长度n的有效程序都覆盖了较大的问题空间,问题的每个子空间仅被长度为n的程序的一部分所覆盖。如果在特定子空间之外的长度为n的程序在子空间内,则您更有可能找到一个较短的程序来解决问题(因此可能会提高工作效率),但该语言的通用性会降低, -解决其他子空间中的问题的能力较弱(例如,程序较长)。
JonasKölker'13

这是一个很好的论据,您需要至少两种编程语言以及大量特定于领域的语言,从而涵盖了三角形的所有三个侧面。我们还有很多很多。(我将c放在三角形的顶部顶点,但这是一个很小的小问题。)
Peter Shor

25

这个世界充满了许多不同的事物:文字处理器,汽车,家居设计,饮料,糖果,笔,铁锹等。我们之所以拥有如此之多,可以归结为以下几个原则:

  • 有人认为他们可以改进现有产品
  • 当地的考虑需要采用不同的设计(想想:高跷的房屋与混凝土楼板的房屋)
  • 一种新的产品类别满足了以前不存在的需求

走进任何办公用品商店,然后看看“书写工具”部分-数百种笔。它们都做大致相同的事情:将墨水输送到书写表面。但是您看到的每支出售的笔都在那儿,因为上面的三个原因之一。

  • 笔式钢笔是对浸入式钢笔的改进,而笔式钢笔本身也是对羽毛笔的改进。
  • NASA需要一支可以在没有重力的情况下书写的笔,因此发明了加压的滚珠笔。
  • 第一支笔本身很可能是蘸有焦油或鲜血的尖头笔。在此之前,人们是用石头将岩石刮在一起或在墙壁上涂抹颜料。(只是一个猜测。)

笔的发展将继续,因为没有一种产品能够满足每个用户的需求。有些钢笔便宜又可弃,有些钢笔很贵,是用高质量的材料制成的。有些使用凝胶,有些使用墨水,有些使用颜料。有些带有可旋盖,有些根本没有盖;宽桶,窄桶,圆形桶,方桶;短长; 红色,白色,黑色,蓝色。等等

但是关于笔就足够了。

我们当前无数的编程语言可以追溯到最早的语言:1940年代早期计算机的数字机器代码。原始,难于使用且费力地进入计算机,但是他们做到了。不久之后,程序员将助记词(例如ADD,CALL,LOAD)分配给了机器代码,从而诞生了称为“汇编语言”的语言类别。

根据底层计算机的特定功能,不同的处理器体系结构需要不同的助记码。考虑到这些差异意味着发明了不同的汇编语言。

(也许现在您可以看到它的运行方向...)

程序员查看了他们的汇编语言程序并看到了模式:相同的指令序列将用于形成循环,条件,变量分配,函数调用等。因此,过程编程语言诞生了。这些语言使用“ if”,“ while”,“ let”等总括术语封装了指令组。

功能语言是对计算机编程的数学分析,它是一种全新的计算方式。没有更好,没有更糟,只是有所不同。

然后是面向对象,静态类型,动态类型,后期绑定,早期绑定,内存使用率低,内存使用率高,可并行化,特定用途的语言等等。

最终,我们拥有不同的编程语言,因为我们想要不同的编程语言。每个语言设计师对于他们的“梦想”语言的外观和操作方式都有自己的想法。多样性是一个很好的事情。


除了人们出于任何原因想要使用多种语言之外,我在这里看不到任何令人信服的理由。
拉斐尔

就是这样。程序员天生就是解决问题的人。为了解决问题,他们需要通常采用编程语言形式的工具。如果这些工具不能帮助他们解决他们想要的问题,他们就会发明新的工具。可以这样考虑:由于工具是软件,而编写新软件来解决新问题,因此工具本身可能就是要解决的问题。这些问题可以通过制作新工具来解决。
巴里·布朗

仅此而已:语言的功能分支是数学家如何表达我们今天称为“计算”的思想的产物,这种思想被认为比第一台计算机早了50年。LISP(以某种形式)是仍然存在的第二古老的语言,这不是毫无道理的,第一语言是FORTRAN。
vonbrand

20

函数式编程语言通常基于不同的(但等效的)计算模型:lambda-calculus。有一些非类型化(具有类似Python的类型化)语言,例如LISP,Scheme(用于广泛认可的计算机程序书/课程的结构和解释)和静态类型化的语言,例如Haskell,ML,F#。

SICP使我进入函数式编程领域,但是其他人推荐John Hughes 撰写的这篇论文以及他的访谈

例如,Microsoft正在推动函数式编程,例如在VS2010和11中包含F#(它们的.NET函数语言)。他们还在MSR,IIRC中雇用了一些Haskell开发人员。

请注意,还有一些非lambda演算功能的编程语言,例如Refal,它基于模式匹配和重写。

由于功能语言中的抽象级别不同,因此当您使用功能编程技术时,您解决问题的态度就会改变。有人说,它可以使您总体上成为一个更好的程序员。


1
另一类有趣的语言是逻辑编程语言,例如Prolog。我在DataLog上的经验非常有限,所以也许其他人可以写出有关这些的答案?
丹尼尔(Daniil)2012年

2
我同意我们需要每种编程范例都需要一种编程语言:命令式,OO,声明式,函数式等。但这并不能解释为什么我们有如此多的OO语言。
2012年

@戴,好吧,我们真的吗?理论基础不是语言的唯一特征。例如,可以说Java或C#的一项关键功能是(与C ++相比)虚拟机,这使Java有了很大的不同。
丹尼尔(Daniil)2012年

但是,如果C#和Java都使用虚拟机概念,为什么我们不对两种语言使用相同的语法?我认为每个设计师都有他/她强烈的想法,他/她的语言应该是什么样子,并倾向于创建自己的标准。
2012年

@Dai,毕竟C#和Java之间有很多细微的差别。另外,我认为Windows Java VM或类似的东西存在法律争议。
丹尼尔(Daniil)2012年

19

特别是,作为我的计算机程序员,我是否应该知道某种功能语言?

是。因为haskell改变了我的思维方式。它也可能会改变您的思考方式。

故事:我曾经认为我一天可以学习任何编程语言。有一天,我开始了Haskell。我花了半天完成了单子之前的所有工作。从那天起已经一年了,我仍然无可奈何地呆在Monads。

读:

  1. 语言和思想维基

  2. 图灵奖演讲者Kenneth E. Iversion将符号表示为思想工具

但是为什么会有这么多不同的编程语言呢?

符号是思考的工具。我们需要不同的量身定制的符号来舒适地处理不同的想法。因此,我们创建了新的语言。

另外,请阅读。;-)


5
递归是神圣的!
Pratik Deoghare 2012年

4
迭代是人吗?
Suresh 2012年

1
不确定是否对Haskell来说是个好广告。;)
巴里·布朗

@Pratik Deoghare。一天学习Haskell可能不是一个好主意。我想说,读一本关于函数式编程的好书,例如Bird和Wadler,然后花点时间做。然后单子可能并不那么困难。
Uday Reddy 2012年

“半天后,我完成了单子之前的所有工作。” 真?您在半天内学会了类型类,函子,ADT,种类等?这不可能。LYAH在第12章的单子出来的14 RWH没有单子,直到第6章,以及它们被引入非常缓慢-完整的定义是在第14章
sdcvvc

13

几乎没有一个程序员在某个时候没有因为他们使用的语言的限制而感到沮丧并决定挠痒痒的。因此,诞生了一种新的语言-或一种现有的方言。

Abadi和Cardelli在“对象理论”中从面向对象的基础开发了整个编程语言家族。他们证明函数式编程是OO的特例,而不是相反。

发明新事物很有趣,这就是为什么人们更愿意创造另一种语言而不是为使现有语言变得更好做出贡献。当然,有些语言的保管人不欢迎他们改变看法。最好的例子是Common Lisp和Scheme支持者之间的鸿沟。


3
对象理论并没有提供一整套可用的编程语言。它为面向对象的程序设计语言提供了基础,但它不是基于类的,因此很奇怪。我看不到“对象理论”与功能编程之间的联系。例如,对象计算没有懒惰的概念。也有研究根据功能和记录来编码OO概念,例如Pierce在90年代后期的工作。
Dave Clarke 2012年


11

为什么世界上有那么多国家?如果我们只有5或6个超级大国,甚至只有一个世界大国,这会变得容易吗?很容易争论为什么它不会更好-从一开始,不同国家的竞争可能会导致进步,而从民主,人权等角度来看,许多国家可能比一个国家更好- -但这不能解释为什么我们有许多国家。它仅说明了为什么许多国家会变得更好

同样,您可以问,为什么有那么多不同的人类语言?波兰语,阿拉伯语,普通话...如果只有一种语言,会不会更容易?您可以争论任何一种方式,但是那将是为什么如果生活是一种方式或另一种方式会更好的原因。它无法解释人类语言如此之多的原因

问题是,地球上有很多人,我们都在做我们的事情,我们都有自己的见解,我们都想负责并拥有自己的国家或编程语言,而且我们常常认为我们更了解比其他人,或至少不理会其他人所提供的东西。

阅读这篇很有启发性的博客文章,“ 为什么有那么多Python Web框架?显然,Python 中大约有50个 Web框架。这真是荒谬。没有绝对的理性理由。但是该帖子的作者回答:有太多的Python Web框架,因为创建它是如此容易。您不需要合理的理由就可以拥有更多的python Web框架或更多的编程语言。人们会继续创造新事物,因为他们不知道已有的东西,或者因为他们希望自己能赚钱,或者仅仅是因为创造新事物很有趣!

让我描述一个个人的例子。大约10年前,我正在为一家芬兰公司编写一些C ++代码。您知道,在芬兰,他们有那么大的卡车,它们可以长途旅行,并且可以将很多东西从一个地方运送到另一个地方。我敢肯定,美国也有这样的卡车。因此,典型的问题是要确保所有24个左右的轮胎都完好无损。当然,有经过时间考验的技术:可以监视压力和温度,而剧烈的变化将表明出现了问题。当然,所有这些技术都是专有的,具有专利的,并且具有所有含义。(请记住:专利应该促进创新!)因此,这家芬兰公司希望通过...声音来检测轮胎的状态。我的想法是安装麦克风来监听所有轮胎发出的声音,并对这些声音进行某种信号处理魔术,以查看其中一个轮胎是否存在某种问题,我正在制作一个原型。这种疯狂。(他们甚至有专门的实验室来记录样本声音;一旦给我发送了一段特殊情况的令人印象深刻的视频记录,当他们在承受5或10吨压力并将其加热到一个荒谬的温度后设法将样本轮胎爆炸时, 。)显然,再次证明,这一发展没有特殊的理性原因,只是它很有趣并且有些人想赚钱。因此也要理解,为什么有人会开始开发一种新的编程语言,有很多原因。没有必要甚至没有机会学习所有这些。(他们甚至有专门的实验室来记录样本声音;一旦给我发送了一段特殊情况的令人印象深刻的视频记录,当他们在承受5或10吨压力并将其加热到一个荒谬的温度后设法将样本轮胎爆炸时, 。)显然,再次证明,这一发展没有特殊的理性原因,只是它很有趣并且有些人想赚钱。因此也要理解,为什么有人会开始开发一种新的编程语言,有很多原因。没有必要甚至没有机会学习所有这些。(他们甚至有专门的实验室来记录样本声音;一旦给我发送了一段特殊情况的令人印象深刻的视频记录,当他们在承受5或10吨压力并将其加热到一个荒谬的温度后设法将样本轮胎爆炸时, 。)显然,再次证明,这一发展没有特殊的理性原因,只是它很有趣并且有些人想赚钱。因此也要理解,为什么有人会开始开发一种新的编程语言,有很多原因。没有必要甚至没有机会学习所有这些。一次,当他们给我发送了一段令人印象深刻的录像带时,他们在承受5或10吨压力并将其加热到一个可笑的温度后设法将一个示例轮胎炸裂了。)显然,又没有一个特别合理的理由。进行这项开发的原因,除了娱乐性和某些人想赚钱。因此也要理解,为什么有人会开始开发一种新的编程语言,有很多原因。没有必要甚至没有机会学习所有这些。一次,当他们给我发送了一段令人印象深刻的录像带时,他们在承受5或10吨压力并将其加热到一个可笑的温度后设法将一个示例轮胎炸裂了。)显然,又没有一个特别合理的理由。进行这项开发的原因,除了娱乐性和某些人想赚钱。因此也要理解,为什么有人会开始开发一种新的编程语言,有很多原因。没有必要甚至没有机会学习所有这些。

当然,所有这些仅在您相信进化的情况下适用。如果您相信某种形式的智能设计,并且上帝也创造了所有编程语言,那么您将不得不在众多背后找到目的。也许上帝想促进不同编程语言之间的竞争,以使软件开发的艺术达到最高境界。

总之,有很多人,很多国家,很多编程语言。这只是生活的本质!让我们对此表示感谢:这仅意味着编程/计算机科学领域非常活跃并且蓬勃发展。


非常完美的答案,我不知道为什么不接受!
Am_I_Helpful

8

为什么会有这么多不同的编程语言?

因为可以选择:

  • 规范模式:命令式与功能式
  • 键入:静态类型与动态类型
  • 评估顺序:按值致电与按名称致电
  • 模块化:基于类与基于抽象数据类型
  • 执行模型:顺序与并发

幸运的是,最后两个是无关紧要的二分法,也就是说,可以将这两种选择都放在一种编程语言中。但是,前三个二分法产生了8个组合。因此,即使在理想的世界中,也将至少有8种编程语言。当您进行深入研究时,在特定范例中会有更多细微的设计选择。例如,如果决定使用基于类的静态类型语言,则可以使用不同的方法来设计类型系统。尚无规范的方法可以做到这一点。如果决定使用一种并发编程语言,则有多种表示并发的方法:信号量,条件关键区域,监视器,消息传递(同步与异步)。在同步消息传递中,

我们在编程语言理论中所做的部分研究致力于解决这些二分法。例如,我在一篇名为“ 应用语言的赋值 ”的论文中解决了命令式和功能性编程之间的二分法,Haskell现在采用了我们的方法,使它既是功能性语言,也是命令式语言。这并不意味着二分法已完全解决。Haskell程序员仍然面临选择从功能上还是命令上解决他的问题的选择。Luca Cardelli致力于解决静态与动态类型二分法。保罗·利维(Paul Levy)致力于解决“按值致电”与“按名称致电”二分法。并非所有这些结果都已在现实的编程语言中实现。


如果所有这些语言都可以做同样的事情,为什么不只坚持一种语言并将其用于计算机编程呢?

因为对于现实世界中的程序员来说,仅仅做某事是不够的。如何完成也很重要。正确完成后,问题域将在程序中如实地表示,保留问题的模块化,并且程序变得易于理解,修改和维护。所有这些都会影响程序开发和维护的成本。它们还会影响软件的可靠性和安全性。

例如,许多人使用名为“ Quicken ” 的程序来处理财务帐户。原始程序是使用某些内部版本的Visual Basic开发的,并且相当不错。但是,很难对其进行扩展和维护。多年来,随着该公司尝试将其扩展为更新的功能,该程序变得越来越容易出错,到处都有数百万不满意的客户。他们可能会受益于以强类型的面向对象编程语言对软件进行重新设计。


特别是,作为我的计算机程序员,我是否应该知道某种功能语言?

历史上,Godel,Kleene和Church遵循标准的数学惯例发明了“函数式编程”,Turing发明了“命令式编程”以限定机械计算的概念。在图灵之前,没有证据表明数学曾经分析过命令式编程思想。(虽然所有传统的数学算法都以“命令式”表示,但是它们的基本内容仍然起作用。)因此,命令式编程对于人类文明来说是非常新的事物,其数学仍然不是很了解。每个人都应该了解某种功能编程的第一原因是要了解编程如何数学化。(我不承认命令式编程是非数学的,这就是功能程序员希望您相信的。但是我同意,就目前的技术水平而言,我们还不知道如何在数学上进行命令式编程。我们中的许多人正致力于解决这个问题。)


1

您可能将其视为进化。

最初,计算机完全是用二进制代码编程的。在此之后,引入了助记符并引入了汇编语言,这在很大程度上取决于所使用的CPU。

在引入更高级别的语言(第3级)之后(Pascal,C,ADA,Cobol),一些非常通用的语言(如C),有些更适合数据处理(Cobol),有些则适合计算(Fortran)。

在那之后出现了4级语言,例如逻辑语言(例如Prolog)。最通用的语言是第三级语言的后继语言。其中一些是Java,C#。

我们还会看到特定于Internet / Web的语言,例如ASP.NET,PHP。

以及特定领域(DSL)的语言,它们通常与通用语言一起使用。

然后还有供孩子学习编程的语言,例如LOGO。

还有用于快速编写代码的语言,例如Python,Ruby等,以及用于处理XML(XSLT)的语言。

而且我可能已经忘记了很多语言,甚至是各种语言。


1
你的年表很困惑。Prolog是1972年的,比Ada(1983)还年轻。我不知道您所说的“第三层语言的后继者”是什么意思;很少有语言不是Fortran的后代,包括C和Pascal(它们起源于Ada)。
prosfilaes 2015年

1
@prosfilaes,方式混淆。FORTRAN是第一种仍在使用的语言,然后是LISP,然后是COBOL。Algol的定义是发布算法,而不是机器使用的(但无论如何还是要使用某种编译器),它带有ofshots Pascal和后来的C。PL / 1是FORTRAN和COBOL与Algol-ish控制结构的奇怪混合。
vonbrand

1

其他答案很好,将会增加一些新角度。DC编写语言的发展就像人类的真实语言一样!他们像真正的人类语言一样再次相互借鉴概念和语法。换句话说,对计算机语言的词源也有相当真实的研究。

这也意味着悠久的历史时间表主要是在1930年代左右开始的λ演算

在理论和应用程序编程语言之间有很强的相互作用/协同作用/共生关系。发明了新的应用,这导致了新的理论,反之亦然。编程语言在许多方面都是理论与应用之间的桥梁

历史上一个有趣的案例研究是Fortran。它不是众所周知的,但是Fortran的早期版本(通常在Fortran77之前)语法不明确。这意味着编译器可以合法地 “解释” /编译同一命令,因为存在多种有效的“解释”(这与“解释”语言的技术意义不同)。

因此,有关形式语法的理论是在发明Fortran的同时发展起来的,当发现语言歧义性问题时,这是一个小危机。重新设计了Fortan语法以避免这种歧义,后来的语言在设计中对语法歧义更加敏感。OOP还是编程语言中理论概念/进阶的非常重要/最重要的示例,可以将“冲击”或“涟漪”转换为许多现有语言,并将其转化。

其他案例研究是新技术的发明。例如,关系数据库的发明对计算机语言产生了巨大的影响,例如具有SQL和与之相关的计算机语言接口(例如,在Java,“ JDBC”中)。同样,互联网的影响更大。在网络繁荣时期似乎出现了一种语言的爆炸式增长,这在很大程度上与WWW的早期增长相吻合,可以与进化式爆炸相比较。

摩尔定律的处理能力呈指数级增长,与此同时,新的编程语言似乎也出现了长期的增长趋势,有人认为这可能正在放缓。

当前编程语言的长期趋势似乎是向大数据并行化迈进,例如使用MapReduce。对闭包也有当前的兴趣。

语言的另一个关键方面是它们代表着越来越高的抽象水平。它们基于较低级别的抽象来创建较高级别的抽象(类似于金字塔)。通过这种方式,计算机语言的发展可能是无止境的,而且我们可以相对肯定的是,很重要的新语言将在很长的将来继续被发明出来。这可能类似于心理学中类似的概念,即所谓的“ 分块”(chunking)。粗略地说,是从较低级别的构建块中构建较高级别的心理概念。

任何学习过多种计算机语言的人都必须承认,可以观察到一种羊群的心态,从而使它们的某些方面成为过分炒作的风尚,即不像所提倡的那么关键,甚至随着时间的流逝而消亡(使用)!一些核心思想/变化仍然存在,但(过度)炒作逐渐消失。从这个意义上讲,编程语言也流行与落后。我认为,在过去的十年中,有两个确实有用但被夸大了的案例:

越来越多的人可以在许多主要语言中观察到自相似性,因此它们都趋向于以自己的方式实现许多相似的功能,例如,使用产品比较表“检查”网格中的许多功能。


另请参见设计模式,这些模式通常会跨语言并以语言实现。语言学习/功能的另一个关键方面是库中
vzn

FORTRAN从来没有正式的描述,更不用说表达的复杂性可能导致语法歧义(是的,我确实是在一个叫PDQ FORTRAN的可恶性中开始编程,后来又开始使用FORTRAN IV)这种语言中(非常令人尴尬的)歧义语法揭晓了Algol,这是语法定义的第一种语言。
vonbrand '16

最初/早期的FORTRAN所采用的观点,但更高版本的语法定义更加严格。它的一个案例研究显示演变与语言理论沿着语言。
vzn

FORTRAN强制采用一种语法,但是从来没有设计过一种语法。Algol开始了这种趋势,Pascal,Modula家族,Oberon,C以及ofstpring,PL / 1,Ada等一直沿用了这种趋势。鉴于上下文无关的语法技术和对语法的理解,今天定义语法并将其转换为无错误的语法分析器几乎是微不足道的,没有新语言会没有。
vonbrand

附录,更新/新兴语言中的案例研究:Google gonode.js,Apple swift
vzn

-3

它们不是,这只是一种营销头-如果您将该语言有点像“ C”,那么这将降低明显的进入门槛。

完全没有C影响的一些代码:SQL,Pascal,Delphi,FORTRAN,COBOL,Ada,PowerBuilder,HyperTalk,Lisp,Simula,FOCAL,BASIC,PL / I,Algol,Algol-68,SNOBOL,Modula,Visual BASIC,导师,徽标,Forth,DIBOL,Helix,AppleScript,Python,Erlang,Ruby,Pick,英语,RPG,PL / SQL,ASP,Prolog,SmallTalk,Perl,bash,Wand BASIC,REXX,DOS批处理语言。

那些看起来很像C的代码,却几乎没有什么共同点:JavaScript,Java,C#,(可以说)Objective-C。

都是市场营销,Java,C ++和JavaScript有点像C,但在幕后几乎没有什么不同。


5
“不是”-什么不是?无论如何,我看不出如何解决这个问题。它只是语言列表,还有一个完全未经证实的说法,即涉及营销。
David Richerby '16

2
“根本没有C影响的一些分子:... Algol,Algol-68,...” –考虑到C来自Algol,您应该这么说。“如果使某种语言看起来像“ C”,则可以降低明显的进入障碍。” iirc,这被证明是错误的。事先没有编程知识的学生可以更快地学习其他语言(我认为他们在该研究中使用了Haskell)。
拉斐尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.