<br><br><div class="gmail_quote">On Thu, Mar 14, 2013 at 10:46 AM, Nicolas Cellier <span dir="ltr">&lt;<a href="mailto:nicolas.cellier.aka.nice@gmail.com" target="_blank">nicolas.cellier.aka.nice@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">2013/3/14 Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt;:<br>
<div><div class="h5">&gt;<br>
&gt;<br>
&gt; On Thu, Mar 14, 2013 at 3:00 AM, Frank Shearar &lt;<a href="mailto:frank.shearar@gmail.com">frank.shearar@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; On 13 March 2013 22:41, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Tue, Mar 12, 2013 at 2:13 PM, Nicolas Cellier<br>
&gt;&gt; &gt; &lt;<a href="mailto:nicolas.cellier.aka.nice@gmail.com">nicolas.cellier.aka.nice@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; It seems that this one would pass after a Compiler recompileAll, maybe<br>
&gt;&gt; &gt;&gt; we should add some postInstall action somewhere after environments<br>
&gt;&gt; &gt;&gt; changes...<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Yes, but a simple recompile will result in lots of unbound methods.  We<br>
&gt;&gt; &gt; need<br>
&gt;&gt; &gt; to do something more principled that I thought ReleaseBuilder did.<br>
&gt;&gt; &gt; Frank,<br>
&gt;&gt; &gt; you were working on this right?<br>
&gt;&gt;<br>
&gt;&gt; Yes, but this is _before_ the ReleaseBuilderFor4dot5 kicks in. The<br>
&gt;&gt; tests are failing in the SqueakTrunk job, and it&#39;s only<br>
&gt;&gt; ReleaseSqueakTrunk that does all this (specifically, `Compile<br>
&gt;&gt; recompileAll`). And of course it&#39;s a one-way trip;<br>
&gt;&gt; ReleaseSqueakTrunk&#39;s artifact isn&#39;t fed back into SqueakTrunk. (And it<br>
&gt;&gt; shouldn&#39;t, because ReleaseSqueakTrunk is supposed to take an<br>
&gt;&gt; ever-shrinking trunk core and add expected goodies to produce a<br>
&gt;&gt; standard image.)<br>
&gt;&gt;<br>
&gt;&gt; Er, unless I miss the point: are you asking if we do any better than<br>
&gt;&gt; `Compiler recompileAll`?<br>
&gt;<br>
&gt;<br>
&gt; No.  I&#39;m saying that if an update causes the need for a recompilation then<br>
&gt; we need to do better than Compiler recompileAll because the naive Compiler<br>
&gt; recompileAll creates lots of unbound methods.  We need to follow Compiler<br>
&gt; recompileAll with the relevant release magic to restart processes holding<br>
&gt; onto now obsolete methods etc.  So that release magic ought to be in the<br>
&gt; base image as a facility.  e.g. Smalltalk recompileAll might be much smarter<br>
&gt; than Compiler recompileAll.<br>
<br>
</div></div>Note that not only processes might point to an unbound CompiledMethod,<br>
every object pointing to a blockClosure does, and that may include<br>
some GUI elements.<br></blockquote><div><br></div><div>Exactly.  e.g. in the Squeak4.3 base image:</div><div><br></div><div><div>CompiledMethod allInstances select:</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>[:m|</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>m ~~ thisContext method</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>and: [m methodClass isNil</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>or: [m selector isNil</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>or: [m ~~ (m methodClass &gt;&gt; m selector)]]]]</div><div>=&gt; #()</div></div><div><br></div><div><div>But</div><div><br></div><div>Compiler recompileAll.</div>
<div>Smalltalk garbageCollect.</div><div>((CompiledMethod allInstances select:</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>[:m|</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m ~~ thisContext method</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>and: [m methodClass isNil</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>or: [m selector isNil</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>or: [m ~~ (m methodClass &gt;&gt; m selector)]]]]) asSortedCollection: [:m1 :m2| m1 methodClass name &lt; m2 methodClass name or: [m1 methodClass = m2 methodClass and: [m1 selector &lt; m2 selector]]]) asArray</div>
<div>=&gt; {(BlockClosure&gt;&gt;#newProcess &quot;a CompiledMethod(3143)&quot;) . (BlockClosure&gt;&gt;#on:do: &quot;a CompiledMethod(2372)&quot;) . (Compiler&gt;&gt;#evaluate:in:to:notifying:ifFail:logged: &quot;a CompiledMethod(3380)&quot;) . (Compiler&gt;&gt;#translate:noPattern:ifFail: &quot;a CompiledMethod(718)&quot;) . (Delay class&gt;&gt;#runTimerEventLoop &quot;a CompiledMethod(84)&quot;) . (Delay class&gt;&gt;#startTimerEventLoop &quot;a CompiledMethod(3416)&quot;) . (EventSensor&gt;&gt;#eventTickler &quot;a CompiledMethod(350)&quot;) . (EventSensor&gt;&gt;#installEventTickler &quot;a CompiledMethod(3857)&quot;) . (ExternalDropHandler class&gt;&gt;#registerStandardExternalDropHandlers &quot;a CompiledMethod(2523)&quot;) . (GradientFillStyle class&gt;&gt;#initPixelRampCache &quot;a CompiledMethod(1023)&quot;) . (HandMorph&gt;&gt;#handleEvent: &quot;a CompiledMethod(2487)&quot;) . (HandMorph&gt;&gt;#processEvents &quot;a CompiledMethod(3865)&quot;) . (HandMorph&gt;&gt;#sendEvent:focus:clear: &quot;a CompiledMethod(3217)&quot;) . (HandMorph&gt;&gt;#sendFocusEvent:to:clear: &quot;a CompiledMethod(2182)&quot;) . (HandMorph&gt;&gt;#sendKeyboardEvent: &quot;a CompiledMethod(1440)&quot;) . (InputSensor&gt;&gt;#installInterruptWatcher &quot;a CompiledMethod(145)&quot;) . (InputSensor&gt;&gt;#userInterruptWatcher &quot;a CompiledMethod(2885)&quot;) . (KeyboardEvent&gt;&gt;#sentTo: &quot;a CompiledMethod(2261)&quot;) . (Morph&gt;&gt;#handleEvent: &quot;a CompiledMethod(2284)&quot;) . (Morph&gt;&gt;#handleFocusEvent: &quot;a CompiledMethod(2176)&quot;) . (PasteUpMorph&gt;&gt;#becomeActiveDuring: &quot;a CompiledMethod(2232)&quot;) . (PasteUpMorph&gt;&gt;#doOneCycle &quot;a CompiledMethod(2078)&quot;) . (ProcessBrowser class&gt;&gt;#registerWellKnownProcess:label:allowStop:allowDebug: &quot;a CompiledMethod(3997)&quot;) . (ProcessBrowser class&gt;&gt;#registerWellKnownProcesses &quot;a CompiledMethod(1889)&quot;) . (ProcessorScheduler class&gt;&gt;#idleProcess &quot;a CompiledMethod(1512)&quot;) . (ProcessorScheduler class&gt;&gt;#startUp &quot;a CompiledMethod(2171)&quot;) . (Project class&gt;&gt;#spawnNewProcess &quot;a CompiledMethod(510)&quot;) . (ScrollBar class&gt;&gt;#createArrowImagesCache &quot;a CompiledMethod(2003)&quot;) . (ScrollBar class&gt;&gt;#createBoxImagesCache &quot;a CompiledMethod(2713)&quot;) . (SequenceableCollection&gt;&gt;#do: &quot;a CompiledMethod(4002)&quot;) . (ServiceAction class&gt;&gt;#id:text:button:description:action: &quot;a CompiledMethod(3545)&quot;) . (ServiceAction class&gt;&gt;#text:button:description:action: &quot;a CompiledMethod(2391)&quot;) . (ServiceCategory class&gt;&gt;#text:button:description: &quot;a CompiledMethod(3931)&quot;) . (ServiceShortcuts class&gt;&gt;#insertPrefShortcut: &quot;a CompiledMethod(3566)&quot;) . (SmalltalkImage&gt;&gt;#installLowSpaceWatcher &quot;a CompiledMethod(522)&quot;) . (SmalltalkImage&gt;&gt;#lowSpaceWatcher &quot;a CompiledMethod(832)&quot;) . (StandardToolSet class&gt;&gt;#codeCompletionAround:textMorph:keyStroke: &quot;a CompiledMethod(1053)&quot;) . (TextEditor&gt;&gt;#dispatchOnKeyboardEvent: &quot;a CompiledMethod(3157)&quot;) . (TextEditor&gt;&gt;#evaluateSelectionAndDo: &quot;a CompiledMethod(4000)&quot;) . (TextEditor&gt;&gt;#keyStroke: &quot;a CompiledMethod(332)&quot;) . (TextEditor&gt;&gt;#printIt &quot;a CompiledMethod(815)&quot;) . (TextEditor&gt;&gt;#printIt: &quot;a CompiledMethod(1977)&quot;) . (TextMorph&gt;&gt;#handleInteraction:fromEvent: &quot;a CompiledMethod(933)&quot;) . (TextMorph&gt;&gt;#handleKeystroke: &quot;a CompiledMethod(2806)&quot;) . (TextMorph&gt;&gt;#keyStroke: &quot;a CompiledMethod(3260)&quot;) . (TextMorphForEditView&gt;&gt;#handleInteraction:fromEvent: &quot;a CompiledMethod(1848)&quot;) . (TextMorphForEditView&gt;&gt;#keyStroke: &quot;a CompiledMethod(296)&quot;) . (TheWorldMainDockingBar&gt;&gt;#showWelcomeText:label:in: &quot;a CompiledMethod(3390)&quot;) . (TheWorldMainDockingBar&gt;&gt;#toggleFullScreenOn: &quot;a CompiledMethod(1194)&quot;) . (ToolSet class&gt;&gt;#codeCompletionAround:textMorph:keyStroke: &quot;a CompiledMethod(3438)&quot;) . (VariableNode class&gt;&gt;#initialize &quot;a CompiledMethod(2215)&quot;) . (Vocabulary class&gt;&gt;#newPublicVocabulary &quot;a CompiledMethod(1353)&quot;) . (WeakArray class&gt;&gt;#finalizationProcess &quot;a CompiledMethod(1063)&quot;) . (WeakArray class&gt;&gt;#restartFinalizationProcess &quot;a CompiledMethod(3742)&quot;) . (WeakRegistry&gt;&gt;#installFinalizer &quot;a CompiledMethod(78)&quot;) . (WorldMenuProvider&gt;&gt;#closeTopWindow &quot;a CompiledMethod(2095)&quot;) . (WorldMenuProvider&gt;&gt;#createNewService &quot;a CompiledMethod(3640)&quot;) . (WorldMenuProvider&gt;&gt;#helpOnServices &quot;a CompiledMethod(2200)&quot;) . (WorldMenuProvider&gt;&gt;#nextWindow &quot;a CompiledMethod(2644)&quot;) . (WorldMenuProvider&gt;&gt;#preferencesBrowser &quot;a CompiledMethod(2193)&quot;) . (WorldMenuProvider&gt;&gt;#rebuildRegistry &quot;a CompiledMethod(2191)&quot;) . (WorldMenuProvider&gt;&gt;#servicesBrowser &quot;a CompiledMethod(1893)&quot;) . (WorldState&gt;&gt;#doOneCycleFor: &quot;a CompiledMethod(817)&quot;) . (WorldState&gt;&gt;#doOneCycleNowFor: &quot;a CompiledMethod(3386)&quot;) . (WorldState&gt;&gt;#handsDo: &quot;a CompiledMethod(2792)&quot;) . (WorldState&gt;&gt;#stepListSortBlock &quot;a CompiledMethod(2016)&quot;)}</div>
</div><div><br></div><div><br></div><div>We want e.g.</div><div><br></div><div><div><span class="Apple-style-span">Smalltalk </span>recompileAll<span class="Apple-style-span">.</span></div><div>(CompiledMethod allInstances select:</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>[:m|</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>m ~~ thisContext method</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>and: [m methodClass isNil</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>or: [m selector isNil</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>or: [m ~~ (m methodClass &gt;&gt; m selector)]]]]</div></div>
<div>=&gt; #()</div><div><br></div><div>But I don&#39;t see how to get near this:</div><div>1. lots of GUI stuff can only be cleared by closing windows.  Can we export the morphs and bring them back in?</div><div>2. (quite easy) we need to save and restart to restart a number of processes</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="HOEnZb"><font color="#888888"><br>
Nicolas<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; frank<br>
&gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; <a href="http://build.squeak.org/job/SqueakTrunk/223/testReport/Tests.Compiler/MethodHighlightingTests/testMethodHighlighting/" target="_blank">http://build.squeak.org/job/SqueakTrunk/223/testReport/Tests.Compiler/MethodHighlightingTests/testMethodHighlighting/</a><br>

&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Nicolas<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; --<br>
&gt;&gt; &gt; best,<br>
&gt;&gt; &gt; Eliot<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; best,<br>
&gt; Eliot<br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>best,<div>Eliot</div>