I've seen a lot of progress for the Pharo Kernel by Pavel recently and I
really appreciate his work. But I have some questions I think we should discuss.
There have been quite a few changes to make code work in the Kernel and to
reduce dependencies between packages. But I really have the impression that
many of these changes are of bad quality :/.
I do not want to offend people, but this is fairly important if we want to
have a nice code base.
Example:
========
UnixResolver >> nbGetEnv: str
#NativeBoost asClassIfPresent: [ ^ self privNbGetEnv: str ].
^ nil
The goal of this code is to conditionally do something in the main image but
continue to work in the kernel.
Observations:
=============
- #asClassIfPresent: and Co are bad
- Why do we clutter the main image if the kernel should change?
- Can't we solve these things by having proper other objects?
- Is the UnixResolver really needed in the Kernel?
I worked with Esteban last week on a similar case in the CommandLineHandler and
we ended up introducing a minimal superclass. I guess this goes much in the
direction of having proper NullObjects.
I really think we should not add these little nasty changes, but rather
introduce proper
new classes that can be unloaded if needed.
What do you think?