Up: Build

1.1 Cold init

At the start of cold init, the only thing the system can do is call functions, because COLD-FSET has arranged for that (and nothing else) to happen.

The tricky bit of cold init is getting the system to the point that it can run top level forms. To do that, we need to set up basic structures like the things you look symbols up in the structures which make the type system work.

So cold-init is the real bootstrap moment. Genesis dumps symbol<->package relationships but not the packages themselves, for instance. So we need to be able to make packages to fixup the system, but to do that we need to be able to make hash-tables, and to do that we need RANDOM to work, so we need to initialize the random-state and so on.

We could do much of this at genesis time, but it would just end up being fragile in a different way (needing to know about memory layouts of non-fundamental objects like packages, etc).