V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
uiosun
V2EX  ›  Go 编程语言

编程语言的自举到底有哪些坏处?

  •  
  •   uiosun · 2019-05-14 11:06:11 +08:00 · 6885 次点击
    这是一个创建于 2049 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看 PHP 的系统函数实现( PHP 是 C 写的),觉得不如直接看 PHP 代码方便。

    我是个 PHPer,顺便也学习了一些 Go 和 Py,了解这三门语言的一些背景后,就产生了好奇:

    一门编程语言,实现并选择自举编写,有什么前置条件与坏处呢?

    第 1 条附言  ·  2019-05-14 11:39:43 +08:00
    > 为什么问自举的坏处?

    从我对 PHP 的感觉,PHP 就算无法全部自举,部分自举也是可以做到的。

    如果有利于更广泛的使用者为 PHP 仓库提供代码、降低 PHP 内核理解难度,为什么不使用自举?
    missdeer
        1
    missdeer  
       2019-05-14 11:20:37 +08:00
    为什么问“坏处”?没看明白你的问题上下文是什么。。。
    janxin
        2
    janxin  
       2019-05-14 11:21:15 +08:00
    首先先看 https://en.wikipedia.org/wiki/Bootstrapping_(compilers)

    自举是工程化的自证,用实例证明本语言可实现复杂项目的可能性,同时设计者可以在开发实现过程中反思语言的设计是否存在缺陷。 自举前置条件一般需要 spec 和大量的测试。比如一个语言最开始使用 C++编写,那么要完成自举,首先是要保证语言 spec 不被破坏,功能正常执行。

    缺点是,比较耗时间?
    uiosun
        3
    uiosun  
    OP
       2019-05-14 11:40:27 +08:00
    @missdeer

    从我对 PHP 的感觉,PHP 就算无法全部自举,部分自举也是可以做到的。

    如果有利于更广泛的使用者为 PHP 仓库提供代码、降低 PHP 内核理解难度,为什么不使用自举?所以更希望了解,一门程序进行自举,所带来的问题
    lincanbin
        4
    lincanbin  
       2019-05-14 11:41:37 +08:00 via Android   ❤️ 1
    PHP 是个解释型语言,不输出二进制文件,输出字符串。
    isCyan
        5
    isCyan  
       2019-05-14 11:47:10 +08:00 via Android
    你看很多 php 本身就能实现的功能(有现成的库)
    可大多情况下还是用 c extension
    uiosun
        6
    uiosun  
    OP
       2019-05-14 11:48:52 +08:00
    @janxin THK,我继续了解下。

    (看起来 Wiki 也没写缺点,如果自举没有缺点,那岂不是所有语言都“应该”自举?语言进行自举的边界在哪儿呢……总之,感谢了 :D )
    echohey
        7
    echohey  
       2019-05-14 11:50:57 +08:00
    不会缩写就写全称。
    reus
        8
    reus  
       2019-05-14 11:53:31 +08:00
    要么就能自举,要么就不能自举,哪来什么“部分自举”?

    PHP 不能自举,就这么简单。
    uiosun
        9
    uiosun  
    OP
       2019-05-14 11:53:58 +08:00
    @lincanbin 感谢点明!

    才明白“解释型语言不能自举”,我实在是太萌新了,hah。
    pursuer
        10
    pursuer  
       2019-05-14 11:55:49 +08:00
    自举的缺点:需要人力
    momocraft
        11
    momocraft  
       2019-05-14 11:56:25 +08:00
    没好处,没人做算不算缺点
    没有缺点就应该吗?
    reus
        12
    reus  
       2019-05-14 11:57:57 +08:00
    编译器不是你想自举,就能自举。首先这个编译器应该可以输出二进制程序,不然你还要借助其他程序去跑编译器,那就不叫自举了。PHP 编译器连这个最基本的要求都没做到,所以不能自举。
    missdeer
        13
    missdeer  
       2019-05-14 13:48:29 +08:00   ❤️ 1
    1. 解释型语言可以自举。
    2. PHP 可以输出二进制文件。
    3. 不自举的原因可能是效率不高:1 )自举了运行效率不如用 C/C++开发的高; 2 )写编译器的话 PHP 开发效率不高
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2600 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:05 · PVG 19:05 · LAX 03:05 · JFK 06:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.