[Pharo-dev] [Pharo4] First Class Global Variables
eliot.miranda at gmail.com
Fri Jul 4 16:01:35 EDT 2014
On Thu, Jul 3, 2014 at 8:51 AM, Marcus Denker <marcus.denker at inria.fr>
> If we have meta-object describing (and thus having the power to change the
> semantics of) instance variables,
> we need the same for Globals.
> I think the easiest is to just re-use the object hat is already there: the
> “binding”, that is, the association from
> the dictionary where the global lives (e.g. the classPool for class vars,
> Smalltalk globals for true globals, and so on).
> SystemVersion bindingOf: ‘Current'
> The VM just cares that it is an assoiation (actually, it just care that
> there are two fields, but the rest of the image cares
> about value and key…)
> -> we can make a subclass of Association
> -> we can have the compiler forward code generation to the object that
> describes the global
> -> we can add a nice MOP API: #read and #write: (instead of #value and
> -> Programmers can subclass the GlobalVariable and change #read and #write
> like they want (or override
> the code gen methods) as in Slots.
One thing I think is worth-while is having the compiler inline read-only
globals, especially classes. Most classes never change, and even if they
do, become: means that references to them (including in machine code) get
updated, so there's little downside.
The only drawback is that you can not add an instance variables, I think,
> to check… maybe it even works?
> If not, there are ways around that e.g. using some fancy Slot that does
> not need an ivar but uses a weak dictionary
> in a class variable, for example).
Since the VM doesn't look beyond the second field it doesn't care if you
add inst vars. It only expects the value field to be the second inst var;
it never asks for the size of the association or anything like that.
Remember that both key and value are fixed inst vars.
Thus: it would be fairly easy to have the class vars be as flexible as the
> slots… and then e.g. you will be able
> to put breakpoints and watchers on class vars. You could even define
> globals with special behaviour the same
> way as you do with Slots.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Pharo-dev