编程语言
编译
OCaml
Rust(编程语言)
自举

一门新编程语言是如何完成自举的?

既然一门语言的第一个编译器也是需要用编程语言写的,那新编程语言是怎么做到自举的?比如Rust是怎么做到用Rust写Rust的编译器的?
关注者
22
被浏览
26,566

2 个回答

你是一个铁匠,专门给木匠提供生产工具的铁匠。

有一天你觉得你目前的工具制造工艺精度太低、效率不够高,于是你决定发明机床替代打铁和手工制作木制零件。

你手工用木头和铁制作了一个简单粗糙的手动机床。

有了这台机床之后你给木匠制作工具的效率明显提高了。但是用了一段时间之后,你发现这台机床的设计还是有一些不足,于是你决定开发第二版机床。

把设计图画好之后你开始动手了。这次你决定不用打铁削木头的方式制造第二版机床,而是用已经制作好的第一版机床制作大部分第二版机床的零件,只有小部分用第一代机床制作不出来的零件你手工制作。

第二代机床制作好之后你越用越顺手,越来越多的木匠开始用你用机床生产的工具。为了提升效率你决定开发第三代机床。

因为第二代机床的设计比第一代机床更完善,你发现生产第三代机床的所有零件都可以直接用第二代机床制作。于是你用第二代机床生产了第三代机床。

恭喜,你达成了机床自举。

发布于 2022-08-10 21:18

通常来说,一门新的编译型语言是用其他的语言(例如C或者C++)写好最初的一个版本,逐步完善后再用自己重写自己。C语言是这样出来的,Rust也不例外。解释型语言如Python是用C语言写的,JAVA是C++写的,这类语言就用不着自举了。

查了下Rust的wiki zh.wikipedia.org/wiki/R

Rust是由Mozilla[11]主导开发的通用、编译型编程语言。设计准则为“安全、并发、实用”,[12][13]支持函数式、并发式、过程式以及面向对象的编程风格。
Rust 语言原本是 Mozilla 员工 Graydon Hoare 的私人项目,而 Mozilla 于 2009 年开始赞助这个项目[14],并且在 2010 年首次揭露了它的存在[15]。也在同一年,其编译器源代码开始由原本的 OCaml 语言转移到用 Rust 语言,进行 bootstrapping 工作,称做 rustc[16],并于 2011 年实际完成[17]。这个可自我编译的编译器在架构上采用了 LLVM 做为它的后端。
第一个有版本号的 Rust 编译器于 2012 年 1 月发布。[18] Rust 1.0 是第一个稳定版本,于 2015 年 5 月 15 日发布。[19]

Rust 最初的版本是由 OCaml 语言写的,2011年实现的自举。

发布于 2019-09-07 11:07