I've just tracked down a nasty little problem
porting some code to Pharo.  As a result, I
have added to the comments in my own versions
of these methods.    beginsWith: aSequence
      "Answer true if aSequence is a prefix of the receiver.
       This makes sense for all sequences.
       There is a compatibility issue concerning 'abc' beginsWith: ''
       + VisualWorks, Dolphin, astc, GNU ST (where the method is
         called #startsWith:) and VisualAge (where the method
         is called #wbBeginsWith:)
         agree than EVERY sequence begins with an empty prefix.
       - Squeak and Pharo
         agree that NO sequence begins with an empty sequence.
       # ST/X chooses compatibility with Squeak, heaving a big unhappy
         sigh, and adds #startsWith: to have something sensible to use.
       Now ST/X *thinks* it is compatible with VW, though it isn't, so
       I wonder if this was a bug that VW fixed and Squeak didn't?
       astc goes with the majority here.  This is also compatible with
       Haskell, ML, and with StartsWith in C# and startsWith in Java."
      ^self beginsWith: aSequence ignoringCase: false

    endsWith: aSequence
      "Answer true if aSequence is a suffix of the receiver.
       This makes sense for all sequences.
       There is a compatibility issue concerning 'abc' endsWith: ''.
       + VisualWorks, Dolphin, astc, GNU ST, and VisualAge (where
         the method is called #wbEndsWith:)
         agree that EVERY sequence ends with an empty suffix.
       - Squeak and Pharo
         agree that NO sequence ends with an empty suffix.
       # ST/X chooses compatibility with the majority, apparently
         unaware that this makes #beginsWith: and #endsWith: inconsistent.
       astc goes with the majority here.  This is also compatible with
       Haskell, ML, C#, and Java."
      ^self endsWith: aSequence ignoringCase: false

Does anyone have any idea
 - why Squeak and Pharo are the odd ones out?
 - why anyone thought making #beginsWith: and #endsWith:, um, "quirky"
   was a good idea (it's pretty standard in books on the theory of
   strings to define "x is a prefix of y iff there is a z such that
   y = x concatenated with z")

I was about to try to file a bug report for the first time,
then realised that maybe other people don't think this IS a bug.

Reply via email to