[squeak-dev] [Pharo-users] Personal Programming onPharo

H. Hirzel hannes.hirzel at gmail.com
Thu May 10 10:34:58 UTC 2018


Hello Trygve

I think you have written an excellent summary about the challenge
presented by object-oriented programming.

GOF book on Design Patterns

    …, it's clear that code won't reveal everything about how a system
will work. [ibid.p.23]

And the development of Pharo and Squeak the last 10..15 years
exemplifies  that this is indeed still a challenge though there are
some examples and ideas how to cope with it.

So is this a case for promoting DCI and related tools (which by itself
goes back 10 years)?

--Hannes

On 5/10/18, Trygve Reenskaug <trygver at ifi.uio.no> wrote:
> At 87, I'm an old man. I'm told that I don't understand modern software,
> which is true. I use some programs daily: WIN7, Pharo, Thunderbird, ...
>  From time to time, I am told that a new version of the program that
> fixes bugs and improves security is available. Press the button to
> install it.  So I wonder: Is modern software out of control? Does
> /anybody /understand it, or is it so complicated that it is beyond human
> comprehension? Why didn't they get it right the first time? Most of us
> have the GOF book on Design Patterns on our bookshelf.  In the
> introduction, they write:
>
>     /An object-oriented program's runtime structure often bears little
>     resemblance to its code structure. The code structure is frozen at
>     compile-time; it consists of classes in fixed inheritance
>     relationships. The runtime structure consists of rapidly changing
>     networks of communicating objects.[GOF-95] p. 22./
>
>   and
>
>     /…, it's clear that code won't reveal everything about how a system
>     will work. [ibid.p.23]/
>
> Modern programmers are thus reduced to relying on testing the code. In
> the words of Edsger Dijstra:
>
>     /"Program testing can be used to show the presence of bugs, but
>     never to show their absence!"[REF] /
>
> Modern programmers know all this but accept it as an unavoidable part of
> progress. Some may have seen it as a challenge, but they are up against
> the enormous inertia of a community who haven't changed their
> fundamental model of programming since the advent of the von Neumann
> stored program computer in 1948.
>
> I can't resist another quote; this time from Tony Hoare's TuringAward
> lecture:
>
>     /“There are two ways of constructing a software design: One way is
>     to make it so simple that there are obviously no deficiencies and
>     the other is to make it so complicated that there are no obvious
>     deficiencies. The first method is far more difficult. …[Hoare-81]/
>
> In the lecture, Hoare was bemoaning his unsuccessful fight for
> simplicity. Developers, particularly committees  of developers, seem to
> love complexity for its own sake. I have never accepted that bugs are an
> unavoidable part of software.(See "2.    Get it Right the First Time"
> in the draft article). Bugs are parts of the facts of life but they are
> not an acceptable part of it. Ideally, my software should be /so simple
> that there are obviously no deficiencies. /One of my attempts at coming
> to grips with the problem is the DCI programming paradigm. Here, /the
> runtime structure of rapidly changing networks of communicating objects/
> is specified in explicit code that says (almost) everything about what
> happens at runtime. Wouldn't it be wonderful if Pharo were to become
> first to overcome the GOF limitation? I challenge you to play with
> BabyIDE on Squeak  and become convinced that it is a step in the right
> direction.
>
> I won't reread this message before I  send it. I suppose it's
> controversial and should probably delete some or all of it to avoid
> angry answers. Another reason why I probably shouldn't send it is that I
> do not have time to engage in a discussion. I /must /give priority to
> finishing my article on DCI and PP. (A ~50 page draft is on my home
> page; it will be updated from time to time)
>
> I press the SEND button with a shaking hand
> --Trygve
>
>
>
> On 09.05.2018 15:53, Richard O'Keefe wrote:
>> ​I have a C++ program written in the late 80s by someone
>> else.  It used to run fine under cfront 2.0 and early g++.
>> Ten years after it was written it was impossible to compile.
>>
>> *Since* that there have been changes to streams and strings,
>> amongst other things.
>>
>> The 1989 C standard changed the semantics of mixed signed/unsigned
>> integer arithmetic.  It also inadvertently rendered illegal a
>> widely used technique.  It is notoriously the case these days
>> that compilers taking the C standards literally have "broken"
>> quite a lot of code that worked with less ambitious compilers.
>> I have been watching this phenomenon with considerable
>> nervousness.  See for example
>> http://www.eng.utah.edu/~cs5785/slides-f10/Dangerous+Optimizations.pdf
>> <http://www.eng.utah.edu/%7Ecs5785/slides-f10/Dangerous+Optimizations.pdf>
>>
>> I have certainly had previously acceptable C89 code be rejected
>> by compilers as not being legal C11.  It is true that compilers
>> tend to have command line/IDE switches to ask that old code be
>> compiled under old rules, but you cannot say that *in* the program.
>> There is no way to mark the language version, no
>>     #pragma stdc version iso99
>>
>>
>>
>> As for Java, I could rant about the floods of deprecation warnings
>> from old code.  I shall content myself with one observation.
>> Read http://java-performance.info/changes-to-string-java-1-7-0_06/
>> Before Java 1.7, the substring operation in Java took O(1) time
>> and space.  From Java 1.7 on, it takes time and space linear in the
>> size of the result.  The syntax and abstract semantics did not
>> change but the pragmatics did.  Code that had adequate performance
>> could suddenly start crawling.
>>
>> Oracle do a tolerably thorough job of describing compatibility
>> issues between JDK releases.  See for example
>> http://www.oracle.com/technetwork/java/javase/8-compatibility-guide-2156366.html#A999198
>> where we learned that the 'apt' tool was gone, the JDBC-ODBC bridge
>> was gone, 32-bit Solaris support (and yes, I was still using 32-bit
>> code in SPARC Solaris and Intel Solaris) was gone, and the type
>> inference algorithm had changed in a way that could break things.
>> I am still somewhat peeved about some of the rewriting I've had to
>> do over the last several releases.
>>
>> Then there is the simple fact that porting code from one release of
>> an OS to another can be a pain.  Solaris 10 to OpenSolaris was easy.
>> OpenSolaris to Solaris 11 was not as painless.  Solaris 11 to
>> OpenIndiana was not a happy time for me.  OpenBSD changes forced
>> rework.  I'd finally got my program to port smoothly between Solaris,
>> Darwin, and Linux.  And then I had trouble porting to the next major
>> release of Linux.  And with Ubuntu 17, I've got another problem I
>> still haven't tracked down.  All of this in a C program that gets
>> regularly (sp)linted and checked all sorts of ways, written with
>> the intention of producing portable code.
>>
>> EVERYTHING BREAKS.
>>
>>
>> On 7 May 2018 at 22:42, Trygve Reenskaug <trygver at ifi.uio.no
>> <mailto:trygver at ifi.uio.no>> wrote:
>>
>>     Please tell me when Java, C, C++, etc programs stopped working
>>     because their runtime systems had changed.
>>     Please tell me when Java, C, C++, etc compilers stopped compiling
>>     old code because the languages had changed.
>>
>>
>>     On 07.05.2018 11:57, Norbert Hartl wrote:
>>>     I understand what you are saying but it contains some
>>>     misconceptions about the modern software world.
>>>
>>>     „The earth is not stopping to turn just because you want to stay
>>>     on the sunny side“
>>>
>>>     There is two funny concepts going on in the modern software
>>>     industry. The one tells you that because you want to do a product
>>>     everything else around you should come to a full stop so can
>>>     comfortably build your software not disturbed by other things.
>>>     The second one tells you that you _have to upgrade_ … there is
>>>     this magical force preventing you from staying where you are.
>>>     Both notions are funny alone but they come combined and then they
>>>     turn out to be a non-sensical monster.
>>>
>>>     Let’s take a different approach. Put in everything you say about
>>>     software, libraries, etc the word version. So you can build upon
>>>     Pharo version 3 your own product. You can stay at that version
>>>     and it won’t change. If the software you sell is not 80% pharo
>>>     but your own you should not have a problem just to stay on that
>>>     version because you develop your own stuff. But still the world
>>>     did not stop turning and there is pharo 4. You decide there are a
>>>     few nice features but the work to adjust is too big to take the
>>>     risk. Then there is pharo 5 and you … nahhh not this time….Then
>>>     there is pharo6 and they not only changed the image but also the
>>>     way source code is managed. That prevents you further from
>>>     adjusting. But hey you can still be happy with pharo3 and it does
>>>     not change.
>>>
>>>     So what is the real problem? Yes, money/time is not enough. I
>>>     think there are a lot of people risking their health to promote
>>>     pharo and now we have a consortium that can pay engineers to do
>>>     work on pharo. So let me tell you a future story:
>>>
>>>     You see what pharo is doing and you think it is good. You can
>>>     also see that there are too less resources to proceed in the way
>>>     you need it to go. So you decide to show pharo to the world
>>>     inspiring people with some kind of a vision. The result is that
>>>     more people pay into the consortium and we hire more engineers.
>>>     And then one day the consortium has enough money to pay engineers
>>>     that can care about a LTS (long term support) version of pharo.
>>>     So you can stay on pharo version 3 and still get those annoying
>>>     bugs fixed. And hey this team has also enough time to provide you
>>>     with tools that make a migration to pharo version 4 more easy and
>>>     less annoying for you. And then you have your own product based
>>>     on pharo version 4. And then for version 5, version 6,…. Sounds
>>>     like a dream…but hey…it is indeed realistic. It just depends on
>>>     how the people approach it
>>>
>>>     How does this sound?
>>>
>>>     Norbert
>>>
>>>>     Am 07.05.2018 um 11:31 schrieb Trygve Reenskaug
>>>>     <trygver at ifi.uio.no <mailto:trygver at ifi.uio.no>>:
>>>>
>>>>     Thanks for your quick answer.  I have only a fleeting knowledge
>>>>     of Pharo but liked what I saw. The Squeak class library has seen
>>>>     organic growth since 1978 or earlier. Pharo gave it a thorough
>>>>     overhaul. At the Pharo kernel was a minimal image with a minimal
>>>>     class library. The rest of the functionality was partitioned
>>>>     into packages that could be added to the kernel image as
>>>>     required. Beautiful. But only my dream?
>>>>
>>>>         /Matthew 7:24-27: And the rain fell, and the floods came,
>>>>         and the winds blew and beat on that house, but it did not
>>>>         fall, because it had been founded on the rock. And everyone
>>>>         who hears these words of mine and does not do them will be
>>>>         like a foolish man who built his house on the sand."/
>>>>
>>>>     I am developing an IDE for non-programmers called BabyIDE, a
>>>>     non-intrusive extension of Squeak. Where the Class Browser in
>>>>     Squeak is used to work with one class at the time, the BabyIDE
>>>>     browser is used to work with structures of collaborating
>>>>     objects, ignoring their classes. I would like to develop a
>>>>     BabyIDE image that gets broad usage and long life. I'm looking
>>>>     for a rock to build on and hoped it could be what I thought was
>>>>     the Pharo kernel+ a few selected packages. In your answer, I
>>>>     read that if I build BabyIDE on Pharo, I will be building on sand.
>>>>
>>>>     pharo.org <http://pharo.org/>writes: "/Pharo is a pure
>>>>     object-oriented programming language.../". The only language I
>>>>     can see is defined by the release image. A Pharo programmer
>>>>     builds application programs in this language. He or she can add
>>>>     new classes, change existing ones, subclass them, add or change
>>>>     methods, change the Smalltalk dictionary, etc. etc.  An
>>>>     extremely flexible and powerful language.
>>>>
>>>>     A tale from the future when Pharo is a mainstream
>>>>     language:Business customers benefit from end users using
>>>>     applications that are written by Pharo programmers who built on
>>>>     the Pharo language and environment that had been developed by
>>>>     the Pharo community. One day there is a happy announcement: A
>>>>     new version of Pharo will be launched tomorrow. It is truly cool
>>>>     and includes any number of improvements, some of them
>>>>     documented. And, by the way, applications written in the current
>>>>     Pharo will no longer work. So please inform your customers that
>>>>     you will not be able to serve them for a while. We are confident
>>>>     that all your application programmers will be happy to drop
>>>>     whatever they are doing in order to adapt their applications to
>>>>     the new Pharo so that you can start serving your customers again.
>>>>
>>>>     Cheers
>>>>     --Trygve
>>>>
>>>>
>>>>
>>>>     On 06.05.2018 13:00, Norbert Hartl wrote:
>>>>>     Can you elaborate on what you consider as a kernel? There are
>>>>>     always things moving in the pharo world. The last years the
>>>>>     virtual machine got some iterations and it is still not fully
>>>>>     stable. For pharo it is hard to have it stable because we feel
>>>>>     the need that a lot of the existing parts need to be replaced
>>>>>     to be useful in these times. Furthermore pharo is also
>>>>>     prototyping platform for programming language features. All of
>>>>>     these are counter-stability measures. So if you need a stable
>>>>>     kernel from native ground up to UI pharo won‘t be that thing
>>>>>     you are looking for the coming years (if at all). You always
>>>>>     need to adopt to change so you need to define your required
>>>>>     scope better in order to get an estimate.
>>>>>
>>>>>     Norbert
>>>>>
>>>>>     Am 06.05.2018 um 11:31 schrieb Trygve Reenskaug
>>>>>     <trygver at ifi.uio.no <mailto:trygver at ifi.uio.no>>:
>>>>>
>>>>>>     I'm working on a programing paradigm and IDE for the personal
>>>>>>     programmer who wants to control his or her IoT. The size of
>>>>>>     the target audience I have in mind is >100 million. I gave up
>>>>>>     Squeak long ago as a platform because they obsolete my code
>>>>>>     faster than I can write it.  I have now frozen Squeak 3.10.2
>>>>>>     and hope its runtime will survive until I find a better
>>>>>>     foundation. My hope is that Pharo has a stable kernel that I
>>>>>>     can build on.  According to Stephan, this is not so. Is there
>>>>>>     any plan for creating a stable Pharo kernel that people can
>>>>>>     use for building software of lasting value for millions of
>>>>>>     non-expert users?
>>>>>>     --Thanks, Trygve
>>>>>>
>>>>>>     On 05.05.2018 13:53, Stephan Eggermont wrote:
>>>>>>>     I’ve taken a look at what would be needed to
>>>>>>>     support magma on pharo a few years ago. Chris always told us he
>>>>>>> uses it
>>>>>>>     professionally on squeak and/*has not enough capacity to keep up
>>>>>>> with changes in pharo
>>>>>>>     without having a customer/maintainer for it.*/  Twice a year
>>>>>>>     or so someone asks about magma on pharo and takes a look. AFAIK
>>>>>>> there are
>>>>>>>     no real obstacles to a port, but magma uses a lot of deep
>>>>>>> implementation
>>>>>>>     specifics that will take an experienced smalltalker to deal with,
>>>>>>> and a lot
>>>>>>>     of mailing list archeology as pharo changed a lot since magma
>>>>>>> worked on
>>>>>>>     pharo last
>>>>>>>
>>>>>>>     Stephan
>>>>>>
>>>>>>     --
>>>>>>     /The essence of object orientation is that
>>>>>>     objectscollaboratetoachieve a goal./
>>>>>>     TrygveReenskaug mailto: trygver at ifi.uio.no
>>>>>>     <mailto:%20trygver at ifi.uio.no>
>>>>>>     Morgedalsvn. 5A http://folk.uio.no/trygver/
>>>>>>     <http://folk.uio.no/trygver/>
>>>>>>     N-0378 Oslo http://fullOO.info <http://fulloo.info/>
>>>>>>     Norway Tel: (+47) 22 49 57 27
>>>>
>>>>     --
>>>>     /The essence of object orientation is that
>>>>     objectscollaboratetoachieve a goal./
>>>>     TrygveReenskaug mailto: trygver at ifi.uio.no
>>>>     <mailto:%20trygver at ifi.uio.no>
>>>>     Morgedalsvn. 5A http://folk.uio.no/trygver/
>>>>     <http://folk.uio.no/trygver/>
>>>>     N-0378 Oslo http://fullOO.info <http://fulloo.info/>
>>>>     Norway Tel: (+47) 22 49 57 27
>>>
>>
>>     --
>>
>>     /The essence of object orientation is that objects collaborateto
>>     achieve a goal. /
>>     Trygve Reenskaug mailto: trygver at ifi.uio.no
>>     <mailto:%20trygver at ifi.uio.no>
>>     Morgedalsvn. 5A http://folk.uio.no/trygver/
>>     <http://folk.uio.no/trygver/>
>>     N-0378 Oslo http://fullOO.info <http://fullOO.info>
>>     Norway Tel: (+47) 22 49 57 27
>>
>>
>
> --
>
> /The essence of object orientation is that objects collaborateto achieve
> a goal. /
> Trygve Reenskaug mailto: trygver at ifi.uio.no <mailto:%20trygver at ifi.uio.no>
> Morgedalsvn. 5A http://folk.uio.no/trygver/
> N-0378 Oslo http://fullOO.info
> Norway                     Tel: (+47) 22 49 57 27
>
>


More information about the Squeak-dev mailing list