List cutter

仕事場でとあるプログラムのバグ報告に目を通していた。Linked listが云々と書いてあったが、そこで取り扱っているデータが何なのかとか、何のためにLinked listを使っているのかなど、肝心要の部分への言及がなかったり、バグの対処方法の説明がトンチンカンだったりと、惨憺たる内容である。当然頭の中にはモヤットボールが多数。
こうなったらということで「この方に聞けばどうにかなるかも」という方に無いよう詳細を聞いてみた。何のことはない。とあるデータを「線形リスト」構造を使って辞書に仕立て上げただけのことだった。Wikipediaにも掲載されているくらいの、データ構造の教科書の先頭付近を飾るであろう代物の現物に出会うのは、軽く10年振りくらいにはなるだろうか。


話を聞いたところ、バグの中身について大まかに理解ができた。当のバグというのは「線形リスト」のポインタが何らかの原因であさっての方向を向いてリストが断裂してしまい、そのポインタ通りの場所のメモリへアクセスして地雷を踏んでプログラムがダウンする、という仕掛けらしい。
ここからが新たなる疑問。
通常「線形リスト」の様な基礎中の基礎とされるデータ構造は、それを取り扱うためのライブラリなり、標準関数のようなものが用意されており、わざわざプログラムを組まなくても済むようになっている。少なくともC++やJavaにはそのようなものが用意されており、他の言語でも類似の仕組みが用意されている、と予想している。
「線形リスト」の取り扱いといったライブラリや標準関数ができるくらいの処理であれば、趣味の日曜プログラマーにも簡単に取り扱うことのできる、バグ1つない、超安定動作のものができていていいはずなのだが、そこでバグっているのである。そのプログラムがどのような作り方をしているのか、実に興味深い。
残念ながら、現時点に至るまで「List cutter」がどこに潜んでいるのかは皆目検討がつかない、という開発者のコメントであった。

Last Updated on 2007/08/21