V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
buxianyu
V2EX  ›  问与答

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

  •  
  •   buxianyu · 2011-12-10 23:08:13 +08:00 · 6385 次点击
    这是一个创建于 4761 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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   ·   实用小工具   ·   3504 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:05 · PVG 19:05 · LAX 03:05 · JFK 06:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.