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 <tryg...@ifi.uio.no
<mailto:tryg...@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
<tryg...@ifi.uio.no <mailto:tryg...@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
<tryg...@ifi.uio.no <mailto:tryg...@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: tryg...@ifi.uio.no
<mailto:%20tryg...@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: tryg...@ifi.uio.no
<mailto:%20tryg...@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: tryg...@ifi.uio.no
<mailto:%20tryg...@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: tryg...@ifi.uio.no <mailto:%20tryg...@ifi.uio.no>
Morgedalsvn. 5A http://folk.uio.no/trygver/
N-0378 Oslo http://fullOO.info
Norway Tel: (+47) 22 49 57 27