为什么要创建新的编程语言?

Pra*_*nav 23 programming-languages

创建新编程语言的真正好处是什么?你真的不太可能实际使用它.

简而言之,创建新语言的过程将如何使您成为更好的程序员?

cgp*_*cgp 40

您将了解语言设计背后的决策,并更好地全面了解可读性,性能和可靠性之间的妥协.

您对递归,闭包,垃圾收集,参考管理,打字,数据结构以及这些内容实际工作方式等概念的熟悉程度将会提高.大多数程序员将更好地利用资源和语言功能.

类似于我们在使用其他语言时学习编写解决方案的新方法的方式,当我们编写自己的语言时,我们会探索创建解决方案的新方法.请参阅元编程.与问题所暗示的相反,域特定语言在许多环境中使用.

如果您正在编写编译器,您将了解有关计算机如何工作的更多信息.(根据您的目标,可能比您打算学习的更多)

当我在学校编写自己的排序例程,甚至重新实现好的例程时,它确实驱动了一些算法的一些弱点.

简而言之,知道如何使用工具的程序员和知道如何制作工具的程序员之间存在一个数量级的差异.

  • 也就是说,你会发现它并不像在学校看起来那么容易. (6认同)
  • @Eduardo ......我得到了"为什么重新发明轮子"的东西......如果我们没有那么我们仍然会是木制推车!那句话是某人缺乏逻辑论证的标志.车轮是圆形的,但由于重新发明而有多种形式.说这有什么不对,这是不同的,这很酷,即时通讯呢? (4认同)
  • 更多:这可能真的很酷.我不认为语言只是一个工具,实际上我真的很喜欢编程.当我开始这样的事情(创建一个lang或编译器)时,我会问我:为什么你这样做?你想重新发明轮子吗?好吧,有时你必须自己看.即使这只是为了好玩. (3认同)
  • "可能比你想知道的更多":)不确定:P (2认同)

Aid*_*ell 12

我可以根据这里的经验说话......

有趣,领域特定的问题解决,在上下文中的复杂性

我喜欢创造新的语言以获得乐趣,并且能够解决特定领域的问题.一个非常简单的例子可能是维基百科标记或像Erlang这样专门处理并发处理的东西.

许多通用语言是相似的,因为它们是通用的.有时您需要更准确地抽象出您正在解决的问题的机制.另一个例子是M4宏语言.

请记住,语言不是魔术,它只是具有隐含语义的已定义语法结构的集合.SQL是一个很好的语言示例,其目的是在语法和语义中定义.

学习语言如何工作,什么使语言可解析,什么使语义合理,以及实现这一点,我认为可以使你成为一个更好的程序员.

编译器体现了许多支持计算机科学的理论:

翻译,抽象,解释,数据结构,状态....列表继续.学习这些东西会让你了解你的程序的含义以及幕后的内容.您当然可以独立学习,但编译器是学习复杂主题的理想环境,例如DFA/NDFA自动机,基于堆栈的解析器,抽象语法树....

编程器是美丽的机器我认为:)


Gar*_*ett 7

多种原因:

  • 吹牛的权利
  • 经济激励
  • 极度无聊
  • 对数百种现有语言的不满
  • 未经治疗的精神错乱
  • 希望实现有助于新设计概念的语言(比如使设计模式更易于合并的语言)
  • 也许是其他原因


Ale*_*lli 6

我认为Jeff Attwood在这篇Coding Horror帖子中很好地回答了这个问题- 尽管他正在谈论一个更普遍的问题(为什么在同一个设计空间中存在其他工件时创建任何新的库,框架等),我怀疑它确切地说更广泛的观点给了他一个不同而有趣的视角.


Nor*_*sey 5

我要补充的是,如果您编写语义,以便您的语言是实际语言,而不仅仅是某些特定实现所接受的语言,您将学到大量有关如何精确描述计算行为的知识

  • 您将了解哪些行为是和不容易描述的——并证明是正确的。

  • 您将学习如何权衡不同类型的形式来描述不同类型的特征。

  • 您最终将成为一名更好的程序员,因为您将学习的形式主义和证明技术将适用于各种问题:锁定技术、内核中的安全属性、无锁数据结构、网络协议和信息安全,仅举几例. 所有这些领域都适用于与编程语言相同的形式处理。

举一个例子,如果你给你的语言一个静态类型系统,然后你证明一个类型良好的程序保证是内存安全的,你将学到和你一样多(在不同的维度上)通过编写解释器或编译器。

编辑:如果你想学习这些东西,我认为最简单的起点是Benjamin Pierce 的关于类型和编程语言的两本书系列。还有Glynn Winskel研究生教科书,有点难,但更侧重于语义和证明技术。