0

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

因此,我对似乎由个人而不是在公司工作的大量人员创建的大量编程语言感到困惑。例如 Ruby,根据维基百科,它是由一个人创建的——我不知道这种语言也许它非常简单,但我的观点是那里有大量的自创语言。

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

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

4

3 回答 3

3

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

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

  1. 计算机具有更多的 RAM 和速度。编写早期编译器的大部分挑战是能够高效地完成此任务并使用最少的内存。这就是为什么 C 可以一次性编译的原因:当时,您可能没有足够的内存来容纳整个源文件。以前编译器编写的许多魔力是优化符号表表示并尽可能快地进行物理解析,现在您可以通过更简单、更轻松的方式来实现。

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

  3. GC无处不在。今天创建的大多数新语言都是垃圾收集的。这使得设计语言更容易(您不必指定详细的内存语义)。同时,您可以针对一些现有的 GC 平台,如 CLR 或 JVM,这样作为语言作者,您不必编写自己的 GC。事实上,以 CLR 或 JVM 为目标通常会使您作为编译器编写者的工作更加轻松:作为更高级别的平台,字节码可以满足您的需求。

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

  5. 同样,计算机具有更多的 RAM 和速度。过去,如果你的语言想要有任何成功的机会,它需要编译成高效的机器代码,有效地使用内存并快速运行。否则它会非常缓慢。现在计算机的速度已经如此之快,即使是像 Ruby 这样的慢速语言,对于许多实际用途来说仍然足够快。作为编译器编写者,您不需要像以前那样多的优化技能。

还值得注意的是,如今没有人开发出像 C++ 这样复杂的新语言。C++ 确实接近语言复杂性的最高端。

于 2010-11-27T19:54:17.057 回答
1

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

我知道,对于像 C++ 这样广泛的语言来说,这距离一个健壮的编译器还有很长的路要走,但这说明了走这条路的一个动机。我建议您认为简单语言毫无用处的观点是夸大其词。即使是非常有限的语言也可能有很大的用途。

于 2010-11-27T02:24:20.643 回答
0

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

编程行业是一个语言市场。语言的流行程度取决于其学习和使用的简单性、缺乏商业和法律限制、对现实生活情况的适用性、灵活性和强大功能。如果您希望您的语言有朝一日流行起来,请尝试使用这些语言。

如果您为自己设计一种玩具语言(就像许多计算机科学家所做的那样),这是一个有趣的理论练习,仍然非常有效,但您可能不会期望它会变得如此广泛。

于 2010-11-27T02:58:11.700 回答