<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    Hi Szabolcs,<br>
    <br>
    On 8/15/2023 4:18 PM, Szabolcs Komáromi via Cuis-dev wrote:
    <blockquote
      cite="mid:82cba8f9-0ce8-4fd5-a6e6-b9303968416c@app.fastmail.com"
      type="cite">
      <title></title>
      <style type="text/css">
p.MsoNormal,p.MsoNoSpacing{margin:0}</style>
      <div>Hi Juan, Ken,<br>
      </div>
      <div><br>
      </div>
      <div>Thanks for the explanation. I'm constantly confused, at least
        for the time being, by the dichotomy of Smalltalk's "operating
        systemness" and its implementation as an application. <br>
      </div>
      <div><br>
      </div>
      <div>If Smalltalk would be an operating system it would be normal
        to have multiple GUI-threads. But Smalltalk is an application
        thus it is perfectly normal to have only one GUI-thread. If i
        understand correctly.<br>
      </div>
      <div><br>
      </div>
      <div>I'm currently reading John Maloney's papers about Morphic to
        better understand what Morphic is. If I'm correct Morphic at its
        core is an abstract idea about a GUI framework that emphasizes
        concreteness, liveness, and uniformity. <br>
      </div>
      <div><br>
      </div>
      <div>When I asked my question what was in my mind is Apple's
        struggle with QuickDraw and the classic Mac OS's basic design
        what prohibited preemptive multitasking during the 1990s. I
        thought maybe there is something similar about Morphic. A
        somewhat better question would have been whether Cuis' Morphic
        implementation is inherently not tread safe or every possible
        implementation of Morphic wouldn't be be thread safe. But this
        is also a silly question if Morphic is an abstract idea. <br>
      </div>
      <div><br>
      </div>
      <div>Regards,<br>
      </div>
      <div>Szabolcs<br>
      </div>
    </blockquote>
    <br>
    Smalltalk is a bit like an OS and a bit like an application. The
    problem with classic MacOS (and also with Windows and OS/2 at that
    time) was that an OS is assumed to have strict separation between
    the applications it runs, and this was not entirely true.<br>
    <br>
    Cuis can have many "application like" GUIs running at the same time,
    but they are not separate applications, as they share the object
    memory. They also share the GUI Process. This is where Cuis is _not_
    like an operating system, at least not a conventional one.<br>
    <br>
    It is possible, though, to run various WorldMorph at the same time.
    Then each runs in its own GUI Process, and they won't share state at
    all. But if you really want strong separation between Cuis
    applications, it is best to run each in its own Cuis image.<br>
    <br>
    Hope this helps.<br>
    <br>
    Cheers,<br>
    <br>
    <blockquote
      cite="mid:82cba8f9-0ce8-4fd5-a6e6-b9303968416c@app.fastmail.com"
      type="cite">
      <div>On Mon, Aug 14, 2023, at 00:53, Juan Vuletich wrote:<br>
      </div>
      <blockquote type="cite" id="qt" style="">
        <div>Hi Szabolcs,<br>
        </div>
        <div> <br>
        </div>
        <div> On 8/13/2023 12:54 PM, Szabolcs Komáromi via Cuis-dev
          wrote:<br>
        </div>
        <blockquote
          cite="mid:9d8289cf-e762-44ed-b8d2-1acc9d36eebc@app.fastmail.com"
          type="cite">
          <div>Hi,<br>
          </div>
          <div><br>
          </div>
          <div>I'm reading back <span>through the mailing list to gain
              some knowledge. I found this comment from Phil:</span><br>
          </div>
          <div><a moz-do-not-send="true"
href="https://lists.cuis.st/mailman/archives/cuis-dev/2021-August/003850.html">https://lists.cuis.st/mailman/archives/cuis-dev/2021-August/003850.html</a><br>
          </div>
          <blockquote type="cite">
            <pre>If that is the issue, I think there's a larger problem to be solved.
Morphic is inherently not thread safe so you're dealing with an intractable
problem (short of re-architecting Morphic.)    Other than marking a morph
for redraw, anything else touching Morphic from a background process needs
to be wrapped in UISupervisor whenUIinSafeState: [].

</pre>
          </blockquote>
          <div><br>
          </div>
          <div>What makes Morphic inherently not thread safe? Why the
            community didn't addressed this shortcoming when the Morphic
            framework was reachitected anyway?<br>
          </div>
          <div><br>
          </div>
          <div>Regards,<br>
          </div>
          <div>Szabolcs<br>
          </div>
        </blockquote>
        <div><br>
        </div>
        <div>The usual wording would be "single threaded". Morphic is
          single threaded, like most (all?) GUI frameworks. You can
          google "UI thread" or "GUI thread" and see.<br>
        </div>
        <div> <br>
        </div>
        <div> Synchronization and data protection between threads (we
          call them Processes for historical reasons) as required is the
          responsibility of the application programmer, like in any
          environment, except maybe functional languages and some other
          special kinds.<br>
        </div>
        <div> <br>
        </div>
        <div> In the mail thread you mention, this was conflated with a
          similar issue if stepping messages modified Morphic data
          structures. There was only a single Process involved, so it
          was about a bug, and not about thread safety. I believe the
          bug was fixed.<br>
        </div>
        <div> <br>
        </div>
        <div> So, I don't think we need to redesign Morphic to make it
          "thread safe", although anybody is welcome to experiment if so
          inclined. What we do need to keep doing is fixing bugs,
          defects and limitations as we face them.<br>
        </div>
        <div> <br>
        </div>
        <div> Hope this helps.<br>
        </div>
        <pre class="qt-moz-signature" cols="72">-- 
Juan Vuletich
cuis.st
github.com/jvuletich
researchgate.net/profile/Juan-Vuletich
independent.academia.edu/JuanVuletich
patents.justia.com/inventor/juan-manuel-vuletich
linkedin.com/in/juan-vuletich-75611b3
twitter.com/JuanVuletich
</pre>
      </blockquote>
      <div><br>
      </div>
    </blockquote>
    <br>
    <br>
    <pre class="moz-signature" cols="72">-- 
Juan Vuletich
cuis.st
github.com/jvuletich
researchgate.net/profile/Juan-Vuletich
independent.academia.edu/JuanVuletich
patents.justia.com/inventor/juan-manuel-vuletich
linkedin.com/in/juan-vuletich-75611b3
twitter.com/JuanVuletich</pre>
  </body>
</html>