C编译器本身也是C写的?

2011-12-10 23:08:13 +08:00
 buxianyu
Unix系统、C编译器是用C写的,那又是如何编译的呢?用的什么编译器?
6187 次点击
所在节点    问与答
18 条回复
NemoAlex
2011-12-10 23:12:52 +08:00
机械人本身也是由机械人制造的
造机械人的机械人也是由机械人制造的
那么机械人是由谁制造的呢?
tioover
2011-12-10 23:22:59 +08:00
如果真是用C写的话就用老版的编译器啦
如果没装编译器那就在有编译器的平台上交叉编译啦
fly2never
2011-12-10 23:31:12 +08:00
记得以前看书这个叫编译器自举
mlzboy
2011-12-10 23:34:44 +08:00
怎么印像中会是先用汇编,之后一部分再直接用c来完成
xupefei
2011-12-10 23:34:54 +08:00
第一个C编译器是汇编写的
以后的都是C自己写的
haohaolee
2011-12-10 23:35:52 +08:00
这个涉及到bootstrap,可以先写个简单的编译器,然后再编译完整的编译器,最后用完整的编译器再编译一遍代码
SErHo
2011-12-10 23:40:25 +08:00
那汇编的编译器是什么写的,难道最后真是这个笑话吗?——用针在硬盘上刻了个Windows...
fly2never
2011-12-10 23:58:25 +08:00
@SErHo 汇编没有编译器.... 汇编代码历经编辑,汇编,链接再到加载执行.
SErHo
2011-12-11 00:01:41 +08:00
@fly2never 哦,原来如此。
hq5261984
2011-12-11 00:03:14 +08:00
@SErHo 汇编会直接转化为及其语言 0和1.0代表断电,1代表通电。
krafttuc
2011-12-11 14:49:13 +08:00
@hq5261984 0、1不代表断电和通电吧,而是低电压和高电压。电压没法控制那么准,因此在某个范围内定为低电压,另一范围定为高电压。以此从模拟信号到数字信号转换。
Platinum
2011-12-11 14:51:19 +08:00
第一个编译器是最难写的
X_Del
2011-12-11 15:03:59 +08:00
@krafttuc 最早是靠通/断电的(大概在图灵时代),后来就不用了。
wtl
2011-12-11 15:28:32 +08:00
说个好玩的事情 对于计算机的进化我是理解的
但是对于机械的进化一直心存疑惑--
低精度的机器只能生产出更低精度的产品 那么高精度的机器从何而来?






答案是 靠人用手工打磨出来的
jjgod
2011-12-11 23:09:09 +08:00
推荐看这篇经典文章: Reflection on Computing Trust: http://cm.bell-labs.com/who/ken/trust.html
jjgod
2011-12-11 23:10:07 +08:00
hmm.. 是 Reflections on Trusting Trust.
VYSE
2011-12-11 23:54:18 +08:00
不用深究第一个编译器存在是什么编译的,那时肯定是汇编。
后来的编译器通过兼容旧版编译器编译完成。

本来编译器通常只是在语法分析、词法分析、生成中间码上改进,中间码到机器码完全根据硬件指令手册写的。
buxianyu
2011-12-12 00:04:41 +08:00
@jjgod 那篇经典文章是谈到C编译器是C写的问题,而且归为“鸡生蛋,蛋生鸡”问题之列。文章重在说明用C写C编译器时注意的问题,没有说C编译器是怎么编译出来的。

@VYSE 谢谢你及以上提及汇编的哥们,看来C编译器是用的汇编。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/23233

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX