人们如何创建自己的编程语言?

时间:2010-11-27 01:51:06

标签: programming-languages grammar compiler-theory

在大学我主修编译理论和语法,所以在这个领域有很好的背景(虽然很久以前)并且知道编译器的创建是一项巨大的重大任务,至少对于像C ++这样的语言来说

所以我对大量编程语言感到困惑,这些语言似乎是由个人创建的,而不是在公司工作的大群人。例如Ruby,根据维基百科它是由一个人创建的 - 我不知道这种语言可能非常简单,但我的观点是那里有很多自创语言。

那么,如何创造自己的语言(这不是太简单,以至于毫无用处)作为个人而不是花费一生的时间呢?

是否有关于这个主题的好书(不是关于编译器和一般的规范)?

3 个答案:

答案 0 :(得分:3)

  

(虽然很久以前)并且知道编译器的创建是一项巨大的重大任务,至少对于像C ++这样的语言而言。

许多事情共谋使事情变得更容易:

  1. 计算机拥有更多内存和速度。编写早期编译器的大部分挑战是能够以最少的内存高效地完成。这就是为什么C可以在一次传递中编译的原因:当时,你可能没有足够的内存来整合其中的整个源文件。之前编译器编写的许多魔力都在优化你的符号表表示并尽可能快地进行解析,现在你可以通过简单易行的方式来做事。

  2. 基础技术变得更好。大多数语言都有很好用的解析器库,高级数据结构(如果你已经有一个很好的哈希表实现,那么符号表就很容易了!)以及使编译器或解释器更容易运行的其他工具。

  3. GC无处不在。今天创建的大多数新语言都是垃圾回收。这使得设计语言变得更容易(您不必指定详细的内存语义)。同时,您可以定位一些现有的GC平台,如CLR或JVM,因此作为语言作者,您不必编写自己的GC。实际上,以CLR或JVM为目标会使您作为编译器编写器的工作变得更加容易:作为更高级别的平台,字节码会在中途遇到您。

  4. 大多数新语言都是动态输入的。创建的大多数新语言都是动态输入的。那些很多更容易设计和实现。我发现语言设计中的大部分挑战都是设计一个类型系统。同样,编译或解释静态语言更具挑战性。动态语言,一切都只是一个属性包,非常容易启动和运行。

  5. 再一次,计算机拥有更多内存和速度。在当天,如果您的语言有任何成功的机会,那么需要编译成高效的机器代码,有效地使用内存并快速运行。否则它会非常缓慢。现在计算机的速度要快得多,即使是像Ruby这样的慢速语言,对于许多实际应用来说仍然足够快。作为编译器编写者,您不需要像以前那样多的优化技能。

  6. 值得注意的是,没有人正在制作像C ++这样复杂的新语言。 C ++确实接近语言复杂性的顶端。

答案 1 :(得分:1)

我在创建自己语言的路上走了一段路。我开始这样做来表示需求,分析和设计构造,而不是代码编译器。为此目的,即使是非常简单的语言也是有用的。我发现能够在非常有限的英语版本中读取和编写这样的结构很有价值 - 主要是模板句子。然后让语言机器可读变得有用,所以我构建了词法分析器和解析器来使用Lex和Yacc来读取语言。随着我的离去,我扩展了语言及其解析器来处理扩展。

我知道这对于像C ++这样广泛的语言的强大编译器来说还有很长的路要走,但是说明了沿着这条路走下去的一个动机。我建议你认为简单语言毫无用处是一种夸大其词。即使是非常有限的语言也可以大量使用。

答案 2 :(得分:0)

虽然我基本上没有自己制作语言的经验,但我确实有很多学习新语言的经验,所以我可以建议 -

编程行业是一个语言市场。基于学习和使用的简单性,缺乏商业和法律限制,对现实生活情况的适用性,灵活性和权力,语言的普及程度越来越高。如果您希望某一天的语言受欢迎,请尝试使用这些语言。

如果你正在设计一种玩具语言(正如许多计算机科学家所做的那样),这是一个有趣的理论练习,但仍然非常有效,但你可能不会期望它变得非常普遍。