Programming languages 为什么要创建一种新的编程语言?

Programming languages 为什么要创建一种新的编程语言?,programming-languages,Programming Languages,创建一种新的编程语言的真正好处是什么?您实际使用它的可能性很小 简而言之,创建一种新语言的过程将如何使您成为一名更好的程序员 您将了解语言设计背后的决策,更好地全面理解可读性、性能和可靠性之间的折衷 您对递归、闭包、垃圾收集、引用管理、类型、数据结构等概念的熟悉程度以及这些概念的实际工作方式将会提高。大多数程序员将更好地利用资源和语言特性 与我们在使用其他语言时学习编写解决方案的新方法类似,当我们编写自己的语言时,我们探索创建解决方案的新方法。看见与问题所暗示的相反,在许多环境中都会使用 如果你

创建一种新的编程语言的真正好处是什么?您实际使用它的可能性很小


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

您将了解语言设计背后的决策,更好地全面理解可读性、性能和可靠性之间的折衷

您对递归、闭包、垃圾收集、引用管理、类型、数据结构等概念的熟悉程度以及这些概念的实际工作方式将会提高。大多数程序员将更好地利用资源和语言特性

与我们在使用其他语言时学习编写解决方案的新方法类似,当我们编写自己的语言时,我们探索创建解决方案的新方法。看见与问题所暗示的相反,在许多环境中都会使用

如果你正在编写一个编译器,你将比以前更多地了解计算机是如何工作的。(取决于你的目标,可能比你想学的更多)

当我在学校写我自己的排序例程时,甚至重新实现了好的排序例程,它确实让我了解了一些算法


简言之,知道如何使用工具的程序员与知道如何制作工具的程序员之间存在着数量级的差异。

编写编译器或解释器需要对计算机科学理论有非常坚定的理解。如果你要编译成机器代码而不是另一种语言,这也需要对硬件设计有一个坚定的理解

除此之外,了解如何设计编译器意味着您将更好地了解一般语言,以及具体使用的语言。您将更好地理解语言设计者在编写规范时所采用的语法和权衡


编写编译器并不是让你成为更好的程序员。对语言理论和编译器设计的深入理解使你变得更好。

你这样做主要是为了好玩或扩大你对某一主题的理解


我不同意创造新的语言会影响表现——表现什么?执行速度不应该取决于语言结构,而应该取决于语言被翻译成什么-这是不同的:比如为一种语言创建语法并为其编写编译器/虚拟机。

同样的原因,在大学学习编译器结构课程将使你受益,即使你从未编写过编译器你一生中只有一个编译器。如果可以的话,这是一个隐藏的观察。

除了altCognito所说的理论/学术观点之外,一些高度专业化的语言被创建来有效地解决存在“通用”的特定问题语言对于您的任务来说要么效率极低,要么就是没有易于使用的现有替代方案


诚然,这种情况很少见,如果你遇到问题的第一反应是“我需要一种新的语言来解决这个问题”,那么你很可能错过了什么。在“可用”技术方面需要有一个相当大的差距,而您需要保证这样一个承诺。

我可以从这里的经验说

乐趣、特定领域的问题解决、上下文复杂性

我喜欢为乐趣和解决领域特定问题创建新语言。一个非常简单的例子可能是Wikipedia标记或像Erlang这样复杂的东西,它专门从事并发处理

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

请记住,语言不是魔法,它只是一组定义好的语法结构和隐含的语义。SQL是一种用于某种目的的语言的很好的例子,它的语法和语义定义了这种目的

学习语言是如何工作的,是什么让语言变得可分析,是什么让语义变得合理,以及如何实现这些,我认为可以让你成为一名更好的程序员

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

翻译、抽象、解释、数据结构、状态。。。。这个名单还有很多。学习这些东西将使你了解你的计划的含义以及在幕后发生的事情。当然,您可以独立学习,但编译器是学习复杂主题(如DFA/NDFA自动机、基于堆栈的解析器、抽象语法树等)的绝佳环境


编译器是漂亮的机器,我认为:)

创建特定于领域的语言非常有价值。不要只考虑通用语言,而是考虑创建所谓的“小语言”来清楚地表达项目中的抽象。


例如,在最近的一个项目中,我决定使用命令模式来驱动服务层。我在我的命令代码中发现了一些重复,所以我编写了一个小编译器,它接受一种简单的语言来表达命令,并以“底层”语言发出命令实现。

我认为这在概念上有两种不同的答案。首先,了解编译器如何将代码转换为可执行代码。这可以帮助您更好地决定如何构造代码以更好地优化(或允许优化)。例如,如果您知道某个构造将禁止编译器内联代码块或展开循环,那么如果pe