由于嵌入式系统编程,我接触了 C,我认为它是该领域的一门很棒的语言。但是,为什么它被用来编写编译器呢?如果说gcc用C/C++实现的原因是当时好的语言不多,那么clang走同样的路(使用C/C++)就没有任何借口了。
是出于性能原因吗?与编译语言相比,大多数解释语言要慢一些,但我想在 CoffeeScript (JavaScript) 中这种差异几乎可以忽略不计,因为 Node.js。
从开发人员的角度来看,我认为使用高级语言编写一个编译器要容易得多。不幸的是,大多数编译器都是用 C/C++ 编写的。仅仅是因为遗留代码吗?
回复评论:
自举只是说明这种语言功能强大到可以编写一个编译器的一种方式。这不应该是我们选择语言来实现编译器的主要原因。
我同意下面给出的猜测,“大多数编译器开发人员会回答,因为大多数编译器相关工具(bison、yacc)都会发出 C 代码”。然而,GCC 和 Clang 都没有使用生成的解析器,他们自己实现了一个。这个前端进程独立于目标架构,不应该是 C/C++ 的强项。
人们或多或少一致认为,性能是关键因素之一。事实上,即使对于 GCC 和 Clang,构建一个合理大小的 C 项目(Linux 内核)也需要很多时间。是因为前端还是后端。我不得不承认我在编译器后端方面没有太多经验,因为我们用生成的 LLVM 代码完成了编译器课程。