Let's say I want to change the object representation of the Context
object and/or the javascript objects and end up running in a new tachyon system with the new representation being used. What should I modify with the current system? What is the process to go from the current system to the new one? Is it mandatory to generate a new image and restart anew? Would we want to support dynamically changing the representation used by the compiler while it is running?
We will probably want to do the bootstrap as we currently do it in V8. Re-parse the AST, recompile the code, regenerate a completely new heap and serialize it into a new image.
Being able to change any part of the system while it's running imposes some pretty harsh constraints. For example, if you changed the object representation, this may necessitate changes in the GC code as well. However, the currently running GC is the old GC, so you need to replace your GC while the system is running. However, you run into a problem there, because your current system still is full of objects using the old representation. Therefore, the GC in the "transitional" system would need to support both representations at once.
What may be possible is to transfer objects from one representation to another, from the old system to the new, before serialization.
- Maxime