作者:家具销售_903 | 2023-08-12 11:35
我刚刚听了软件工程广播第57集(转录:http://www.se-radio.net/transcript-57-compiletime-metaprogramming)我只有40分钟,但我想知道为什么C是编译器的语言 - 当一个Scheme子集看起来更合适时?(或其他一些HLL)(不包括不想重写gcc的明显原因)
PS最初发布于LtU http://lambda-the-ultimate.org/node/3754
1> jarnbjo..:
我不会费心听40分钟的收音机或者更彻底地理解你的问题,但我会说完全相反.只有少数编译器是用C语言编写的.我的印象是(至少在适当的情况下),大多数编译器都是用它们要编译的语言实现的.
它被称为"bootstrapping",它在最基本的编译器教科书中提到了龙书.基本上,您首先使用另一种语言实现语言编译器的一小部分,然后使用新语言为该语言构建下一个编译器(具有更多语言功能)并进行迭代.您如何看待第一批编译器(甚至汇编程序)的编写?在机器代码当然.第一个编辑器和其他实用程序也是如此.
"少数编译器是用C语言编写的".无论如何,计算编译器可能会产生误导.绝大多数编译器可能是Scheme或ML编译器,由CS本科生学习Scheme或ML编写;-)
@Carl Smotricz:嗯,无处不在的C编译器gcc是用C语言编写的.类似地,Erlang编译器是用Erlang编写的.Lisp eval函数是Lisp编译器,它是用Lisp编写的,当时Lisp只是一个理论,直到一个研究生看到代码并意识到他可以直接在汇编中音译大部分代码.所以我猜第一个实用的Lisp编译器是由人编译的.
2> Vijay Mathew..:
C不一定是编译器的语言,但它确实有一些优点.C几乎在所有平台上都可用,这使得编译器的移植和引导变得容易.C更接近硬件,并且可以进行许多其他语言难以实现的优化.用C编写的编译器很容易与其他语言,库和系统共存,因为它们中的大多数都提供了C接口.其他人也很容易扩展编译器,因为C是系统程序员的世界语.