On 20 Feb 2015, at 18:11, Chris Muller <asqueaker@gmail.com> wrote:
Chris, didn't you do something about this in Squeak? It would be nice to keep consistent if possible...
Yes, but no one liked it because it employed the Proxy design-pattern and requires a become. Perhaps if I'd gotten it perfect the first time it'd have been better-received. But, I didn't, and the ensuing backlash wiped out any motivation for me to fix it.
This is always the danger⦠I start to be very careful in this regard: better make (and allow!) mistakes than doing nothing. Because mistakes can be fixed, while a discouraged person will just never do anything. (e.g. leave the project in case of open source). Of course #become: sadly get really slow when the image gets large⦠but this is fixed with Spur, which means it will possible.
Marcus' suggestion is more explicit, and so might be better received by the community. There's a tradeoff between the two designs: In my design, you have to make sure you get it right or the image could lock up. In Marcus' design, you have to sprinkle multiple checks for #reload in the code and make sure you get it right, or you might end up saving corrupt MCZ packages (e.g., with #reload as the ancestry).
Yes. I think the only reason I dared to let me think in this direction is that the #ancestors are accessed *only* via the accessor⦠but nevertheless: checks need to be added.
Either way, its a wasteful part of the design of MC that should be addressed. I'm partial to fixing the Proxy solution, but I'd be in favor of ripping it out and adopting a stable alternative from Pharo if it becomes available.
We could do it in two steps: adopt the #become: solution when we use spur 100%⦠I even want to have a default Proxy framework in the system to make these things easier. (something like Ghost). Marcus