2005年03月09日(Wed) 遠方より友来たる [長年日記]
● わーい。
● CでDuck Typing
Duck Typingって一般的なプログラミング用語かと思ってたら、Ruby用語だったのですね。データの元の型に関係なくメッセージを送る(データに対してメソッドを呼ぶ)ことができる、という意味だろうと思います。
今、本職でやっている仕事のひとつは、装置のいろーんなステータスがいろーんなフォーマットで記録されているストリームから、欲しいステータスだけを取り出すソフトを作ることです。上のインターフェースはPythonかRubyで作るとして、ストリームとのやりとりはCのライブラリとして欲しい、という要求があります。もしかしてステータスへのポインタに対してto_sとかto_iとか呼べばいいんじゃないか?と思って実装を始めたのですが、これが大変でした。何しろどんな型のデータでも扱えなくちゃいけないので、Cではvoid*がでてきまくり。これをステータスの型に合わせてキャストして変換して、double*とかlong long*の領域にコピーするわけですけど、Bus errorとかSegmentation faultとか出まくりでございますよ。
なんとか形にはなってきたのですが、実際にどんな値であるべきかがよくわからないのでテストケースを書くのも一苦労だったりします。でも、まあ、CでもどうにかこうにかDuck Typingができるということで。(考えてみればRubyだってCで実装されてるのだからあたりまえといえばあたりまえだ。)
ところで、"walk like a duck" businessってどういうbusinessなんだろう…。
● [memo] IBM dWより興味深い記事2題
- 効果的なリスト処理でプログラミングを改善する - リンクリストの話みたい
- Linuxのデバッグ手法をマスターする - double freeの検出とかstrace、gdbの使い方とか
あとでよむ〜いつ〜。
最近のツッコまれどころ