山宮さんとの対話

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に渡し、そこに格納するというのがよいです。

ということになります。

山宮さんとの対話(2)

コールバックに関しては、id:io_oiさんも詳しいと思いますが、Semaphoreを渡して(Semaphoreのindexを渡して)、なにかあったらそれをsignalしてもらい、Squeak側でそのSemaphoreを待っているやつが動き出す、というスタイルが判りやすいです。

wxWindowへのインターフェイスを作っている人はもう少しがんばってSqueakへのコールバックをやろうとしているみたいですが、その路線はとってもとっても大変です。

山宮さんとの対話(4)

SmartSyntaxInterpreterPluginを使わずに、スタックから値を取り出したりするやつも自分で書くようにすると、InterpreterPlugin>>doPrimitive:によって、Slangの中もSqueakのデバッガでデバッグできます(梅澤さん前書いたことに一部うそがあってすみません)。

support codeの方は、面倒ながらVCでそれらのプリミティブを呼ぶアプリケーションを書いて、VCのデバッガでデバッグするときもありますね。

Newport Beachリーグ

なんだか良くわからない形式のプレーオフだったようですが、また負けてしまいました。まだeliminatedというわけではないので再来週以降残った兵(つわもの)どもにがんばってもらいましょう。

僕自身は調子はまあまあだったのですが、うーむ。