[squeak-dev] Request for feedback: mirrors

Eliot Miranda eliot.miranda at gmail.com
Tue May 22 22:24:34 UTC 2012


On Tue, May 22, 2012 at 12:07 AM, Colin Putney <colin at wiresong.com> wrote:

> Hi all,
>
> I've just uploaded a package to the Inbox for review by the community:
>
> http://source.squeak.org/inbox/Mirrors-cwp.2.mcz
>
> It's a simple first step at creating a mirror API for Squeak. I've only
> implemented ObjectMirror and ObjectVmMirror, which provide high- and
> low-level reflection on an object. This implementation has a twist,
> however: it sends no messages to the object it's reflecting. That allows us
> to reflect on network proxies, ORM stubs, mock objects and the like without
> triggering any state changes.
>
> As a proof of the concept, I've implemented a rudimentary non-invasive
> MirrorInspector. The main thing that's missing is non-invasive printing,
> which would take a bit of work to implement, but isn't necessary for a
> demo. To see it in action do try the following in a workspace.
>
> WARNING: Read the comments carefully, and don't do this in an image you
> care about!
>
> "This creates a very dangerous object"
> Object subclass: #Nuke
> instanceVariableNames: 'one two three'
> classVariableNames: ''
> poolDictionaries: ''
> category: 'Test'.
> class := Smalltalk at: #Nuke.
> class superclass: nil.
> inst := class basicNew.
>
> "This is harmless"
> MirrorInspector inspect: inst.
>
> "This will crash your image"
> inst yourself.
>
> The implementation uses primitive 188 to directly execute CompiledMethods
> with the reflected object as the receiver, thus giving us access to the
> object's state without sending it a message.
>

In part you can use the light-weigth mirror methods in ContextPart, these
take the object operated on as an argument.  Non-invasive printing could be
done via execution simulation.  I've already modified the Squeak debugger
in Qwaq/Teleplace images to use these light-weight mirror primitives so
that messages are not sent to receivers when simulating execution in the
debugger (i.e. when doing send instead of step).  If the mirror primitives
now work on the interpreter I can fold this into trunk.  David, do the
mirror primitive tests pass on the interpreter?

Doing this is also a good idea in general since it allows the debugger to
correctly debug proxies also.


>
> So, what do you think?
>
> Colin
>
>
>
>


-- 
best,
Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20120522/3f634a0d/attachment.htm


More information about the Squeak-dev mailing list