Squeak の Smalltalk

'1' + 1 1 + '1' '1' + '1' 'a' + '1' 'a' , '1'

1 / 2 ( 1 / 2 ) class



まず、Smalltak では文字列（や配列などの順序付きコレクション）どうしの結合には "+" ではなく ","（カンマ）を使うので、「'文字列' + 数値」という式に対して期待することについては、他の言語とは少々事情が異なります。VisualWorks などの“正統派”の Smalltalk 処理系では '1' + 1 は（単純に文字列がメソッド #+ を起動できない旨の）エラーになりますが、Squeak では 1 + 1 を期待しているものとして 2 を返してきます。

Integer >> #/ が分数を返すことについては、1970 年代初頭、Smalltalk の演算において型強制が導入された経緯に触れた squeak-dev への投稿が歴史や経緯が好きな自分には興味深かったです。

また、同じく分数にからめては、ダン・インガルスの こんな逸話も（ただし内容は本件とは関係ない、動的なシステムの落とし穴…といった話ですが）。かいつまむと、まだ Fraction クラス（Ruby でいう Rational クラス）が Smalltalk になかった 1970 年代、ある学生がこれを不用意に導入したところ Alto（この文脈では暫定ダイナブック）の GUI がうまく動かなくなり、原因を調べたら本来整数でなければならない BitBlt の低レベルの原始メソッドのパラメータに分数が紛れ込み、コールに失敗していた…というような話です。





