[Cuis-dev] [RFC] Namespaces, changes to SystemDictionary, Object and a dictionary class for tracking environment implementations

Gerald Klix cuis.01 at klix.ch
Mon Oct 5 08:28:54 PDT 2020


On 2020-10-05 17:03, Juan Vuletich via Cuis-dev wrote:
> On 10/5/2020 7:22 AM, Gerald Klix via Cuis-dev wrote:
>> Hi all, hi Juan,
>>
>> here comes the announced monster change set.
>> I hope it "Carries it's own wait."
>>
>> I added a EnvironmentImplementationDictionary class and changed all 
>> relevant methods in SystemDictionary to ask the single instance of 
>> EnvironmentImplementationDictionary if some
>> implementation can handle the request.
>>
>> It is the simplest implementation I can think
>> of, that is consistent with your statement:
>> "Yes. I want Cuis to be a good place for doing any kinds of 
>> experiments. Adding hooks for optional pluggable behavior is a big 
>> part of that."
>>
>> Please tell me if this is acceptable or
>> to big a change.
>>
>>
>> Best Regards,
>>
>> Gerald
> 
> Hi Gerald,
> 
> The size of the change is reasonable. What I'm not sure I like is the 
> fact that an instance of EnvironmentImplementationDictionary still gets 
> created and its code run even if there are no Environments 
> implementations at all. I think it would be better not to have the new 
> global, and, for example in #fillCaches, instead of what you suggest:
> 
>      self environmentImplementations
>          fillClassNameCache: classNames
>          andNonClassNameCache: nonClassNames.
> 
> it would be better to do something like:
> 
>      self environmentImplementationIfPresentDo: [ :environments |
>          environments
>              fillClassNameCache: classNames
>              andNonClassNameCache: nonClassNames ].
> 
> and #environmentImplementationIfPresentDo: will only evaluate the 
> argument block if there is an environment implementation to delegate to. 
> This way EnvironmentImplementationDictionary is no longer needed in the 
> base image.
> 
> Thanks,
> 

Hi Juan, Hi all.

I started the way you suggested, but I soon came
to the conclusion, that this is less readable
than the straightforward implementation.
I avoids one seemingly useless class
for 11 or more methods being more
complicated and it might add one more dictionary
lookup to all this methods
(Hidden behind #environmentImplementationIfPresentDo).

I am not sure what the most efficient
implementation for the case of
"no environment implementations installed" is.
If I had to guess, I would suppose it is an 
EnvironmentImplementationDictionaryDummy
that avoids the (empty) iterations and
answers the values for the "nothing found case".
(This is based on the assumption that the JIT
inlines methods answering constants).
If this is the case we can add such a
dummy environment implementation manger
as an optimization.

Perhaps someone with more knowledge about the
JIT -- Eliot for example -- can answer this
question.


Best Regards,

Gerald



More information about the Cuis-dev mailing list