<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Thanks, Jecel. I did look very quickly at the paper, and I completely agree with all of your comments.<div>We'll just have to make sure that conferences provide soft foods for the static typing people;-)</div><div>Thanks for watching that talk!</div><div><br></div><div>- David</div><div><br></div><div><br><div><div>On Sep 30, 2011, at 10:50 AM, Jecel Assumpcao Jr. wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">













<div style="background-color: #fff;">
<span style="display:none"> </span>



    <div id="ygrp-text"><p>David Ungar wrote:<br>
<br>
> Thanks, guys. I'll read the Ego paper.<br>
<br>
I only skimmed through it, but it seems to be another case of "Self as I<br>
imagine it from reading the papers" instead of "Self as it really is<br>
from using it". The idea of dynamic inheritance using data parent slots<br>
is not mentioned at all, but the focus is on using _AddSlots: and<br>
friends to change objects during an application's execution. It<br>
certainly would work, but it would also defeat all the optimizations<br>
built into the VM.<br>
<br>
This style of programming is used a bit in Javascript and the people,<br>
like Lars, who have recently done high performance implementations of<br>
that language have had to deal with this problem. So there is not reason<br>
why a new implementation of Self couldn't handle lots of _AddSlots:, but<br>
it hasn't been the focus so far.<br>
<br>
In fact, that is also true for dynamic inheritance. If you use<br>
assignable parent slots then you will take a huge hit in terms of<br>
performance. When Urs Hölzle was asking for application in Self to test<br>
the compilers he had created for 3.0 (and which we still use today) I<br>
sent him my CMOS simulator but it was useless for him exactly because I<br>
had used dynamic inheritance. In my case it was just a nasty hack to<br>
make the Self REPL work as a nice command line for my simulator. The one<br>
example I know of that does use assignable parents as intended is the<br>
tree objects in collections.<br>
<br>
Given how dynamic inheritance is actually used (to switch among a small<br>
number of constant objects rather than point to arbitrary ones) I came<br>
up with an implementation were an object with a dynamic parent would<br>
have several maps, one for each parent (up to five, for example). When<br>
you assign to the parent slot, you switch maps as a side effect.<br>
<br>
> A while back I gave a keynote at OOPSLA on the role of paradox in language<br>
> design.In general, I believe that better type systems are worse--depending<br>
> on the context. One loses the power of ambiguity. However, if you are<br>
> sending code to Mars, it's a good tradeoff. Anyway, I'll have to read the paper.<br>
<br>
I watched that talk - you had some static typing people grinding their<br>
teeth :-) Back in 2003 Java was at its zenith and stuff like Ruby and<br>
Javascript were still being ignored. By a coincidence, I had started<br>
using "sending code to Mars" in the mid 1990s as an example were<br>
traditional software engineering practices would be a good idea in<br>
contrast to other applications with GUIs where you might get better<br>
results through exploratory programming (we didn't have the term "agile<br>
programming" yet, though we already had some of the methods like Scrum).<br>
<br>
-- Jecel<br>
<br>
</p>

    </div>
     

    

</div>



<!-- end group email -->

</blockquote></div><br></div></body></html>