为什么会有那么多编程语言?为什么仍在制作新语言?[关闭]


51

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

尽管存在其他语言,是什么促使人们创建一种编程语言呢?


有关这个主题的一个有趣的视频是“最后的编程语言”,由Bob大叔马丁(skillsmatter.com/podcast/agile-testing/bobs-last-language
mikera

因为程序员喜欢工具。
haylem 2012年



我想每种语言都有一个故事,很难证明这一点。据我所知,大多数语言并没有给制造商带来太多好处。大多数语言都围绕相同的概念,很少解决实际问题或提供良好的环境。我认为当他们创建它时,他们会感到厌倦并厌倦了整个事物,也许会看到他们是如何浪费生命的。……想想ksh或JavaScript……。
NoChance

Answers:


36

编程语言不断发展

新的编程语言通常会从现有语言中学习,并以新的方式添加,删除和组合功能。有几种不同的范例,例如面向对象功能,许多现代语言尝试将两者的功能混合在一起。

还有其他新问题需要解决,例如增加多核CPU。最常见的解决方案是线程,但是某些编程语言尝试以不同的方式解决并发问题,例如Actor模型。参见Erlang-并发软件


10
关于Erlang的有趣之处在于,它是Actor模型的“无尘室改造”。当阿姆斯特朗和朋友们开发Erlang时,他们并不了解休伊特(Hewitt)等人在演员模型上的工作!
Frank Shearar 2010年

@弗兰克:这很有趣。我不知道,谢谢。
乔纳斯(Jonas)2010年

2
+1为进化。类似的问题可能是“为什么动植物种类如此之多?为什么还会出现新的动植物?”
吉安(Gyan)加里·布恩(Gary Buyn)2011年

1
@GaryBuyn如果您订阅该观点,那只是“ +1进化”。对于许多人来说,动物类比有点太远了。
暗夜

@GaryBuyn,嗯......那是相当的类似的“哈姆雷特”是“仓鼠”。
Pacerier's

22

这是一个循环。您开始了一种新的语言,就可以自由摆脱前辈所有的不良语法和错误选择。在版本1中,该语言看起来很棒,因为它没有任何负担,并且可以完成工作。然后,在较新的版本中,您开始尝试可能无法使用的功能,或者从其他较新的语言中引入功能,这会使您的语法有些混乱。瞧,再经过几个版本之后,您会意识到您的语言现在像您所替换的语言一样复杂,并且存在语法错误和遗留问题。突然间,您意识到,如果您创建了一种新的语言,就可以解决所有问题……


2
这对于库,框架和软件绝对是正确的,但是我个人不知道这适用于哪种语言。你有例子吗?
back2dos

16
好吧,我认为C#和Java至少部分是为了解决C ++的复杂性而引入的。现在,如果您稍后再看看这两种语言的几种版本,它们的语法和功能集将变得非常复杂,以至于人们开始谈论它们“越过山坡”。尽管我无法证明任何事情,但只是我的看法。:-)
RationalGeek

2
好点,但我认为另一个事实是,在用C#游戏-它不为慈善理由和市场接受存在/让您的客户的产品已经被“改良”的新版本等商业产品
广发

1
这是真的。添加新功能以从市场上获得更多收益的动力当然不容忽视。但是,这是一把双刃剑。出于这个确切的原因,您可以期待商业支持产品的新功能。但是,从开源产品开始,只有在志愿军保持兴趣的前提下,您才能获得新功能,并且会有技术娴熟的人来养猫。
RationalGeek

C#具有许多功能,但它仍然是比C ++更干净的语言。诸如LINQ之类的新功能使您可以轻松地完成C ++中无法轻松完成的工作。我认为更有可能保留两种复杂性-一种是问题中固有的某种复杂性,另一种是当您从程序中消除一种冗余的复杂性时,需求会变得更加复杂-复杂性,例如数据,展开以填充可用的“空间”。
Steve314 2011年

11

出于同样的原因,有锤子,螺丝刀,手锯,带锯,手提凿岩机,撬棍和许多其他工具:并非每种语言都能完美地完成每项任务。一些语言针对特定的问题领域:R特别适合统计分析,C特别适合编写操作系统内核,Haskell特别适合于数学运算或财务计算,Erlang特别适合于并发编程等。

同样,出于同样的原因,衬衫有不同的颜色:有些人喜欢一种语言的“风格”胜过另一种语言。

而且,当然,许多程序员发现发明一种新语言很有趣,只是为了看看会发生什么,或者也许是因为他们对语言有一定的了解,想摸索一下,或者尝试一些想法。


不仅有所有这些施工工具,而且甚至还有许多不同种类的锤子,它们看起来相似,但具有特定的设计因素,使其更适合不同的工作或用户。
巴里·布朗

+1适用于问题域。一般研究工具的学者说,对于特定任务,非常通用的工具不如特定工具强大。考虑一下可调式扳手与固定式扳手
MarkJ

8

因为它们全都吮吸(一种或另一种方式)。

目前,我们已经创建了大约5000种语言来描述自然问题,但是没有一种语言可以用来编写程序(例如“英语”)。

除非有人找到一种创建可以用自然语言表达您可以在句子中表达的语言的编程语言,否则他们会不断前进。


15
即使那样,他们也会继续前进。只有死语才是用石头写的,请原谅。生活语言不断变化是有原因的。
R. Martinho Fernandes

1
有人会说表达问题的自然语言是数学。这就提出了一个问题,为什么人们会继续向功能语言中添加语法糖,而不是使用纯lambda演算。我认为我们通常需要解决的问题通常都不容易用英语或数学表达。
Steve314 2011年

5
同意 用纯数学很难表达“我饿了”。
亚伦·迪古拉

1
@AaronDigulla:肯定是饿=总和(肚皮/食物):)
gbjbaanb

