山宮さんとの対話

http://d.hatena.ne.jp/propella/20040627#p1の質問に。

storePointer:ofObject:withValue:は、固定長オブジェクトのスロットにアクセスするのが主な用途ですね。
stObject:at:put:のほうは、配列のようなオブジェクトで、byteオブジェクトであっても動いたりするのですが、プリミティブを書いているときは普通は自分が扱っているのがwordオブジェクトであるか、pointerオブジェクトであるかあるいはbyteオブジェクトであるのか判っているはずですし、格納するために渡す値にも気を使いたいものなので、あまり自分では使わないものだと思います。

某Uさんに昔書いたメールから抜粋すると、

 * 配列のアクセスに関しては、

array := interpreterProxy firstIndexableField: oop

で最初の要素への参照を取り出した後、

0 to: (interpreterProxy stSizeOf: oop) - 1 do: [:i |
array at: i
]

のように書くと、Squeak内でもCに変換した後でも同じコードで動くものができます。WordArray、FloatArrayなどの正しい配列クラスを使うようにしていれば、fetch、store系はあまり使わなくてもすむはずではあります。

 * primitive内でオブジェクトを生成するのはとってもあぶなっかしいので、最初はそれには触れずに、必要となるデータはすべてSqueak側から渡す、という作法にする、というのが良いと思います。reverseも、結果をしまうための配列もprimitiveに渡し、そこに格納するというのがよいです。

ということになります。