Hello, in our project we've removed the primitive calls in Character and string comparison methods because they delivered different results from the corresponding locale collation methods. For example, $ü (u-umlaut) is sorted between $a and $z when using the collation method, and before $a when using the primitive VMprCharacterLessThan, which is incorrect according to german collation rules. When switching to 8.6.3 from 8.6, we found that the new source compression algorithm uses isSmalltalkLetter for character categorization, which is essentially fine but it uses #between:and: which with or without our patch is incorrect for the intended purpose. Instead of comparing characters (which is locale-sensitive) the method should compare code points:
isSmalltalkLetter "Answer true if the receiver is a valid Smalltalk letter as described in the ANSI Smalltalk Standard; otherwise answer false.
It would be easier to simply send #isLetter, but we cannot do this because some country codes have characters that say they are letters but are not valid Smalltalk syntactic letters. We also need to allow for the nonCaseLetter"
In addition, something should be done about the different behavior of Character comparison method #< and the corresponding locale collation. To me it is unclear what the correct behavior should be, but the locale collation is more useful to us.
I should note that this issue came up for us because we fixed the 8.6.2 source compression incompatibility by an image patch which disabled the use of the source compression primitives, so that the Smalltalk code would be run which is probably not the case for many other users.