@AaronDigulla是一个很好的例子,通常您想表达计算。因此,我们采用一种给定的方案,例如:我饿了,现在吃->好,现在不吃->饥饿。建立能够协商或扩展上下文的系统,我认为这是AI的目标。普通的编程语言仅表达人们告诉他们应该做什么,通常那不是特定的,而是通用的。但是由于大多数问题本身都是特定的,因此您可能会在这里看到问题。
AndreasScheinert 2012年

6

显然,创建一种新语言的一个重要动机是要取得比现有语言更好的东西。而且由于总有改进的余地,因此总会有新的语言。

商业利益是另一个重要原因。我认为,例如Microsoft能够满足每种需求的语言非常重要,因此公司和开发人员更喜欢他们的平台。


6

旧版代码。如果您开始使用新语言,则在更改旧语言时不必听/考虑所有投诉。即使每个人都同意新的实现更好,它也不会破坏旧的代码。而且那里有很多旧代码。


3
是否有任何书面记录的语言旨在避免使用遗留代码?这种说法似乎极不可能。我可以看到您想重新启动的情况(想到了.net),但这并不是要避免使用遗留代码,而是要更好地启用将来的代码。
Bryan Oakley

我不相信这是正确的。(通常)可以派生一种现有语言的开源实现。
可替代

@BryanOakley-最初是.NET旨在保持与VB6的向后兼容性,但他们认为这太难了。.NET仍然有很多基于它的旧版WRT Java / J ++。我认为D是针对遗留代码设计的语言的示例。
gbjbaanb 2012年

4

因为即使没有实际用途也可以创建新语言很有趣

神秘的编程语言(有时简称为esolang)是一种设计语言,旨在测试计算机编程语言设计的边界,作为概念的证明或作为笑话。


1
对于那些不懂Wikipedia文章脚注的人,深奥的语言Wiki非常有趣:esoteric.voxelperfect.net/wiki/Main_Page
David Winslow

您介意进一步解释它的作用,为什么在回答所提问题时推荐它?在Stack Exchange上不太欢迎“仅链接的答案”
gnat

1
@gnat老实说,我认为原始文本不是仅链接的答案,如果没有链接,它将代表一个简短但完全有效的答案。但是鉴于该链接确实增加了风味,因此我在其中添加了简短的引用。
jk。

3

创建一种编程语言非常有趣。由于您不仅限于以前的要求,因此它接近纯粹的创意工作。实施起来并不难,因为如果您首先编写编译器,则可以始终编译为C并编译C代码以获得适当的性能。

当然,我们大多数人的想法都比我们想像的要少,因此,他们常常会感到失望或被原始设计师以外的任何人所喜爱。

