私が作っているオモチャプログラムがまたちょっと進展したので、こっちにも貼っておきます。
これまでテキトーに作ってきたのでバグバグだったり、ちょっと変更しただけでメモリがだだ漏れになったりと困った子だったYatceですが、今回本格的にリファクタリング、もとい、私がerl_driverを勉強し直したので半分くらいすっきりした作りになりました。性能とか測ってないけどメンテナンス性はかなり上がっていると思います*1
Erlangネタの日記の方だけに書いておけばよいのかもですが、こちらにも書くことがあって、中程度に本格的なコレクションライブラリを作ったからです。コレクションライブラリはいろんなデータ構造があって、ざっと思い浮かべるだけで
- simple array
- linked list
- bi-directional linked list
- skip list
- binary tree
- red-black tree
- splay tree
- B-tree
- B+-tree
- B*-tree
- Hash array
- link
- skipping
とかいろいろあって、これが基本的にあちこちのデータベースの基本部品になるわけです。なので勉強も兼ねてちょっと作ってみましたが(といってもlinked listとlinking hash arrayだけ。splay-treeとかB+-treeは作業中)、やっぱりロック周りが難しい…とかいろいろあるのですが、まあどうでもいいです。そろそろSTLのコンテナのコレクションもスレッドセーフにしてくれたらいいのに…と思っていたのだけど、今回作ってみたところ、単にスレッドセーフといっても、ロックにはスピンロックとかいろいろあるし、ロック範囲をどのように設計するかってのも使い方に依存してくるので一概には言えないのです。というわけで、「車輪の再発明をしてはならない」「DON'T REPEAT YOURSELF」とか大声で喋る孔明の罠にハメられては技術力は向上しないという問題に対する対策でした。