[Pharo-project] Ideas for CompiledMethod proxies?

Mariano Martinez Peck marianopeck at gmail.com
Tue Nov 30 11:03:51 CET 2010


On Sun, Nov 21, 2010 at 5:31 PM, Igor Stasenko <siguctua at gmail.com> wrote:

> Obviously you can't having a single object representation (a tagged
> machine word with lowest bit set)
> and have two different classes for it.
>
>
Yes, that's true. The thing is that I have a big problem using SmallInteger
as proxies....So far I always used a subclass of ProtoObject for the
proxies. This is cool because most of the messages are not understood by
ProtoObject, thus I can intercept most messages. Now, the problem using
SmallInteger as proxies is that there are several methods that ARE
understood by both. This is a big problem because the original
CompiledMethod is not installed, and the method answers but with a different
value.

For example, suppose I do something like this:

MyClass methodDict at: #foo put: 5.
(MyClass >> #foo) size

In this case, I would like that size is NOT understood by the proxy and that
loads back the original compiled method. But this is not the case since
SmallIngeger DOES understand the message #size. Thus, it answers...and
something different than the size of the compiled method...

So in summary I have problems with all methods that are understood by both,
even all those in Object I think...

Best regards,

Mariano



> On 21 November 2010 16:51, Mariano Martinez Peck <marianopeck at gmail.com>
> wrote:
> >
> >
> > On Sun, Nov 21, 2010 at 12:13 AM, Levente Uzonyi <leves at elte.hu> wrote:
> >>
> >> On Sat, 20 Nov 2010, Mariano Martinez Peck wrote:
> >>
> >>> On Sat, Nov 20, 2010 at 5:41 PM, Levente Uzonyi <leves at elte.hu> wrote:
> >>>>
> >>>> The only problem is that you can't swap-out a method that's used by
> the
> >>>> swap-in code.
> >>>>
> >>>>
> >>> Yes, but that's easy to solve. Before swapping everything, I "simulate"
> >>> the
> >>> swapping of a dummy CompiledMethod. During that, I mark all the
> >>> CompiledMethods that were used to perform that. And then, I exclude
> those
> >>> objects from being swapped :)
> >>
> >> That won't work, because during the simulation you'll only try a single
> >> execution path. Swapping in a real method may invoke methods that
> weren't
> >> used during the simulation. For example my implementation uses
> #storeString
> >> to serialize the methods and Compiler >> #evaluate: to deserialize them.
> So
> >> during deserialization a lot of different methods may be invoked.
> >
> > Ahhh I got it....
> >
> > Are you using Cog?  because with the SmallInteger I have the problem I
> > described with #run:with:in:
> >
> > Last question....to use SmallIntegers, I need to put some methods in
> > SmallInteger, like #run:with:in:  , #doesNotUnderstand: ,  and all the
> > methods related to writing and loading back the original compiledMethod.
> Of
> > course I can put all those methods under a category  *MyProxyPackage  ...
> > but I was thinking if there is another way. I would love to have
> > MySmallIntegerProxy that extends from ProtoObject (because I want my
> proxy
> > to understand as less messages as possible) and that is threated by the
> VM
> > like a SmallInetger, I mean, that it directly stores the number value in
> the
> > address, and put the last bit in 1.
> >
> > Is this possible? how much work can it be?
> >
> > Thanks in advance,
> >
> > Mariano
> >
> >
>
>
>
> --
> Best regards,
> Igor Stasenko AKA sig.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gforge.inria.fr/pipermail/pharo-project/attachments/20101130/dfb54001/attachment.htm>


More information about the Pharo-project mailing list