Jookia <166...@gmail.com> skribis: > On Mon, Mar 21, 2016 at 11:48:40PM +0100, Ludovic Courtès wrote: >> Often, in their implementation history, compilers are boostrapped from >> something else initially, and only later to they become self-hosted and >> unbootstrappable. >> >> So in theory, it’d be possible to find, say, an old-enough GHC that only >> requires a C compiler (?), and use that to build the next version and so >> on, until we reach the latest version. I suspect the same applies to >> many compilers. > > I'm not sure about this. Bootstrapping older compilers means there's often > less > support for the platform you're on, which means we'll end up in a situation > where we're bootstrapping from machines and cross-compiling, and I forsee the > problem being that we'll have to rely on nonfree code or machines as our huge > backhaul in a decade where we're on some cool free hardware RISC architecture. > > For instance, to run GHC on ARM you can only use a recent GHC, all the old > versions didn't support it. Sure you could go from C to get an old GHC on ARM, > but it wouldn't have support for outputting ARM assembly.
Good point, indeed. >> For GCC, an idea discussed at >> <https://reproducible-builds.org/events/athens2015/bootstrapping/> would >> be to build GCC 4.7 (the last version written in plain C) with something >> more auditable like TinyCC, and then use this g++ 4.7 to build whatever >> GCC version we want. Again, sounds like it should work, but we need to >> actually try. > > Sounds interesting, and even better if we could compile the rest of the > bootstrap with just TinyCC. Yes, though we need a C++ compiler anyway to build current GCCs. >> BTW, the “good news” is that more and more compilers build upon LLVM, >> and for those there’s no bootstrapping problem if we take the C++ >> compiler for granted. > > Is this true? I know a lot of compilers *use* LLVM as a backend, but not sure > about their frontends. Right, it may be that front-ends are still mostly written in the target language. Ludo’.