创建一门新的编程语言的真正好处是什么?实际上你很可能并不会使用它。
简而言之,创建新语言的过程会如何让您成为更好的程序员?
创建一门新的编程语言的真正好处是什么?实际上你很可能并不会使用它。
简而言之,创建新语言的过程会如何让您成为更好的程序员?
根据我的经验,我可以说...
有趣、特定领域问题解决、上下文的复杂性
我喜欢创造新的语言以供有趣之用,并处理特定领域的问题。一个非常简单的例子可能是维基百科标记语言,或者像专门处理并发处理的Erlang一样复杂。
许多通用编程语言很相似,因为它们是通用的。有时,您需要一个更准确的抽象来表示您正在解决的问题的机制。另一个例子是M4宏语言。
请记住,语言不是魔法,它仅仅是一组定义了语法结构和隐含的语义的集合。 SQL是一个很好的针对特定目的而设计的语言,其语法和语义中定义了这个目的。
学习语言的工作原理,什么使语言可分析,什么使语义有意义以及其实现,我认为可以使您成为更好的程序员。
编译器体现了计算机科学的许多理论:
翻译,抽象,解释,数据结构,状态...等等。学习这些内容将使您了解程序的影响以及其底层发生的情况。当然,您可以独立学习这些知识,但编译器是学习复杂主题的上下文环境的好选择,例如DFA/NDFA自动机、基于堆栈的解析器、抽象语法树...
我认为编译器是非常美妙的机器 :)
多种原因:
我认为Jeff Attwood在这篇Coding Horror的文章中回答得很好--尽管他谈论的是一个更一般的问题(当同一设计空间中已经存在其他工件时,为什么要创建任何新库、框架等),但我认为正是这种更广泛的视角给了他不同和有趣的观点。
你将学习哪些行为易于描述和证明正确,哪些不易于描述。
你将学习如何权衡不同形式主义来描述不同特性。
你最终会成为一名更好的程序员,因为你所学的形式主义和证明技术将适用于各种问题:锁技术、内核中的安全属性、无锁数据结构、网络协议和信息安全等等。所有这些领域都可以得到与编程语言相同的形式处理。
举一个例子,如果你给你的语言添加静态类型系统,并证明良好类型的程序保证是内存安全的,那么你将学到与编写解释器或编译器同样多(在不同维度上)的知识。
编辑: 如果你想学习这些东西,我认为最容易入手的起点是Benjamin Pierce的两本类型和编程语言书。还有一本Glynn Winskel的研究生教科书,更加注重语义和证明技术。
即使您终身从未编写过任何编译器,参加大学的编译器构造课程也会对您有所裨益。这是因为它让您深入了解内部机理。
只是为了好玩...然后你会意识到你无法创造出比你认为不好的语言更好的东西 xD (所以你停止抱怨它们)。