学习专门为该公司设计的编程语言


10

当您拥有XY其他可以帮助您的库,逻辑等的语言时,为什么有人会开发自己的语言以仅在该公司内部使用呢?将流程与其他内容一起使用,而不是开发自己的语言,不是很简单吗?


6
我们在野外使用的许多“新”语言都可以使用为“较旧”语言设计的库:例如:C ++可以使用C库,Scala Kotlin和其他人可以使用在JVM上运行的任何库,Typescript可以使用JS库。因此拥有一种新语言并不意味着失去对lib的支持...
Timothy Truckle '17

3
你为什么要建造一辆赛车来进行飙车而不是像普通车那样?
candied_orange

3
或者说真的,调查创建任何编程语言背后的原因和合理性。有些人认为,除非您创建了自己的语言,否则您不是真正的计算机科学家。这类似于在创建枪粉(炸毁房屋的一小部分)之前不是一名真正的化学工程师。
candied_orange

4
Erlang也以这种方式诞生:如果我没记错的话,它最初是在爱立信内部开发的。
Giorgio

3
另一方面,为公司专门设计的语言是愚蠢的,另一方面,为公司碰巧存在的问题领域专门设计的语言有时会很有用。您知道,当语言的设计和体系结构局限于使问题域更容易解决/表达的时候(而不是对通用编程有用),您就拥有后者,而不是前者。
Lie Ryan

Answers:


25

当您意识到这通常是漫长的过程而不是一个只说“我们想创造新语言”的人时,就会更容易理解。

通常以这样的想法开始:可以使用一种简单的领域特定语言来解决某些问题。目的通常是让非专家使用这种语言,因此它很简单,并且经常缺少诸如强类型和模块之类的功能。

到目前为止,一切都很好。但是随后,人们开始遇到语言无法解决的问题。因此,新的“功能”被缓慢添加以解决这些问题。而且由于过程缓慢且功能很少,因此只要解决了问题,就没有动机去适当设计这些新功能。

随着时间的流逝,这种新语言获得了将其功能从简单的领域特定语言转换为复杂的“通用”语言的功能,这些语言通常具有冲突,令人困惑的语义和难以遵循的语法规则。

当人们意识到自己创造出如此巨大的野兽时,现在已经为时已晚,要杀死它并用适当设计的语言代替它。

有几种这样发展的语言并不局限于特定公司的咳嗽 JavaScript 咳嗽 PHP 咳嗽


10
很好的答案,尽管JavaScript存在问题,但我认为将其与PHP放在同一句话是不公平的。这就像在说:“我们需要将比尔和特德踢出我们的邻居,他们是罪犯!” 但是,比尔(JavaScript)是个强盗,而泰德(PHP)是一个连环杀手。
TheCatWhisperer'5

12
@TheCatWhisperer我不同意。JavaScript与PHP一样糟糕,甚至更糟。因为您必须使用(或转换为)JavaScript,所以可以安全地忽略PHP。
欣快感'17

2
这是最有效的一点。
TheCatWhisperer '17

1
@Euphoric让我们等待WASM,然后情况可能会改变……
Kroltan

WASM的@Kroltan +1!
CraigR8806

15

将流程与其他内容一起使用,而不是开发自己的语言,不是很简单吗?

当然可以,但是为了达到荒谬的目的,如果没有人开发新语言,我们所有人都将用汇编语言编写所有内容。

有时没有人流。之所以会出现新语言,是因为有人渴望尝试,无论是只是想发明新事物的语言爱好者,还是想满足已有需求的公司。

这正是John Backus 在1953年提出“ IBM数学公式转换系统”时发生的情况。他希望科学用户指定一种比通过汇编形式编写数学公式更简单的方法。该专有产品成为第一种非汇编语言,而您将其称为Fortran。

Fortran是第一个走这条路的地方,而Erlang几乎是它的发源子。爱立信希望改进其电话交换机软件的开发方式,并发明了一种原型设计语言,具有其所需的特定功能。当我第一次探索它时,我的收获是它是由一个有实际问题的人开发的,可以解决1986年提供的任何其他语言都无法很好地解决它的问题。Erlang仍然是专有的内部产品,例如您的直到十年后它才开源之后,同事才遇到,现在它已成为主流语言。

Go和Scala在事物的宏伟计划中都是相对年轻的语言,在您的同事公司使用的语言完全有可能早于这两种语言。他需要做的是询问它的历史,为什么它存在以及为什么继续使用它。

我在2003年至2013年之间的十年时间里为一家公司工作,该公司广泛使用了特定于行业的环境,其中包括自己的语言,该语言起源于1970年代后期。尽管某些较新的语言可能是更合适的替代品(并且随着时间的推移嫁接了它们的钩子),但是该行业对其投入了足够的资金,并且拥有大量经过验证的代码,根本就没有一个好的商业案例。切换到其他东西。


-1

我以前看过 它永远不会运作良好。某些人具有“此处未发明”的复杂结构。通常,这会导致公司四处奔波,重塑车轮。

想一想。这种新语言可能一直在中断。在解析器,编译器,VM,链接器之间,等等...现在有成千上万的错误,人们将花费很多时间来调试随机问题。他们认为自己需要其他语言所没有的一切。

C / C ++用于编写所有类似的操作系统。但是有人认为他们需要一些不同的东西。


7
显然您从未见过Kotlin。还是Javascript或C#。多年来,Fog Creek Software使用了自己的编程语言Wasabi(基于VB)(尽管可以肯定,技术债务最终赶上了他们)。因此,肯定在某些情况下它确实起作用。
罗伯特·哈维

1
据我所知,C#是在Microsoft试图创建不兼容的Java实现之后诞生的,但后来被Sun起诉并输了。cnet.com/news/sun-microsoft-settle-java-suit由于无法再将其称为Java,因此他们开发了自己的语言,该语言最初与Java非常相似。
Giorgio

1
“这种新语言可能一直在破坏”-如果您的语言设计允许您避免整个类的应用程序错误,那么这可能是一个可以接受的折衷方案
Eric

16
听说过C吗?据报道,它是为单台计算机上的单个操作系统内部开发的。为什么K&R不仅仅使用证明用于编写操作系统的东西,例如PL / 1,BCPL或Algol 68?
idrougge
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.