compiler-construction - 编译为机器代码的编译器是否需要用汇编编写?

标签 compiler-construction programming-languages low-level machine-code

除了将一种高级语言转换为另一种高级语言的编译器之外,任何编译为机器代码的编译器都需要用汇编编写吗?

最佳答案

编译器的源代码不需要用汇编语言编写。例如,CPython 编译器(好吧,技术上解释器)的(很大一部分)是用 C 语言编写的: http://en.wikipedia.org/wiki/Cpython

一开始,在出现编译器之前,第一个编译器确实必须用汇编语言编写。但是后来有人用这个编译器编译了自己的编译器。然后别人用这个编译器编译了自己的编译器。等等。

这提出了“自举”的概念。自举编译器是用它打算编译的语言编写的编译器。 clang编译器可以编译C++代码,但是编译器本身是用C++写的!这是如何运作的?好吧,第一个 clang 编译器是由另一个编译器编译的(可能是 g++)。 clang编译器足够成熟之后,就可以编译出自己的代码了。现在,对 clang 编译器所做的任何更改都可以由 clang 编译器重新编译到另一个 clang 编译器中!整洁吧?

关于compiler-construction - 编译为机器代码的编译器是否需要用汇编编写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18723139/

相关文章:

java - 程序编译时如何打印堆栈跟踪?

c++ - 在c++中用vector编译错误

linux - 编写由 LLVM 后端编译的代码时,体系结构重要吗?

programming-languages - 有哪些可用的在微小内存中运行的交互式语言?

programming-languages - 为什么某些编程语言会限制您编辑正在循环的数组?

compiler-construction - LLVM如何将三个地址LLVM IR `add`转换为X86两个地址 `add`?

java - 有没有办法可以修改 ParseTree 及其附带的 TokenStream?

scala - 除了 Scala 之外,还有什么第二语言用于 LowLevel?

performance - 指令级分析 : The Meaning of the Instruction Pointer?

c++ - delete my_object 时到底发生了什么;被执行? sizeof(MyClass) 是否将所有其他内存向左移动?