samth
2019-11-29 19:37:34

Yes, that’s right. Basically, if you write (part of) your compiler in the language being compiled you either need to write bootstrap via a binary artifact or via a separate implementation of (that part of) the language.


samth
2019-11-29 19:38:27

In Racket we’ve always tried to avoid the former. Thus, cgc enables you to bootstrap 3m with just a C compiler, by being a separate implementation of the GC


samth
2019-11-29 19:39:16

Similarly Matthew implemented enough of Chez in Racket to run the Chez compiler so you can build racketcs from regular Racket


samth
2019-11-29 19:40:48

The one place where this isn’t the case is the expander. There’s only the one implementation, since it was bootstrapped from the old C implementation which has been removed. The extracted expander is checked in to git, though, so you don’t need Racket to build Racket.