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

2017-01-29 15:31:59 +08:00
 thekll
5105 次点击
所在节点    程序员
9 条回复
ryd994
2017-01-29 15:35:31 +08:00
只要这个语言能在物理机器上运行,就一定能用汇编写出来(实际上可不可能无所谓)
feiyuanqiu
2017-01-29 15:42:38 +08:00
自举是为了证明语言的表达能力,同时语言的设计者也可以通过这样一个实际的复杂的项目来验证语言的设计
noli
2017-01-29 15:46:47 +08:00
ryd994
2017-01-29 16:55:38 +08:00
只要是图灵完全的语言(大多数都是),那就不存在表达能力的区别
虽然说有怀疑图灵完全之上还有更高层次,然而一直无法证明。因此一般认为图灵完全就是表达能力最强而且相互等价
论运行效率,机器码手撸编译器解释器肯定是最高的
但是,因为人力有限,没必要把人的力气浪费在这种无聊的事情上,所以一般都是基于 c ,再相互补充

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

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

随便举个 C 的例子。
假如 C 编译器全程用汇编写,那么参与开发的人必须同时是汇编和 C 的用户才行。
但如果 C 编译器是用 C 写的,那么开发人员不需要通晓汇编就可以参与开发了。
(用汇编来优化又是另一回事。)
jyf007
2017-01-29 22:55:50 +08:00
呵呵,世界上没有绝对的 cisc 和 risc ,实现指令集都已经靠微码了。
bombless
2017-01-30 19:06:28 +08:00
想太多了……自举只是一种实现的风格
之所以有少数情况下自举有自己的性能上的优点,那只不过是因为本身设计的时候没有把足够的接口暴露出来以至于把路堵死了
momocraft
2017-01-31 09:58:03 +08:00
我们知道编译器也是个不小的程序,能实际做到自举,说明语言和 (编译器实现) 在一定程度上靠谱。
q397064399
2017-02-01 07:06:55 +08:00
实际上没什么卵用, Go 也自举了,就 C-GO 那尿性,静态语言又缺少泛型,搞个鸡巴毛线

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/337329

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX