-
Notifications
You must be signed in to change notification settings - Fork 4
Description
:: Reading PR128 ::
My question is based on superficial reading of the diff, but given how people on the cuis list are right now excited about "let's document things better", I thought we might do as well — and in my experience, the far far best way is one-line-every-day.
So here is the actual question:
Back before Covid, we had the Kernel in https://github.com/powerlang/bee-dmr and we had Powerlang in https://github.com/powerlang/powerlang. To me this idea resonates with the ENVY/Image project we had at OTI near the turn of the millenium, to git rid of the implicit assumptions the image has about the internals of the VM, and those the VM has about the image; so a "universal VM" can run different Smalltalk systems. Now, in a DMR/LMR we of course don't have a VM, but still you could feed Powerlang whatever Kernel you had. Is this design goal removed from the list of design goals of Egg? And it's not really about the Kernel and Powerlang living in the same repo: this has been going on for a while, and I thought this was simply a version-control-related decision, something similar to how Chromium is one huge codebase in one repo. But this morning I am looking at one single PR, supposedly addressing one single aspect, and it cuts across the Kernel and the Powerlang. The memory of the old pain: any change, I have to do synchronously in the VM and in the image. Some places are obvious, such as CompiledMethod, or MethodDictionaryArray. Some are really annoying, e.g. any change in the GC potentially breaks the image-level implementation of #become:. Some make UVM/Language separation impossible, e.g. OMR GC makes assumptions which are simply false in Bee. And then some torpedo you from behind, e.g. you wouldn't expect the image to know details of how stack frames are laid out in memory.
Now: I thought this was a design goal in Powerlang to isolate all these mutual VM/image assumptions, make them explicit and express them in a machine representation, and place that representation in the definition of the Kernel. I am not that naïve to think we ever achieved it; but it's still a principal design goal in UMR.
Now the actual actual question: is this still a design goal in Egg? Fundamentally, can Egg run different Kernels, at least in principle?