C编译器本身也是C写的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
buxianyu
V2EX    问与答

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

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






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

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

    @VYSE 谢谢你及以上提及汇编的哥们,看来C编译器是用的汇编。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2473 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 10:40 PVG 18:40 LAX 03:40 JFK 06:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86