<br><br><div class="gmail_quote">On Sat, Dec 4, 2010 at 2:21 AM, Andreas Raab <span dir="ltr"><<a href="mailto:andreas.raab@gmx.de">andreas.raab@gmx.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
On 12/3/2010 4:18 PM, Eliot Miranda wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
BTW, Mariano's use of SmallIntegers rather than wrappers is an attempt<br>
to get a very compact image and seems a reasonable experiment. Using<br>
wrappers would defeat his use-as-little-memory-as-possible purpose.<br>
</blockquote>
<br>
Not at all. The design of objects-as-methods was deliberately done such that one could use a single wrapper for multiple methods. The only thing you need is to map from selector to method being executed. For example:<br>
<br>
MethodSwapper>>run: aSelector with: argsArray in: aReceiver<br>
"Execute the given method"<br>
method:= methodMap at: aSelector.<br>
^aReceiver withArgs: argsArray executeMethod: method<br>
<br>
Then you install a single MethodSwapper instance like here:<br>
<br>
swapper := MethodSwapper new.<br>
Morph selectorsAndMethodsDo:[:sel :meth| swapper methodMap at: sel put: meth].<br>
Morph selectorsDo:[:sel| Morph addSelector: sel withMethod: swapper].<br>
<br>
At this point the only overhead you have is what's in the (single) MethodSwapper instance and even with a most naive implementation (looking up the index by selector) you'd have 8 bytes per method in your image which I suspect is well below 5% of the image size.<br>
</blockquote><div><br>But that's exactly what I want to avoid. I can even create the proxy class compact, and I would have 4 bytes if I serach by equality the compiledMethod in all classes.<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
And then of course you can start *really* looking at getting the size down. Did you know that Dan once did a very neat hack where he replaced all symbols with integers? Works great and if you do that you not only reclaim the space for the symbols but also don't need a lookup at all :-)<br>
<br></blockquote><div><br>Yes, I know that. I even saw that the VM was "prepare" to support SmallIntegers as key in the MethodDict. However, I have 2 questions for that approach:<br><br>- Is that transparent for the develope? I mean, are we still able to do things like MyClass >> #foo ? or we are force to do MyClass methodDict at: 42 ?<br>
<br>- To get those symbols garbageCollected, I guess I need to compact the symbol table all the time. <br><br>Thanks<br><br>Mariano<br></div></div>