<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi David,<div class=""><br class=""></div><div class="">If I may butt into the conversation, it seems my slightly provocative tag-line for Objective-S has accomplished it purpose of being provocative, although of course I was going more for provoking curiosity as to why someone would make such an obviously and preposterously absurd claim and thus click the more info link, rather than anger.</div><div class=""><br class=""></div><div class="">So I might have to change that tag-line or couch it in some mitigating language, it was a spur-of-the moment inspiration.</div><div class=""><br class=""></div><div class="">The claim is certainly not intended to make Objective-S seem more grandiose than it is, because it certainly is very, very far from being grandiose or even grand, nor is it intended to denigrate what came before.  If that is what comes across, then it not just fails to communicate, but actively miscommunicates.</div><div class=""><br class=""></div><div class="">Coming to the claim:  I do believe it is actually true, and I am still figuring out how to properly communicate the claim, my most recent public attempt was here:</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">      </span><a href="https://2020.programming-conference.org/details/salon-2020-papers/5/Can-Programmers-Escape-the-Gentle-Tyranny-of-call-return-" class="">https://2020.programming-conference.org/details/salon-2020-papers/5/Can-Programmers-Escape-the-Gentle-Tyranny-of-call-return-</a></div><div class=""><br class=""></div><div class="">It was only marginally successful.  So apologies for making you yet another guinea pig for me trying to figure out how to communicate this idea.</div><div class=""><br class=""></div><div class=""><b class="">The Problem: Architectural Mismatch</b></div><div class="">------</div><div class=""><br class=""></div><div class="">The crux is that all mainstream and virtually all non-mainstream languages aren’t really general purpose, though we obviously think of them and use them that way.  They are DSLs for the domain of algorithms, for computing answers based on some inputs.  Obviously with many variations, but the essence is the same.  a := f(x).   Or a := x.f().  Or  a: x f.  And the algorithmic mechanism we have for computing answers is also our primary <i class="">linguistic</i><span style="font-style: normal;" class=""> </span>mechanism for structuring our programs: the procedure/function/method.  (Objects/classes/prototypes/modules are secondary mechanisms).</div><div class=""><br class=""></div><div class="">(see also:  the ALGOrithmic Language, predecessor to most of what we have, and allegedly an improvement on much of that).  </div><div class=""><br class=""></div><div class="">As long as our problems were also primarily algorithmic, this was perfectly fine.  But they no longer are, they are shifting more and more away from being algorithmic.  </div><div class=""><br class=""></div><div class="">For example, if you look at how we program user interfaces today, there hasn’t really been much progress since the early 80s or 90s. Arguably things have actually taken huge leaps backwards in many areas. I found this very puzzling, and the common explanation of “kids these days” seemed a bit too facile.  The problem became a bit clearer when I discovered Stéphane Chatty’s wonderful, and slightly provocatively named paper "<i class="">Programs = Data + Algorithms + Architecture: consequences for interactive software engineering"</i><span style="font-style: normal;" class="">.</span></div><div class=""><span style="font-style: normal;" class=""><br class=""></span></div><div class=""><span style="font-style: normal;" class=""><span class="Apple-tab-span" style="white-space:pre">      </span></span><a href="https://dl.ifip.org/db/conf/ehci/ehci2007/Chatty07.pdf" class="">https://dl.ifip.org/db/conf/ehci/ehci2007/Chatty07.pdf</a></div><div class=""><br class=""></div><div class="">He explains very well, and compellingly, how our programming languages are architecturally mismatched for writing GUIs.  </div><div class=""><br class=""></div><div class="">Once you see it, it becomes really hard to un-see, and this problem of algorithmic programming languages, or in the architectural vernacular I prefer, <i class="">call/return</i><span style="font-style: normal;" class=""> programming languages pops up </span><i class="">everywhere.</i></div><div class=""><br class=""></div><div class=""><span style="font-style: normal;" class="">Or how Guy Steele put it:</span></div><div class=""><span style="font-style: normal;" class=""><br class=""></span></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">"Another weakness of procedural and functional programming is that their viewpoint assumes a process by which "inputs" are transformed into "outputs"; there is equal concern for correctness and for termination (and proofs thereof). But as we have connected millions of computers to form the Internet and the World Wide Web, as we have caused large independent sets of state to interact–I am speaking of databases, automated sensors, mobile devices, and (most of all) people–in this highly interactive, distributed setting, the procedural and functional models have failed, another reason why objects have become the dominant model. Ongoing behavior, not completion, is now of primary interest."</div></blockquote><div class=""><br class=""></div><div class=""><br class=""></div><br class=""><div class=""><i class=""><br class=""></i></div><div class=""><div class=""><b class="">OO: The "Better Old Thing"</b></div><div class="">------</div></div><div class=""><br class=""></div><div class="">So what about OO in general, and Smalltalk and Self in particular, surely we have done better, haven’t we?  Well yes, sort of.  Continuing with Guy Steele again:</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">"Indeed, object-oriented programming had its origins in efforts to simulate the ongoing behavior of interacting real-world entities–thus the programming language SIMULA was born. [..] </div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">Now, objects don't solve all the problems of programming. For example, they don't provide polymorphic type abstraction (that is, generic types). They don't provide syntactic abstraction (that is, macros). Procedural programming still has its place in the coding of methods. But to say that objects have failed because they don't solve all possible problems is like saying carbohydrates have failed because you can't live on pure sugar. Object-oriented programming is like money, as the old joke has it: It's not everything, but it's way ahead of whatever's in second place.”</div></div></blockquote><div class=""><br class=""></div><div class=""><br class=""></div><div class="">And of course we all like to repeat Alan’s famous quip from OOPSLA ’97:  ""I made up the term 'object-oriented', and I can tell you I didn't have C++ in mind.”  Of course he went on to say:  “I have many of the same feelings about Smalltalk”.  </div><div class=""><br class=""></div><div class="">I don’t know what Alan had in mind, but to me the core issue is the one in the middle of Guy Steele’s paragraph above:  "Procedural programming still has its place in the coding of methods.”  I would contend that “coding methods” is our primary coding task, so “has its place in” resolves to “is the majority of"  William R. Cook explained the centrality of procedural abstraction in great detail in "<i class="">On Understanding Data Abstraction, Revisited”.</i></div><div class=""><i class=""><br class=""></i></div><div class=""><i class=""><span class="Apple-tab-span" style="white-space:pre">    </span></i><span style="font-style: normal;" class=""><a href="https://www.cs.utexas.edu/~wcook/Drafts/2009/essay.pdf" class="">https://www.cs.utexas.edu/~wcook/Drafts/2009/essay.pdf</a></span></div><div class=""><span style="font-style: normal;" class=""><br class=""></span></div><div class="">However, these methods that we primarily code and that are the core of our object-oriented abstraction inherited all the problems of procedural programming that Guy Steele pointed out above.  Which leads to the following problem, explained by Andrew Black:</div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><br class=""></div><div class="">What I’ve learned from watching this process is that the program’s runtime behaviour is a powerful teaching tool. This is obvious if you view programs as existing to control computers, but perhaps less obvious if you view programs as static descriptions of a system, like a set of mathematical equations. As Dahl and Nygaard discovered, it is a program’s behaviour, not the program itself, that models the real-world system. The program’s text is a meta-description of the program behaviour, and it is not always easy to infer the behaviour from the meta-description.</div></blockquote><div class=""><br class=""></div><div class="">Experienced OO practitioners know this, of course, which is why we insist on immersive programming environments that let us interact with those actual objects that encode the program’s behavior.  And we pat ourselves on the back and look down on those unenlightened Java programmers who do class-oriented programming of dead code in their text editors and Just Don’t Get It™.  With some justification, yes, but to me it seems like our victory lap is a bit premature, because we haven’t actually solved the problem, we “just” have a good workaround.</div><div class=""><br class=""></div><div class="">This problem of the gap between the text and a program's run-time behavior is not new, it was remarked on quite some time ago:</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">My first remark is that, although the programmer's activity ends</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">when he has constructed a correct program, the process taking place</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">under control of his program is the true subject matter of his</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">activity, for it is this process that has to accomplish the</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">desired effect; it is this process that in its dynamic behavior</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">has to satisfy the desired specifications.</div></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class=""><br class=""></div></blockquote>The follow-on problems caused by this problem are also spelled out:<br class=""><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">My second remark is that our intellectual powers are rather</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">geared to master static relations and that our powers to</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">visualize processes evolving in time are relatively poorly</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">developed. For that reason we should do (as wise programmers</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">aware of our limitations) our utmost to shorten the conceptual</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">gap between the static program and the dynamic process, to make</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">the correspondence between the program (spread out in text space)</div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class="">and the process (spread out in time) as trivial as possible</div></div><div class=""><br class=""></div></blockquote><div class="">Yes, that’s Dijkstra’s “goto statement considered harmful”.  And I think his analysis is still spot on:  while it makes perfect sense to create tooling in order to get better insight into the running program, we should <i class="">also</i> strive to reduce the gap between the static program text and the dynamic process that unfolds.  We have done a lot of the former, and very little of the latter.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div class=""><div class=""><b class="">Shortening the Conceptual Gap</b></div><div class="">------</div></div></div><div class=""><br class=""></div><div class="">So in order to shorten this conceptual gap between static program text and executing program for domains other than algorithms, in order to avoid having to write procedural meta-descriptions that don’t reflect what goes on in the running program, we need new linguistic mechanisms that go beyond procedures. </div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">We obviously still want the tooling, but we should not need it quite so desperately to have a chance of understanding what’s going on.</div><div class=""><br class=""></div><div class="">So that’s what Objective-S tries to provide, new linguistic mechanisms that go beyond procedures.  And it does this by generalising from objects and messages to components and connectors.  More details in the talk.</div><div class=""><br class=""></div><div class="">Cheers,</div><div class=""><br class=""></div><div class="">Marcel</div><div class=""><br class=""></div><div class=""><div><br class=""><blockquote type="cite" class=""><div class="">On 17. Nov 2021, at 08:53, David Ungar <<a href="mailto:ungar@mac.com" class="">ungar@mac.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Thank you. What claim, exactly?<br class=""><br class=""><blockquote type="cite" class="">On Nov 16, 2021, at 11:12 PM, Colin Sare-Soar <<a href="mailto:colin.saresoar@terrashape.co.uk" class="">colin.saresoar@terrashape.co.uk</a>> wrote:<br class=""><br class="">After reading your comment and seeing the reactions from others, I felt compelled to look further into the subject.<br class="">I found the website interesting and thought others might want to see what his claim was based on and not dismiss it out of hand because of that statement.<br class=""><blockquote type="cite" class="">On 17/11/2021 13:23 David Ungar <<a href="mailto:ungar@mac.com" class="">ungar@mac.com</a>> wrote:<br class=""><br class=""><br class="">I must confess I lost trust and stopped reading after reading that his was the first general purpose programming language. Thank you for pointing out the elaboration on the other page, but what was your purpose?<br class=""><br class=""><blockquote type="cite" class="">On Nov 16, 2021, at 9:57 PM, Colin Sare-Soar <<a href="mailto:colin.saresoar@terrashape.co.uk" class="">colin.saresoar@terrashape.co.uk</a>> wrote:<br class=""><br class="">That quote is from the home page, he does elaborate on the term on the about page.<br class=""><blockquote type="cite" class="">On 17/11/2021 01:21 David Ungar <<a href="mailto:ungar@mac.com" class="">ungar@mac.com</a>> wrote:<br class=""><br class=""><br class="">I followed the link <a href="http://objective.st/" class="">http://objective.st/</a> and read: "Objective-S is the first general purpose programming language." Were the others chopped liver?<br class=""></blockquote></blockquote></blockquote></blockquote></div></div></blockquote></div><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Begin forwarded message:</div><br class="Apple-interchange-newline"><blockquote type="cite" class=""><p style="margin: 0.0px 0.0px 0.0px 35.7px; text-indent: -35.7px" class=""><font face="Helvetica Neue" size="3" color="#000000" style="font: 12.0px 'Helvetica Neue'; color: #000000" class="">From: Tobias Pape <<a href="mailto:tobias@netshed.de" class="">tobias@netshed.de</a>></font></p>
<p style="margin: 0.0px 0.0px 0.0px 50.0px; text-indent: -50.0px" class=""><font face="Helvetica Neue" size="3" color="#000000" style="font: 12.0px 'Helvetica Neue'; color: #000000" class="">Subject: Re: [Self-interest] UK Smalltalk User Group Meeting - Wednesday 24 November</font></p>
<p style="margin: 0.0px 0.0px 0.0px 33.4px; text-indent: -33.4px" class=""><font face="Helvetica Neue" size="3" color="#000000" style="font: 12.0px 'Helvetica Neue'; color: #000000" class="">Date: 17. November 2021 at 08:37:23 CET</font></p>
<p style="margin: 0.0px 0.0px 0.0px 20.5px; text-indent: -20.5px" class=""><font face="Helvetica Neue" size="3" color="#000000" style="font: 12.0px 'Helvetica Neue'; color: #000000" class="">To: Marcel Weiher <<a href="mailto:marcel@metaobject.com" class="">marcel@metaobject.com</a>></font></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px" class=""><br class=""></p>
</blockquote><blockquote type="cite" class="">Du findest das zeug alles hier:<br class=""><span class="Apple-tab-span" style="white-space:pre">       </span><a href="http://lists.selflanguage.org/pipermail/self-interest/2021-November/thread.html" class="">http://lists.selflanguage.org/pipermail/self-interest/2021-November/thread.html</a><br class=""><br class="">Soviel hin und her war lange nicht :D<br class=""><br class="">Gruß<br class=""><span class="Apple-tab-span" style="white-space:pre">   </span>-tobias<br class=""><br class=""><blockquote type="cite" class="">On 17. Nov 2021, at 07:31, Marcel Weiher <marcel@metaobject.com> wrote:<br class=""><br class="">Gerne. :)<br class=""><br class="">Danke!<br class=""><br class="">Marcel<br class=""><br class=""><br class=""><blockquote type="cite" class="">On 16. Nov 2021, at 20:12, Tobias Pape <tobias@netshed.de> wrote:<br class=""><br class="">falls du antworten willst, kann ich das für dich relayen.<br class=""><br class="">GRuß<br class=""><span class="Apple-tab-span" style="white-space:pre">       </span>-Tobias<br class=""><br class=""><blockquote type="cite" class="">Begin forwarded message:<br class=""><br class="">From: David Ungar <ungar@mac.com><br class="">Subject: Re: [Self-interest] UK Smalltalk User Group Meeting - Wednesday 24<span class="Apple-tab-span" style="white-space:pre">       </span>November<br class="">Date: 16. November 2021 at 19:21:20 CET<br class="">To: Giovanni Corriga <giovanni@corriga.net>, Self-interest <self-interest@lists.selflanguage.org><br class="">Delivered-To: self-interest@mail.squeak.org<br class="">X-Mailer: Apple Mail (2.3693.40.0.1.52)<br class="">Envelope-To: <Das.Linux@gmx.de><br class=""><br class="">I followed the link http://objective.st/ and read: "Objective-S is the first general purpose programming language." Were the others chopped liver?<br class=""></blockquote></blockquote><br class=""></blockquote><br class=""><br class=""></blockquote></body></html>