2005-06-08 (Wed) [長年日記]
_ C++の設計と進化
まつもとさんにお借りした。
まだパラパラとめくってみた程度だけど、なかなか面白い。 え、ダブルディスパッチが最初に紹介されたのは1986年?、そんなに最近なの?、とか。
機会があれば、一度本格的にC++を使ってみたいな(一度ってところがポイント)。
_ SEGV
SEGVでRastのインデックスが壊れた:(
その後、~/ximapd/mails以下を新しいデータディレクトリにインポートすると やはりSEGV。どうもスタックが壊れているようだ。
とりあえず、ruby/ext/rast/rast.cのVALUE型のauto変数全部にvolatileを付けたら 落ちなくなった。
$ cd rast-0.1.1/ $ sed -i -e 's/^\( *\)VALUE/\1volatile VALUE/' ruby/ext/rast/*.c
これでしばらく様子を見てみよう。
pool_new()してget_pool()するVALUEにはvolatileが必要そう。
右上の「お子ちゃま」の写真を見るたびに心が和(なご)みます。ついでに、生まれ故郷の松江を思い出して感慨に浸る私。
そのあたりっぽいですね > volatile<br>もう全部volatileにしといた方が面倒が少ないかなと思ったり。<br><br>安達さんは松江の方なんですね。<br>子どもを育てるのにいいところですね。
ripperのときにも書いたような気がしますが、<br> VALUE vhoge = hoge_new(void);<br> struct hoge *ptr = get_hoge(vhoge);<br>と分かれているのは間違いを招きやすいつくりだと思います。<br><br> struct hoge *hoge_new(volatile VALUE *);<br><br> VALUE vhoge;<br> struct hoge *ptr = hoge_new(&vhoge);<br><br>と、分割できない形になっているべきなのでは。
そういえば、そんな話がありましたね。<br>Y君に伝えておきます。