らんだむな記憶

blogというものを体験してみようか!的なー

可能世界

素晴らしい画像を拾った。
f:id:derwind:20180104214602j:plain:w250

上司→その上司へのメッセージパッシングをオブザーバパターンによってフックするとこのようなデータのコラプションによく遭遇する。このため、オブザーバ内にて(メッセージというリソースに対する)ロックを取得してサニタイズをしないとならないわけだが、オブザーバパターンとロックの取得は往々にしてデッドロックを誘発するので避けたい。が、ここで非同期通信で別メッセージをポストしてサニタイズを実行すると間に合わないので気を付けつつロックを取得するしかない。
ここでロックを取得しないパターンも想定されるが、容易にレースコンディションが発生して思いもよらぬコラプションへと至る。

だが残念なことにレシーバはANSI C以前からの古いライブラリを使うことで実装されていることが多く、かつ最早ソースコードは失われているので再コンパイルすることもできず、AS ISで使用するしかない状況である。そしてバグがある。インターフェイスは抽象化されているが、恐らく内部実装ではデータ型として32bitを前提としているのではないだろうか?最悪16bit時代の遺物かもしれない。このため64bitのデータを入力すると少なくとも上位32bitの情報量が欠損して、そのうちシステムは緩やかに崩壊する。例えるなら最上位ビットのみが立っているデータを入力したが上位ビットが落ちて0になってしまう。真偽値で考えると反転してしまうわけだ。 impossibleフラグのこのようなコラプションはムリを可能へと変える。
我々はこのような辛い世の中を生きているのである。