言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

postCopy

オブジェクトのコピーというのはなかなか奥深いものである。物質的な世界に本当にコピーできる物などありはしないので、プログラムで使う情報のコピーはしばしば非直感的な振る舞いを引き起こし、バグの温床となる。例えば画面に表示されたある物体をコピーしようとする場合。

  • 本当に全部コピーする。物体が他の何かを指していても、それごとごっそりコピーする。
  • ちょっとだけコピー。物体が他の何かを指していても、同じ物を指す。

用途やコストに応じて、様々なバリエーションが考えられる。昨日阿部さんに、これからは postCopy をつかうのぢゃと言われる。postCopy とは何か? とりあえずちょっとだけコピーして、あとで postCopy の時にもっと複製が必要な情報があるならさらにコピーをするというもの。copy 自体を書き直すよりも好まれるらしい。たしかに VisualWorks のソースを見ると、copy 自体をオーバーライドしている物は、Symbol のような最低限のものしかなかった。Squeak は、すごい数あった。postCopy を使う利点を理解した訳ではないが、とりあえず真似してみようか。

ちなみに、VisualWorks はインストールが面倒なので滅多な事では入れないのだが、さっき見ると JunAllInOne ftp://ftp.sra.co.jp/pub/lang/smalltalk/jun/JunAllInOne/ すごい便利なやつがあった。