<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Dec 13, 2013 at 11:38 AM, David T. Lewis <span dir="ltr">&lt;<a href="mailto:lewis@mail.msen.com" target="_blank">lewis@mail.msen.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Fri, Dec 13, 2013 at 06:37:19PM +0000, Frank Shearar wrote:<br>
&gt; On 13 December 2013 16:59, Chris Muller &lt;<a href="mailto:asqueaker@gmail.com">asqueaker@gmail.com</a>&gt; wrote:<br>
&gt; &gt;&gt; &gt; Dave, the only thing I don&#39;t like about this change is I thought we said<br>
&gt; &gt;&gt; &gt; we<br>
&gt; &gt;&gt; &gt; were going to migrate away from using the Dictionary API on Smalltalk.<br>
&gt; &gt;&gt; &gt; This<br>
&gt; &gt;&gt; &gt; was back when Andreas and community came up with the idea of the wrapped<br>
&gt; &gt;&gt; &gt; &#39;globals&#39;.<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; I think it would be better to use<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt;     (Smalltalk classNamed: #Paragraph) ifNotNil: [ : classParagraph |<br>
&gt; &gt;&gt; &gt; ... ]<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; otherwise we can never find all the places where we try to do logical<br>
&gt; &gt;&gt; &gt; access<br>
&gt; &gt;&gt; &gt; to class.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; In which case we should have #bindingOf:ifPresent, or similar. An API<br>
&gt; &gt;&gt; that forces you to acknowledge the potential not-there-ness of a thing<br>
&gt; &gt;&gt; is far preferable, in my book, to a separate-check-then-use. The<br>
&gt; &gt;&gt; latter also have fun time-of-check-time-of-use issues in a<br>
&gt; &gt;&gt; multiprocessing environment... which we happen to have.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; I used to prefer Potential-not-thereness API&#39;s in &quot;my book&quot; too until one<br>
&gt; &gt; day I found it unnecessarily expanding and complicating API&#39;s.  Users of<br>
&gt; &gt; API&#39;s must write defensive code anyway.  The ifNotNil: approach allows a<br>
&gt; &gt; simpler API that can provide either existence-testing OR access via one<br>
&gt; &gt; simple message rather than two.<br>
&gt; &gt;<br>
&gt; &gt; As for &quot;fun time-of-check-time-of-use issues&quot; that&#39;s just bunk.  You think<br>
&gt; &gt; the ifPresent: method doesn&#39;t do the same ifNotNil: check or could not be<br>
&gt; &gt; interrupted?  Unless you&#39;re thinking to put a Mutex into SmalltalkImage to<br>
&gt; &gt; make it &quot;thread safe&quot;.  What, for background unloading?  If you need that<br>
&gt; &gt; guard it from the outside.<br>
&gt; &gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; &gt;&gt; &gt;&gt; Well, that definitely stops a DNU and such when running in Morphic<br>
&gt; &gt;&gt; &gt;&gt; &gt;&gt; (yay!) but it still won&#39;t work in a non-MVC/Morphic world. That&#39;s<br>
&gt; &gt;&gt; &gt;&gt; &gt;&gt; when<br>
&gt; &gt;&gt; &gt;&gt; &gt;&gt; you accused me of overengineering, David :)<br>
&gt; &gt;&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt;&gt; &gt; Yes you&#39;re right, I meant that with a smiley, sorry :)<br>
&gt; &gt;&gt; &gt;&gt;<br>
&gt; &gt;&gt; &gt;&gt; I knew there was something of a smiley in there :) I just meant that<br>
&gt; &gt;&gt; &gt;&gt; if we want to preserve the Transcripter&#39;s emergencyEvaluator we would<br>
&gt; &gt;&gt; &gt;&gt; need this &quot;complexity&quot; because we&#39;d need an emergencyEvaluator per UI<br>
&gt; &gt;&gt; &gt;&gt; framework.<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; -1.  Please be more conservative and lazy about putting new<br>
&gt; &gt;&gt; &gt; code/elements<br>
&gt; &gt;&gt; &gt; into the system.  TSTTCPW demands that we don&#39;t start building out<br>
&gt; &gt;&gt; &gt; infrastructure for new UI frameworks until those frameworks are being<br>
&gt; &gt;&gt; &gt; pushed<br>
&gt; &gt;&gt; &gt; into existence and such a factoring is actually NEEDED.  Please only<br>
&gt; &gt;&gt; &gt; write<br>
&gt; &gt;&gt; &gt; code for the &quot;now&quot; not for some &quot;potential future&quot;.  10 years could go<br>
&gt; &gt;&gt; &gt; by<br>
&gt; &gt;&gt; &gt; with no new graphical frameworks and then someone looking at your<br>
&gt; &gt;&gt; &gt; class-hierarchy will regard it as &quot;cruft&quot;.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; (a) The emergency evaluator&#39;s there _for good reason_.<br>
&gt; &gt;&gt; (b) We HAVE two UI frameworks right now. They&#39;re part of the standard<br>
&gt; &gt;&gt; image.<br>
&gt; &gt;&gt; (c) &quot;Stripped&quot; 4.5 base images do not have ST80, so this code is broken.<br>
&gt; &gt;&gt; (d) To fix it _requires_ two separate UI implementations because of point<br>
&gt; &gt;&gt; (b).<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Unless you&#39;re specifically saying &quot;we should not have an emergency<br>
&gt; &gt;&gt; evaluator&quot;. But then say that, not -1 me suggesting a way to fix<br>
&gt; &gt;&gt; something broken. (Please feel free to suggest a simpler way of<br>
&gt; &gt;&gt; solving the problem that works for all CURRENT UI frameworks.)<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Ok, all I&#39;m saying is, part of your work is about reorganizing, and other<br>
&gt; &gt; parts are about engineering new functionality just to accomodate the<br>
&gt; &gt; reorganizations.  (What&#39;s worse is when you want to remove functionality<br>
&gt; &gt; just to accomodate but I&#39;ll be lazy about addressing that).<br>
&gt; &gt;<br>
&gt; &gt; Whenever there&#39;s an arbitrary piece of new functionality (e.g.,<br>
&gt; &gt; Morphic-based emergency evaluator) just to avoid crossing package boundaries<br>
&gt; &gt; you don&#39;t want to cross, then engineering &quot;solutions&quot; to that I think could<br>
&gt; &gt; end up being code for ghost situations.<br>
&gt; &gt;<br>
&gt; &gt; Because there has been no concrete vision/requirement for a Morphic-based<br>
&gt; &gt; emergency evaluator (EE).  EE is a relatively rare occurrence (one would<br>
&gt; &gt; hope!) and for developers only.  But developers typically use _development<br>
&gt; &gt; images_ which tend to be fat, not &quot;Stripped&quot;, and so might probably include<br>
&gt; &gt; ST80 anyway..?  The cases seem pretty uncertain and so that&#39;s why I&#39;m<br>
&gt; &gt; questioning engineering new stuff like this into the image.<br>
&gt;<br>
&gt; This is a bug. It needs to be fixed. It&#39;s not new functionality,<br>
&gt; unless by &quot;new&quot; you mean &quot;it actually works in Morphic&quot;.<br>
&gt;<br>
&gt; &gt; Particularly we&#39;re at a time when I want to get 4.5 out the door, so that<br>
&gt; &gt; may be contributing to my aversion to new engineerings.  I ask you to at<br>
&gt; &gt; least consider simple stub error-handling in situations where<br>
&gt; &gt; packages/functionality would be unfulfilled.  We can fill in implementations<br>
&gt; &gt; later, if needed, but at least you&#39;ll have made the structure.<br>
&gt;<br>
&gt; So you&#39;ll be happy with<br>
&gt;<br>
&gt; * move the current EE to ST-80,<br>
&gt; * fix the EE for Morphic (at some point),<br>
&gt; * add an AppRegistry for the EE (which is just a hook like ToolSet and<br>
&gt; friends, so we don&#39;t tangle the two UI frameworks we have so carefully<br>
&gt; untangled)<br>
&gt;<br>
<br>
</div></div>No.<br>
<div class="im"><br>
&gt; ? If there&#39;s a simpler solution, I&#39;m all ears.<br>
&gt;<br>
<br>
</div>Hopefully there is a simpler solution, aalthough I cannot look into it right now.<br></blockquote><div><br></div><div>Do we have a place-holder?  It is much better to have a string appear in top-left that says &quot;The Morphic emergency evaluator is current;y unimplemented.  this is an oversight it is intended to fix.&quot; than have the system lock-up silently.  I&#39;m worried that in a few weeks or months we&#39;ll have completely orgotten about the Morphic EE and it&#39;ll present a mystery when it is needed.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Dave<br>
<br>
&gt; frank<br>
<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>best,<div>Eliot</div>
</div></div>