GNU Smalltalk における文字列比較の落とし穴

Squeak Smalltalk とか VisualWorks Smalltalk(Cincom Smalltalk
'Abc' < 'abc'   "=> true "

だよねぇ? ふつーは。 なのに、

GNU Smalltalk
'Abc' < 'abc'   "=> false "

むむむ。

String whichClassIncludesSelector: #<   "=> CharacterArray"

< aCharacterArray
Return true if the receiver is less than aCharacterArray, ignoring case differences.

http://www.gnu.org/software/smalltalk/gst-manual/gst_68.html#SEC233


あ。そーゆーことね。 なれば、

GNU Smalltalk
'Abc' = 'abc'   "=> false "


むむむ!?

GNU Smalltalk
'Abc' > 'abc'   "=> false "


orz

やばい。やばいよ、GNU Smalltalk ……。


おまけ

ふと気になったので、Ambrai Smalltalk でもやってみた。

Ambrai Smalltalk
'Abc' < 'abc'   "=> false "
'Abc' = 'abc'   "=> false "
'Abc' > 'abc'   "=> false "


ぶるーたす。おまえもか。


つか。やばい、やばいよ。ANSI 準拠 Smalltalk ……。


追記

Smalltalk で遊びはじめのかた向けには、どうしてこうなるのかを調べる作業を通じて、Smalltalk に特徴的な「処理系自身による処理系それ自体のイントロスペクション」という、興味深い(しかし、Smalltalker なら日常的に行なっている…)体験をするのによい題材かとも。