Ad 1.
���� To cut a long story short,
���� the ANSI Smalltalk standard is the nearest thing we have to a clear specification
���� of the nearest thing we have to a consensus.
���� One of the reasons that Smalltalk gets less use than many of us would like
���� is that it can be extremely unpleasant trying to port from one dialect of
���� Smalltalk to another, so you have to commit to a dialect.
���� And dialects of Smalltalk have an unpleasant habit of disappearing.
���� I really liked Ambrai.�� What was I to do with my Ambrai code when
���� Ambrai disappeared?
���� I have never met a better-looking Smalltalk than Dolphin.
���� ObjectArts stopped selling Dolphin a year or two ago, and open sourced it.
���� Today the ObjectArts website has an expired certificate,
���� pages have the date 2016 on them,
���� and the GitHub link points to a GitHub site containing an Amber fork
���� but no Dolphin.
���� Imagine my relief at discovering that Dolphin *is* still being maintained,
���� it's just not where ObjectArts said it was.�� But I am worried about
���� whether I should bother with it any more.
���� Then there's ST/X.
���� ...
���� Code written for C99 is still useful.
���� I have four different C compilers and I don't have to care which one I use.
���� Code written for Fortran95 is still useful (and yes I know about Fortran 2018).
���� I have two different Fortran compilers; the one that does the best job handles
���� Fortran 2003 but not 2008 or 2018, and as long as I stick to 2003 I don't have
���� to care which I use.
���� The Common Lisp standard came out in 1994 and the HyperSpec is still useful
���� to me for writing Lisp today.
���� My copy of Common Lisp the Language, 2nd edition, is still useful to me.
Ad 2.
���� In the Pharo 7.0 sources there are on the order of 600 senders of #signal[:]
���� -- exceptions and semaphores both use #signal so this is approximate --
���� and on the order of 1000 senders of #error:, which really should be
���� exceptions.�� (It is surprisingly hard to make this change.)�� The newer
���� components use exceptions a lot more than the old ones.
���� Of course some exceptions (like subscript out of bounds) are raised
���� inside primitives, which Ctrl-N doesn't show you.
���� One quite strange thing about the ANSI Smalltalk standard is that it
���� introduced an elaborate exception-handling system into the language
���� -- much more complicated than C++ or Java or Ada -- but introduced
���� almost no standard exceptions that a portable program could catch.
���� Let's take one consequence of this.
���� What does
���������� (OrderedCollection withAll: #[3 1 4 1 5 9]) copyFrom: 2.5 to: 4.2
���� do?
���� My Smalltalk: currently reports 'bad start' coming from the call to
���� #copyFrom:to: with culprit 2.5.
���� This is going to be an IndexError some day; cleaning
���� up the code to use well-chosen exceptions is a mammoth task.
���� Squeak: 'Array called #basicNew: with invalid argument 2.7'
���� Of course there is no 2.7 in our code...
���� Pharo: 'PrimitiveFailed: primitive #basicNew: in Array class failed'
���� VW: 'Unhandled exception: This message needs a positive integer argument'
���� appearing to come from OrderedCollection>>new:
���� VisualAge Smalltalk: drops you into a debugger with no actual explanation;
���� the only number in sight is 2.7, which is not one of the numbers we provided.
���� GNU Smalltalk: 'Object: 1 error: The program attempted to divide a number by zero'.
���� I kid you not.
���� Exceptions could be useful IF you knew what to catch.
���� Just for grins, sending #copyFrom:to: to an OrderedCollection with a start
���� or stop value out of range raises an ExCLDTIndexOutOfRange exception but
���� sending it to an Array with the same contents does not.
Ad 3.
���� allButFirst: n ^self copyFrom: n+1 to: self size
���� and then ask what #copyFrom:to: should do.
This is actually one tiny symptom of a pervasive issue in Smalltalk.