V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
thekll
V2EX  ›  程序员

语言的自举( Bootstrapping)有什么优点?是不是其他语言实现的编译器可能从根本上没办法对该语言的某些特性进行优化,而且这种限制是不可能突破的,除非采用自举的方式?

  •  
  •   thekll · 2017-01-29 15:31:59 +08:00 · 5143 次点击
    这是一个创建于 2882 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2017-01-29 16:32:34 +08:00
    1 、只考虑通用编程语言;
    2 、只针对改进的哈佛架构的两种实现 RISC 、 CISC ;
    问题分为两方面:
    1 、能否自举?
    2 、理论上,自举是不是效率更高,编译效率和目标代码的执行效率;


    引申问题:
    语言之间的等价问题,即不考虑语言对人类的友好性,只考虑语言的表达能力和编译得到的
    目标代码的执行效率,它们之间的差异是由什么因素决定的?
    9 条回复    2017-02-01 07:06:55 +08:00
    ryd994
        1
    ryd994  
       2017-01-29 15:35:31 +08:00
    只要这个语言能在物理机器上运行,就一定能用汇编写出来(实际上可不可能无所谓)
    feiyuanqiu
        2
    feiyuanqiu  
       2017-01-29 15:42:38 +08:00   ❤️ 2
    自举是为了证明语言的表达能力,同时语言的设计者也可以通过这样一个实际的复杂的项目来验证语言的设计
    noli
        3
    noli  
       2017-01-29 15:46:47 +08:00 via iPhone
    ryd994
        4
    ryd994  
       2017-01-29 16:55:38 +08:00
    只要是图灵完全的语言(大多数都是),那就不存在表达能力的区别
    虽然说有怀疑图灵完全之上还有更高层次,然而一直无法证明。因此一般认为图灵完全就是表达能力最强而且相互等价
    论运行效率,机器码手撸编译器解释器肯定是最高的
    但是,因为人力有限,没必要把人的力气浪费在这种无聊的事情上,所以一般都是基于 c ,再相互补充

    你需要意识到一点,硬件能力不停增长,机器的能力是无穷的,而人力是有限的。只要能省人力,运行效率没多少所谓。
    当然也有例外,比如嵌入式、数据库、内核,这些是受当前机器能力限制的(成本、或者单线程性能),所以这些关键区域会用 C 甚至汇编写。
    msg7086
        5
    msg7086  
       2017-01-29 17:18:57 +08:00
    > 自举是不是效率更高

    大多数时候不是为了编译和执行效率,而是反过来,提高开发效率。
    当然开发效率带动更多的优化导致执行效率提高又是另一回事。

    随便举个 C 的例子。
    假如 C 编译器全程用汇编写,那么参与开发的人必须同时是汇编和 C 的用户才行。
    但如果 C 编译器是用 C 写的,那么开发人员不需要通晓汇编就可以参与开发了。
    (用汇编来优化又是另一回事。)
    jyf007
        6
    jyf007  
       2017-01-29 22:55:50 +08:00 via Android
    呵呵,世界上没有绝对的 cisc 和 risc ,实现指令集都已经靠微码了。
    bombless
        7
    bombless  
       2017-01-30 19:06:28 +08:00 via Android
    想太多了……自举只是一种实现的风格
    之所以有少数情况下自举有自己的性能上的优点,那只不过是因为本身设计的时候没有把足够的接口暴露出来以至于把路堵死了
    momocraft
        8
    momocraft  
       2017-01-31 09:58:03 +08:00
    我们知道编译器也是个不小的程序,能实际做到自举,说明语言和 (编译器实现) 在一定程度上靠谱。
    q397064399
        9
    q397064399  
       2017-02-01 07:06:55 +08:00
    实际上没什么卵用, Go 也自举了,就 C-GO 那尿性,静态语言又缺少泛型,搞个鸡巴毛线
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2846 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:16 · PVG 08:16 · LAX 16:16 · JFK 19:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.