java实现自举_编程语言的编译器实现自举,会带来什么样的优缺点?

编译器自举主要有两个方面的意义:

首先, 从技术上, 自举意味着, 你对编译器输出的目标代码的优化 (which is 编译器开发的日常工作), 能同时作为对编译器编译速度的优化.

比如哪天你打算写一个自己的 Magic 语言, 如果你一开始就打算自举, 那么你启动用的 v0.1 版本就可以选自己最顺手的语言来实现, 而不用关心其性能如何了, 实现过程中也不用太在意生成代码的质量, 毕竟只要它能在可接受时间里编译出 v0.2 就行, 然后你就可以用你的 Magic 语言实现你的 v0.2 版本的 Magic 语言编译器, 这个时候你就把关注点放在目标代码的生成质量上, 然后编译速度就能自动从中受益啦.

具体操作就是, v0.2 代码写完后, 用 v0.1 版本的可执行文件, 编译 v0.2 版本源码, 就得到了 v0.2 版本可执行文件 (因为 v0.1 版本的代码生成质量比较挫, 所以这里得到的 v0.2 编译器编译速度比较挫, 但是产出的目标代码质量是新版本优化过的), 然后再用 v0.2 版本可执行文件, 编译 v0.2 版本源码, 你就能得到一个编译速度也更优秀的 v0.2 版本可执行文件啦.

(题主应该是这个过程不理解, 所以这里讲得详细一点, 所以题主看到这里就应该知道, 你再来几遍, 产出的目标代码也不会再变化啦, 还是不明白的话, 我画个图你应该就明白了

(理解这里关键的点是, 一段代码的执行效果 (对于编译器就是产出的目标代码) 只跟源码有关 (当然前提是编译器无bug且你没用undefined behavior), 但是一段代码的执行速度还跟用的编译器有关 (当然是指它的效果(生成的目标代码质量), 而不是执行速度)

另一方面, 从社区建设的角度讲, 自举的编译器很方便吸引它的用户参与到它的开发过程中来.

比如你本来就每天写Rust, 然后哪天你觉得用得不爽, 想魔改一下, 一看, 哎呦不错, Rust的编译器也是用Rust写的, 这样一来你就能很开心地折腾起来啦.

个人觉得, 实践中, 把这门编程语言的用户, 吸纳为其编译器的贡献者, 自举在这个层面上的现实意义可能要更大一点.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值