考虑一下您知道的任何编程语言。您可以轻松地提出自己不喜欢的几件事,对吗?您大概知道如何解决这些问题。有了更多的推动力,假设您对编译器的构建了解很多(很多人都知道),那么您可能会开始设计甚至实现自己的。


2

快速简短答案

重塑轮子...当前趋势是什么...

无聊的长答案

许多人忘记了“另一种针对旧程序员的类似新语言”是“一种针对新程序员的简单新语言”。

我的意思是什么?

好吧,对于“数年”的程序员来说,Java或C#可能是现有Cobol(OO /过程)Basic C / C ++的另一种编程语言,而对于“新”程序员来说,Java或C#是新语言,而Cobol, (OO /过程)基本的C / C ++对他们而言不存在,因此重新发明轮子已成为常事...

而且,如果技术上有新的趋势,人们可能会根据这种趋势开发出新的编程语言,例如用于Web和功能性编程的ecmascript / javascript ...

干杯。


+1指出方向盘重塑方面。通常这样做是出于营销原因:任何规模足够大的公司或组织都必须拥有自己的编程语言。
乔治

1

构建新的编程语言的原因很多,主要是因为有了新的编程范例,或者由于硬件的进步,人们开发了新的语言来利用诸如多任务处理等新的硬件功能。

就我而言,出于特殊原因,我通常会构建小型编译器(使用新的编程语言)。如果我分配游戏,并且我相信专门为游戏开发而设计的编程语言将导致更快的代码更短,开发周期更短,那么我就会构建它。到最后,事实证明它也可以用于其他通用编程。

我认为大多数创建编程语言的人都有一个特定的目标,有些人从一开始就为通用而创建。但大多数不是。

顺便说一句,我确实认为编程语言太多了,但是总会有数百种新的编程语言问世。一些出于娱乐目的,一些出于利基目的,例如作为学校项目,或者出于其他数百个原因。迟早会有一种新的流行。它永远不会结束。


0

出于同样的原因,<whatever>太多了,我们继续创建新的<whatever>

例如,有十二种PHP MVC框架,但是人们总是会创建新的框架来满足特定需求,以避免依赖其他团队,或者只是尝试创建更好的框架。基本上,每种工具或应用程序都适用。

这是一件非常好的事情,我认为每个人几乎都是双赢的。


NIH综合症=通常根本对IT行业没有用。
gbjbaanb 2012年

0

大学贡献了许多编程语言,爱立信(Erlang =爱立信语言),贝尔实验室(B和C语言),谷歌(几个月前的Go语言)等大型公司也做出了贡献。作为大学研究的一部分而写的许多书并没有得到太多使用。但是,有一些值得注意的例外。我想写自己的语言/编译器对于学习CS理论或相关学科的人们来说是一个很好的博士论文。令我惊讶的是,Python是在各种程序员围绕一个想法的协作在线努力下诞生的第一批语言之一。


python-history.blogspot.com/2009/01/…详细描述了Python的诞生
Andy Dent

0

原因有很多,大多数是因为人们认为存在的东西并不容易解决某些问题。有些只是出于娱乐或学术目的。

我认为有一个可靠的论点,即如何设计完美的语言的问题尚未解决(可能永远不会解决)。因此,只要人们对什么才是伟大的语言有了新的想法,人们就会继续尝试。这些尝试中的一些尝试会映射出诸如Erlang之类的很酷的新空间,而某些尝试会失败,但是只要从失败者那里学到一些东西就可以了。


-1

如前所述,语言尝试针对特定的特定任务,而新的语言可能针对新的领域。这些语言可以采用当前其他语言的功能。

使用新语言的另一个原因是试图合并许多不同的任务,并成为满足许多不同需求的语言。这些语言中的一些正在试图将所有包含的语言,无论您有何需要,都将始终使用。


-1

我在编程语言课上了解到,大多数语言都是为了挠痒痒而发明的。发明大多数语言是为了能够更好地表达某些算法。例如,发明了函数式语言为递归算法提供了更具表现力的空间。

问为什么有那么多语言,就像问为什么C ++ 0x?:)

另外,您知道的语言越多,您就能变得越富有表现力-在编程语言和自然语言中都是如此!

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.